forms refactoring, unique attr-names
							parent
							
								
									9ca73e14ec
								
							
						
					
					
						commit
						cff6e9e965
					
				| @ -0,0 +1,62 @@ | ||||
| (ns wanijo.schema.forms | ||||
|   (:require [wanijo.attribute.domain :as attr-domain] | ||||
|             [clojure.string :refer [capitalize]] | ||||
|             [clojure.spec.alpha :as spec])) | ||||
| 
 | ||||
| (defn unique-attr-name-in-schema! [req] | ||||
|   (let [schema-uuid (get-in req [:params :schema]) | ||||
|         attr-uuid (get-in req [:params :uuid]) | ||||
|         name (get-in req [:params :name]) | ||||
|         duplicates (->> (attr-domain/find-by-schema! schema-uuid) | ||||
|                         (map #(if (or (and (empty? attr-uuid) | ||||
|                                            (= name (:name %))) | ||||
|                                       (and (not (empty? attr-uuid)) | ||||
|                                            (= name (:name %)) | ||||
|                                            (not= attr-uuid (:uuid %)))) | ||||
|                                 1 0)) | ||||
|                         (apply +))] | ||||
|     (not= 0 duplicates))) | ||||
| 
 | ||||
| (spec/def ::unique-attr-name-per-schema | ||||
|   unique-attr-name-in-schema!) | ||||
| 
 | ||||
| (def schema | ||||
|   {:fields {:name {:label "Name" | ||||
|                    :required true | ||||
|                    :spec :wanijo.schema.domain/name} | ||||
|             :uuid {:widget :hidden}}}) | ||||
| 
 | ||||
| (def attr-form | ||||
|   {:fields {:name {:label "Name" | ||||
|                    :required true | ||||
|                    :spec ::attr-domain/name | ||||
|                    } | ||||
|             :type {:label "Type" | ||||
|                    :required true | ||||
|                    :spec ::attr-domain/type | ||||
|                    :widget :select | ||||
|                    :options (map #(vector (capitalize %) %) | ||||
|                                  attr-domain/types)} | ||||
|             :required {:label "Required" | ||||
|                        :required false | ||||
|                        :spec ::attr-domain/required | ||||
|                        :widget :checkbox | ||||
|                        :from-req #(if (some? %) 1 0)} | ||||
|             :uuid {:widget :hidden}} | ||||
|    :form-specs [::unique-attr-name-per-schema]}) | ||||
| 
 | ||||
| (def assign-form | ||||
|   {:fields {:assigned {:label "Users" | ||||
|                        :required false | ||||
|                        :spec :wanijo.schema.domain/assigned-to | ||||
|                        :widget :mselect | ||||
|                        :from-req #(if (vector? %) % [%])} | ||||
|             :uuid {:widget :hidden}}}) | ||||
| 
 | ||||
| (def schema-connections-form | ||||
|   {:fields {:connections {:label "Schemas" | ||||
|                           :required false | ||||
|                           :spec :wanijo.schema.domain/assigned-to | ||||
|                           :widget :mselect | ||||
|                           :from-req #(if (vector? %) % [%])} | ||||
|             :uuid {:widget :hidden}}}) | ||||
					Loading…
					
					
				
		Reference in New Issue
	
	 Josha von Gizycki
						Josha von Gizycki