+;;;; * Presentation Searches
+
+
+;;;; ** "search all fields" criteria
+
+(defgeneric search-expr (criteria instance)
+ (:documentation "Return ready to apply criteria.
+ What to do with it is backend dependent."))
+
+(defmacro def-search-expr (((self criteria-type)) (model-expr &body body))
+ `(defmethod search-expr ((,self ,criteria-type) instance)
+ (,model-expr
+ instance
+ (slot-name (presentation ,self))
+ ,@body)))
+
+(defmethod search-expr ((self negated-criteria) instance)
+ (when (criteria self)
+ (meta-model:expr-not
+ instance
+ (search-expr (criteria self) instance))))
+
+(def-search-expr ((self string-starts-with))
+ (meta-model:expr-starts-with (search-text self)))
+
+(def-search-expr ((self string-ends-with))
+ (meta-model:expr-ends-with (search-text self)))
+
+(def-search-expr ((self string-contains))
+ (meta-model:expr-contains (search-text self)))
+
+(def-search-expr ((self number-less-than))
+ (meta-model:expr-< (number-input self)))
+
+(def-search-expr ((self number-greater-than))
+ (meta-model:expr-> (number-input self)))
+
+(def-search-expr ((self number-equal-to))
+ (meta-model:expr-= (number-input self)))
+
+
+
+(defcomponent mewa-presentation-search (presentation-search)
+ ((display-results-p :accessor display-results-p :initarg :display-results-p :initform nil)
+ (criteria-input :accessor criteria-input :initform "")
+ (new-criteria :accessor new-criteria :initform nil)))