@pipe0/react 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +119 -0
- package/README.md +172 -0
- package/dist/components/compound/pipe-catalog/active-filters.d.mts +26 -0
- package/dist/components/compound/pipe-catalog/active-filters.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/active-filters.mjs +47 -0
- package/dist/components/compound/pipe-catalog/active-filters.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/card.d.mts +30 -0
- package/dist/components/compound/pipe-catalog/card.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/card.mjs +77 -0
- package/dist/components/compound/pipe-catalog/card.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/category-filter.d.mts +30 -0
- package/dist/components/compound/pipe-catalog/category-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/category-filter.mjs +56 -0
- package/dist/components/compound/pipe-catalog/category-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filter.d.mts +40 -0
- package/dist/components/compound/pipe-catalog/column-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filter.mjs +66 -0
- package/dist/components/compound/pipe-catalog/column-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filters.d.mts +16 -0
- package/dist/components/compound/pipe-catalog/column-filters.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/column-filters.mjs +21 -0
- package/dist/components/compound/pipe-catalog/column-filters.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/empty.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/empty.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/empty.mjs +31 -0
- package/dist/components/compound/pipe-catalog/empty.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/index.d.mts +13 -0
- package/dist/components/compound/pipe-catalog/index.mjs +15 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.mjs +22 -0
- package/dist/components/compound/pipe-catalog/input-field-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/list.d.mts +34 -0
- package/dist/components/compound/pipe-catalog/list.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/list.mjs +29 -0
- package/dist/components/compound/pipe-catalog/list.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.mjs +22 -0
- package/dist/components/compound/pipe-catalog/output-field-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/provider-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/provider-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/provider-filter.mjs +29 -0
- package/dist/components/compound/pipe-catalog/provider-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/root.d.mts +47 -0
- package/dist/components/compound/pipe-catalog/root.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/root.mjs +85 -0
- package/dist/components/compound/pipe-catalog/root.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/search-filter.d.mts +24 -0
- package/dist/components/compound/pipe-catalog/search-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/search-filter.mjs +46 -0
- package/dist/components/compound/pipe-catalog/search-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-catalog/tag-filter.d.mts +22 -0
- package/dist/components/compound/pipe-catalog/tag-filter.d.mts.map +1 -0
- package/dist/components/compound/pipe-catalog/tag-filter.mjs +22 -0
- package/dist/components/compound/pipe-catalog/tag-filter.mjs.map +1 -0
- package/dist/components/compound/pipe-form/content.d.mts +18 -0
- package/dist/components/compound/pipe-form/content.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/content.mjs +45 -0
- package/dist/components/compound/pipe-form/content.mjs.map +1 -0
- package/dist/components/compound/pipe-form/field.d.mts +17 -0
- package/dist/components/compound/pipe-form/field.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/field.mjs +21 -0
- package/dist/components/compound/pipe-form/field.mjs.map +1 -0
- package/dist/components/compound/pipe-form/footer.d.mts +14 -0
- package/dist/components/compound/pipe-form/footer.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/footer.mjs +14 -0
- package/dist/components/compound/pipe-form/footer.mjs.map +1 -0
- package/dist/components/compound/pipe-form/group.d.mts +13 -0
- package/dist/components/compound/pipe-form/group.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/group.mjs +17 -0
- package/dist/components/compound/pipe-form/group.mjs.map +1 -0
- package/dist/components/compound/pipe-form/header.d.mts +14 -0
- package/dist/components/compound/pipe-form/header.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/header.mjs +14 -0
- package/dist/components/compound/pipe-form/header.mjs.map +1 -0
- package/dist/components/compound/pipe-form/index.d.mts +9 -0
- package/dist/components/compound/pipe-form/index.mjs +11 -0
- package/dist/components/compound/pipe-form/root.d.mts +56 -0
- package/dist/components/compound/pipe-form/root.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/root.mjs +98 -0
- package/dist/components/compound/pipe-form/root.mjs.map +1 -0
- package/dist/components/compound/pipe-form/section.d.mts +13 -0
- package/dist/components/compound/pipe-form/section.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/section.mjs +17 -0
- package/dist/components/compound/pipe-form/section.mjs.map +1 -0
- package/dist/components/compound/pipe-form/submit-button.d.mts +9 -0
- package/dist/components/compound/pipe-form/submit-button.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/submit-button.mjs +17 -0
- package/dist/components/compound/pipe-form/submit-button.mjs.map +1 -0
- package/dist/components/compound/pipe-form/title.d.mts +16 -0
- package/dist/components/compound/pipe-form/title.d.mts.map +1 -0
- package/dist/components/compound/pipe-form/title.mjs +14 -0
- package/dist/components/compound/pipe-form/title.mjs.map +1 -0
- package/dist/components/compound/search-catalog/active-filters.d.mts +26 -0
- package/dist/components/compound/search-catalog/active-filters.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/active-filters.mjs +46 -0
- package/dist/components/compound/search-catalog/active-filters.mjs.map +1 -0
- package/dist/components/compound/search-catalog/card.d.mts +30 -0
- package/dist/components/compound/search-catalog/card.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/card.mjs +77 -0
- package/dist/components/compound/search-catalog/card.mjs.map +1 -0
- package/dist/components/compound/search-catalog/category-filter.d.mts +29 -0
- package/dist/components/compound/search-catalog/category-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/category-filter.mjs +51 -0
- package/dist/components/compound/search-catalog/category-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/column-filter.d.mts +40 -0
- package/dist/components/compound/search-catalog/column-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/column-filter.mjs +63 -0
- package/dist/components/compound/search-catalog/column-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/column-filters.d.mts +15 -0
- package/dist/components/compound/search-catalog/column-filters.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/column-filters.mjs +16 -0
- package/dist/components/compound/search-catalog/column-filters.mjs.map +1 -0
- package/dist/components/compound/search-catalog/empty.d.mts +22 -0
- package/dist/components/compound/search-catalog/empty.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/empty.mjs +31 -0
- package/dist/components/compound/search-catalog/empty.mjs.map +1 -0
- package/dist/components/compound/search-catalog/index.d.mts +12 -0
- package/dist/components/compound/search-catalog/index.mjs +14 -0
- package/dist/components/compound/search-catalog/list.d.mts +19 -0
- package/dist/components/compound/search-catalog/list.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/list.mjs +29 -0
- package/dist/components/compound/search-catalog/list.mjs.map +1 -0
- package/dist/components/compound/search-catalog/output-field-filter.d.mts +22 -0
- package/dist/components/compound/search-catalog/output-field-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/output-field-filter.mjs +22 -0
- package/dist/components/compound/search-catalog/output-field-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/provider-filter.d.mts +22 -0
- package/dist/components/compound/search-catalog/provider-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/provider-filter.mjs +29 -0
- package/dist/components/compound/search-catalog/provider-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/root.d.mts +33 -0
- package/dist/components/compound/search-catalog/root.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/root.mjs +74 -0
- package/dist/components/compound/search-catalog/root.mjs.map +1 -0
- package/dist/components/compound/search-catalog/search-filter.d.mts +24 -0
- package/dist/components/compound/search-catalog/search-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/search-filter.mjs +46 -0
- package/dist/components/compound/search-catalog/search-filter.mjs.map +1 -0
- package/dist/components/compound/search-catalog/tag-filter.d.mts +22 -0
- package/dist/components/compound/search-catalog/tag-filter.d.mts.map +1 -0
- package/dist/components/compound/search-catalog/tag-filter.mjs +22 -0
- package/dist/components/compound/search-catalog/tag-filter.mjs.map +1 -0
- package/dist/components/compound/search-form/content.d.mts +18 -0
- package/dist/components/compound/search-form/content.d.mts.map +1 -0
- package/dist/components/compound/search-form/content.mjs +45 -0
- package/dist/components/compound/search-form/content.mjs.map +1 -0
- package/dist/components/compound/search-form/field.d.mts +17 -0
- package/dist/components/compound/search-form/field.d.mts.map +1 -0
- package/dist/components/compound/search-form/field.mjs +21 -0
- package/dist/components/compound/search-form/field.mjs.map +1 -0
- package/dist/components/compound/search-form/footer.d.mts +14 -0
- package/dist/components/compound/search-form/footer.d.mts.map +1 -0
- package/dist/components/compound/search-form/footer.mjs +14 -0
- package/dist/components/compound/search-form/footer.mjs.map +1 -0
- package/dist/components/compound/search-form/group.d.mts +13 -0
- package/dist/components/compound/search-form/group.d.mts.map +1 -0
- package/dist/components/compound/search-form/group.mjs +17 -0
- package/dist/components/compound/search-form/group.mjs.map +1 -0
- package/dist/components/compound/search-form/header.d.mts +14 -0
- package/dist/components/compound/search-form/header.d.mts.map +1 -0
- package/dist/components/compound/search-form/header.mjs +14 -0
- package/dist/components/compound/search-form/header.mjs.map +1 -0
- package/dist/components/compound/search-form/index.d.mts +9 -0
- package/dist/components/compound/search-form/index.mjs +11 -0
- package/dist/components/compound/search-form/root.d.mts +45 -0
- package/dist/components/compound/search-form/root.d.mts.map +1 -0
- package/dist/components/compound/search-form/root.mjs +90 -0
- package/dist/components/compound/search-form/root.mjs.map +1 -0
- package/dist/components/compound/search-form/section.d.mts +13 -0
- package/dist/components/compound/search-form/section.d.mts.map +1 -0
- package/dist/components/compound/search-form/section.mjs +17 -0
- package/dist/components/compound/search-form/section.mjs.map +1 -0
- package/dist/components/compound/search-form/submit-button.d.mts +9 -0
- package/dist/components/compound/search-form/submit-button.d.mts.map +1 -0
- package/dist/components/compound/search-form/submit-button.mjs +17 -0
- package/dist/components/compound/search-form/submit-button.mjs.map +1 -0
- package/dist/components/compound/search-form/title.d.mts +16 -0
- package/dist/components/compound/search-form/title.d.mts.map +1 -0
- package/dist/components/compound/search-form/title.mjs +14 -0
- package/dist/components/compound/search-form/title.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/active-filters.d.mts +26 -0
- package/dist/components/compound/searches-catalog/active-filters.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/active-filters.mjs +46 -0
- package/dist/components/compound/searches-catalog/active-filters.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/card.d.mts +22 -0
- package/dist/components/compound/searches-catalog/card.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/card.mjs +70 -0
- package/dist/components/compound/searches-catalog/card.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/category-filter.d.mts +29 -0
- package/dist/components/compound/searches-catalog/category-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/category-filter.mjs +51 -0
- package/dist/components/compound/searches-catalog/category-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/column-filter.d.mts +31 -0
- package/dist/components/compound/searches-catalog/column-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/column-filter.mjs +58 -0
- package/dist/components/compound/searches-catalog/column-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/column-filters.d.mts +15 -0
- package/dist/components/compound/searches-catalog/column-filters.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/column-filters.mjs +16 -0
- package/dist/components/compound/searches-catalog/column-filters.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/empty.d.mts +22 -0
- package/dist/components/compound/searches-catalog/empty.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/empty.mjs +31 -0
- package/dist/components/compound/searches-catalog/empty.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/index.d.mts +12 -0
- package/dist/components/compound/searches-catalog/index.mjs +14 -0
- package/dist/components/compound/searches-catalog/list.d.mts +19 -0
- package/dist/components/compound/searches-catalog/list.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/list.mjs +29 -0
- package/dist/components/compound/searches-catalog/list.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/output-field-filter.d.mts +22 -0
- package/dist/components/compound/searches-catalog/output-field-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/output-field-filter.mjs +22 -0
- package/dist/components/compound/searches-catalog/output-field-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/provider-filter.d.mts +22 -0
- package/dist/components/compound/searches-catalog/provider-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/provider-filter.mjs +29 -0
- package/dist/components/compound/searches-catalog/provider-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/root.d.mts +33 -0
- package/dist/components/compound/searches-catalog/root.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/root.mjs +74 -0
- package/dist/components/compound/searches-catalog/root.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/search-filter.d.mts +24 -0
- package/dist/components/compound/searches-catalog/search-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/search-filter.mjs +46 -0
- package/dist/components/compound/searches-catalog/search-filter.mjs.map +1 -0
- package/dist/components/compound/searches-catalog/tag-filter.d.mts +22 -0
- package/dist/components/compound/searches-catalog/tag-filter.d.mts.map +1 -0
- package/dist/components/compound/searches-catalog/tag-filter.mjs +22 -0
- package/dist/components/compound/searches-catalog/tag-filter.mjs.map +1 -0
- package/dist/components/defaults/adapters/async-include-exclude-select-input.mjs +32 -0
- package/dist/components/defaults/adapters/async-include-exclude-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/async-multi-select-input.mjs +26 -0
- package/dist/components/defaults/adapters/async-multi-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/boolean-input.mjs +82 -0
- package/dist/components/defaults/adapters/boolean-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/connector-input.mjs +94 -0
- package/dist/components/defaults/adapters/connector-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/context-select-input.mjs +74 -0
- package/dist/components/defaults/adapters/context-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/cursor-pagination-input.mjs +29 -0
- package/dist/components/defaults/adapters/cursor-pagination-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/date-range-input.mjs +53 -0
- package/dist/components/defaults/adapters/date-range-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/exact-range-input.mjs +75 -0
- package/dist/components/defaults/adapters/exact-range-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/fields-select-input.mjs +25 -0
- package/dist/components/defaults/adapters/fields-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/include-exclude-input.mjs +33 -0
- package/dist/components/defaults/adapters/include-exclude-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/include-exclude-select-input.mjs +36 -0
- package/dist/components/defaults/adapters/include-exclude-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/index.d.mts +11 -0
- package/dist/components/defaults/adapters/index.d.mts.map +1 -0
- package/dist/components/defaults/adapters/index.mjs +73 -0
- package/dist/components/defaults/adapters/index.mjs.map +1 -0
- package/dist/components/defaults/adapters/int-input.mjs +16 -0
- package/dist/components/defaults/adapters/int-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/json-extraction-input.mjs +333 -0
- package/dist/components/defaults/adapters/json-extraction-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/json-schema-input.mjs +30 -0
- package/dist/components/defaults/adapters/json-schema-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/key-value-list-input.mjs +100 -0
- package/dist/components/defaults/adapters/key-value-list-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/min-max-int-input.mjs +65 -0
- package/dist/components/defaults/adapters/min-max-int-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/multi-create-input.mjs +32 -0
- package/dist/components/defaults/adapters/multi-create-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/multi-select-input.mjs +26 -0
- package/dist/components/defaults/adapters/multi-select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/number-input.mjs +15 -0
- package/dist/components/defaults/adapters/number-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/ordered-multi-create-input.mjs +43 -0
- package/dist/components/defaults/adapters/ordered-multi-create-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/output-field-input.mjs +37 -0
- package/dist/components/defaults/adapters/output-field-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/pipes-trigger-input.mjs +381 -0
- package/dist/components/defaults/adapters/pipes-trigger-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/prompt-input.mjs +208 -0
- package/dist/components/defaults/adapters/prompt-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/providers-input.mjs +23 -0
- package/dist/components/defaults/adapters/providers-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/range-input.mjs +61 -0
- package/dist/components/defaults/adapters/range-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/select-input.mjs +54 -0
- package/dist/components/defaults/adapters/select-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/tagged-text-input.mjs +154 -0
- package/dist/components/defaults/adapters/tagged-text-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/template-input.mjs +34 -0
- package/dist/components/defaults/adapters/template-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/text-input.mjs +18 -0
- package/dist/components/defaults/adapters/text-input.mjs.map +1 -0
- package/dist/components/defaults/adapters/textarea-input.mjs +17 -0
- package/dist/components/defaults/adapters/textarea-input.mjs.map +1 -0
- package/dist/components/defaults/catalog/active-filter-pill.mjs +30 -0
- package/dist/components/defaults/catalog/active-filter-pill.mjs.map +1 -0
- package/dist/components/defaults/catalog/card-derived.d.mts +98 -0
- package/dist/components/defaults/catalog/card-derived.d.mts.map +1 -0
- package/dist/components/defaults/catalog/card-derived.mjs +172 -0
- package/dist/components/defaults/catalog/card-derived.mjs.map +1 -0
- package/dist/components/defaults/catalog/card-primitives.d.mts +81 -0
- package/dist/components/defaults/catalog/card-primitives.d.mts.map +1 -0
- package/dist/components/defaults/catalog/card-primitives.mjs +108 -0
- package/dist/components/defaults/catalog/card-primitives.mjs.map +1 -0
- package/dist/components/defaults/catalog/category-filter.d.mts +13 -0
- package/dist/components/defaults/catalog/category-filter.d.mts.map +1 -0
- package/dist/components/defaults/catalog/category-filter.mjs +28 -0
- package/dist/components/defaults/catalog/category-filter.mjs.map +1 -0
- package/dist/components/defaults/catalog/category-section.d.mts +39 -0
- package/dist/components/defaults/catalog/category-section.d.mts.map +1 -0
- package/dist/components/defaults/catalog/category-section.mjs +59 -0
- package/dist/components/defaults/catalog/category-section.mjs.map +1 -0
- package/dist/components/defaults/catalog/empty-state.mjs +20 -0
- package/dist/components/defaults/catalog/empty-state.mjs.map +1 -0
- package/dist/components/defaults/catalog/filter-select.d.mts +13 -0
- package/dist/components/defaults/catalog/filter-select.d.mts.map +1 -0
- package/dist/components/defaults/catalog/filter-select.mjs +45 -0
- package/dist/components/defaults/catalog/filter-select.mjs.map +1 -0
- package/dist/components/defaults/catalog/layout.mjs +53 -0
- package/dist/components/defaults/catalog/layout.mjs.map +1 -0
- package/dist/components/defaults/catalog/provider-avatars.d.mts +37 -0
- package/dist/components/defaults/catalog/provider-avatars.d.mts.map +1 -0
- package/dist/components/defaults/catalog/provider-avatars.mjs +98 -0
- package/dist/components/defaults/catalog/provider-avatars.mjs.map +1 -0
- package/dist/components/defaults/field-section-enumeration.mjs +32 -0
- package/dist/components/defaults/field-section-enumeration.mjs.map +1 -0
- package/dist/components/defaults/layout/field-wrapper.d.mts +13 -0
- package/dist/components/defaults/layout/field-wrapper.d.mts.map +1 -0
- package/dist/components/defaults/layout/field-wrapper.mjs +67 -0
- package/dist/components/defaults/layout/field-wrapper.mjs.map +1 -0
- package/dist/components/defaults/layout/form.mjs +21 -0
- package/dist/components/defaults/layout/form.mjs.map +1 -0
- package/dist/components/defaults/layout/group.d.mts +16 -0
- package/dist/components/defaults/layout/group.d.mts.map +1 -0
- package/dist/components/defaults/layout/group.mjs +87 -0
- package/dist/components/defaults/layout/group.mjs.map +1 -0
- package/dist/components/defaults/layout/section.d.mts +14 -0
- package/dist/components/defaults/layout/section.d.mts.map +1 -0
- package/dist/components/defaults/layout/section.mjs +39 -0
- package/dist/components/defaults/layout/section.mjs.map +1 -0
- package/dist/components/defaults/layout/submit-button.d.mts +9 -0
- package/dist/components/defaults/layout/submit-button.d.mts.map +1 -0
- package/dist/components/defaults/layout/submit-button.mjs +23 -0
- package/dist/components/defaults/layout/submit-button.mjs.map +1 -0
- package/dist/components/defaults/toggle-advanced-button.mjs +29 -0
- package/dist/components/defaults/toggle-advanced-button.mjs.map +1 -0
- package/dist/components/field-renderer.d.mts +14 -0
- package/dist/components/field-renderer.d.mts.map +1 -0
- package/dist/components/field-renderer.mjs +21 -0
- package/dist/components/field-renderer.mjs.map +1 -0
- package/dist/components/hover-info.mjs +30 -0
- package/dist/components/hover-info.mjs.map +1 -0
- package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs +319 -0
- package/dist/components/internal/LiquidEditor/ChipEditPopover.mjs.map +1 -0
- package/dist/components/internal/LiquidEditor/LiquidEditor.mjs +208 -0
- package/dist/components/internal/LiquidEditor/LiquidEditor.mjs.map +1 -0
- package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs +240 -0
- package/dist/components/internal/LiquidEditor/UnifiedReferencePicker.mjs.map +1 -0
- package/dist/components/internal/combobox/include-exclude-combobox.mjs +368 -0
- package/dist/components/internal/combobox/include-exclude-combobox.mjs.map +1 -0
- package/dist/components/internal/combobox/suggest-combobox.mjs +294 -0
- package/dist/components/internal/combobox/suggest-combobox.mjs.map +1 -0
- package/dist/components/internal/field-legend.mjs +37 -0
- package/dist/components/internal/field-legend.mjs.map +1 -0
- package/dist/components/internal/form-level-errors.mjs +71 -0
- package/dist/components/internal/form-level-errors.mjs.map +1 -0
- package/dist/components/internal/icons.mjs +131 -0
- package/dist/components/internal/icons.mjs.map +1 -0
- package/dist/components/internal/multi-select-popover-trigger.mjs +26 -0
- package/dist/components/internal/multi-select-popover-trigger.mjs.map +1 -0
- package/dist/components/internal/schema-editor/SchemaEditor.mjs +468 -0
- package/dist/components/internal/schema-editor/SchemaEditor.mjs.map +1 -0
- package/dist/components/internal/schema-editor/generate-schema-rows.mjs +374 -0
- package/dist/components/internal/schema-editor/generate-schema-rows.mjs.map +1 -0
- package/dist/components/internal/schema-editor/schema-editor-context.mjs +32 -0
- package/dist/components/internal/schema-editor/schema-editor-context.mjs.map +1 -0
- package/dist/components/internal/schema-editor/schema-utils.mjs +249 -0
- package/dist/components/internal/schema-editor/schema-utils.mjs.map +1 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu-utils.mjs +12 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu-utils.mjs.map +1 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu.mjs +151 -0
- package/dist/components/internal/suggestion-menu/suggestion-menu.mjs.map +1 -0
- package/dist/components/internal/tag-chip-decoration.mjs +180 -0
- package/dist/components/internal/tag-chip-decoration.mjs.map +1 -0
- package/dist/components/rich-text.mjs +42 -0
- package/dist/components/rich-text.mjs.map +1 -0
- package/dist/components/ui/badge.mjs +32 -0
- package/dist/components/ui/badge.mjs.map +1 -0
- package/dist/components/ui/button.d.mts +19 -0
- package/dist/components/ui/button.d.mts.map +1 -0
- package/dist/components/ui/button.mjs +47 -0
- package/dist/components/ui/button.mjs.map +1 -0
- package/dist/components/ui/combobox.mjs +103 -0
- package/dist/components/ui/combobox.mjs.map +1 -0
- package/dist/components/ui/input-group.mjs +30 -0
- package/dist/components/ui/input-group.mjs.map +1 -0
- package/dist/components/ui/input.mjs +17 -0
- package/dist/components/ui/input.mjs.map +1 -0
- package/dist/components/ui/label.mjs +17 -0
- package/dist/components/ui/label.mjs.map +1 -0
- package/dist/components/ui/popover.mjs +40 -0
- package/dist/components/ui/popover.mjs.map +1 -0
- package/dist/components/ui/select.mjs +92 -0
- package/dist/components/ui/select.mjs.map +1 -0
- package/dist/components/ui/switch.mjs +21 -0
- package/dist/components/ui/switch.mjs.map +1 -0
- package/dist/components/ui/table.mjs +56 -0
- package/dist/components/ui/table.mjs.map +1 -0
- package/dist/components/ui/textarea.mjs +15 -0
- package/dist/components/ui/textarea.mjs.map +1 -0
- package/dist/components/ui/tooltip.mjs +48 -0
- package/dist/components/ui/tooltip.mjs.map +1 -0
- package/dist/context/catalog-card-context.mjs +31 -0
- package/dist/context/catalog-card-context.mjs.map +1 -0
- package/dist/context/catalog-config-context.d.mts +43 -0
- package/dist/context/catalog-config-context.d.mts.map +1 -0
- package/dist/context/catalog-config-context.mjs +48 -0
- package/dist/context/catalog-config-context.mjs.map +1 -0
- package/dist/context/form-context.mjs +11 -0
- package/dist/context/form-context.mjs.map +1 -0
- package/dist/context/form-customization-context.d.mts +71 -0
- package/dist/context/form-customization-context.d.mts.map +1 -0
- package/dist/context/form-customization-context.mjs +114 -0
- package/dist/context/form-customization-context.mjs.map +1 -0
- package/dist/context/form-provider.d.mts +41 -0
- package/dist/context/form-provider.d.mts.map +1 -0
- package/dist/context/form-provider.mjs +53 -0
- package/dist/context/form-provider.mjs.map +1 -0
- package/dist/context/pipe-catalog-card-context.d.mts +17 -0
- package/dist/context/pipe-catalog-card-context.d.mts.map +1 -0
- package/dist/context/pipe-catalog-card-context.mjs +13 -0
- package/dist/context/pipe-catalog-card-context.mjs.map +1 -0
- package/dist/context/pipe-catalog-context.d.mts +26 -0
- package/dist/context/pipe-catalog-context.d.mts.map +1 -0
- package/dist/context/pipe-catalog-context.mjs +13 -0
- package/dist/context/pipe-catalog-context.mjs.map +1 -0
- package/dist/context/pipe-form-context.d.mts +25 -0
- package/dist/context/pipe-form-context.d.mts.map +1 -0
- package/dist/context/pipe-form-context.mjs +13 -0
- package/dist/context/pipe-form-context.mjs.map +1 -0
- package/dist/context/portal-container-context.d.mts +5 -0
- package/dist/context/portal-container-context.d.mts.map +1 -0
- package/dist/context/portal-container-context.mjs +15 -0
- package/dist/context/portal-container-context.mjs.map +1 -0
- package/dist/context/search-catalog-card-context.d.mts +16 -0
- package/dist/context/search-catalog-card-context.d.mts.map +1 -0
- package/dist/context/search-catalog-card-context.mjs +13 -0
- package/dist/context/search-catalog-card-context.mjs.map +1 -0
- package/dist/context/search-catalog-context.d.mts +20 -0
- package/dist/context/search-catalog-context.d.mts.map +1 -0
- package/dist/context/search-catalog-context.mjs +13 -0
- package/dist/context/search-catalog-context.mjs.map +1 -0
- package/dist/context/search-form-context.d.mts +25 -0
- package/dist/context/search-form-context.d.mts.map +1 -0
- package/dist/context/search-form-context.mjs +13 -0
- package/dist/context/search-form-context.mjs.map +1 -0
- package/dist/context/searches-catalog-card-context.d.mts +16 -0
- package/dist/context/searches-catalog-card-context.d.mts.map +1 -0
- package/dist/context/searches-catalog-card-context.mjs +13 -0
- package/dist/context/searches-catalog-card-context.mjs.map +1 -0
- package/dist/context/searches-catalog-context.d.mts +20 -0
- package/dist/context/searches-catalog-context.d.mts.map +1 -0
- package/dist/context/searches-catalog-context.mjs +13 -0
- package/dist/context/searches-catalog-context.mjs.map +1 -0
- package/dist/hooks/use-debounce.mjs +28 -0
- package/dist/hooks/use-debounce.mjs.map +1 -0
- package/dist/hooks/use-debounced-fn.mjs +47 -0
- package/dist/hooks/use-debounced-fn.mjs.map +1 -0
- package/dist/hooks/use-disclosure.mjs +35 -0
- package/dist/hooks/use-disclosure.mjs.map +1 -0
- package/dist/hooks/use-field-error.d.mts +11 -0
- package/dist/hooks/use-field-error.d.mts.map +1 -0
- package/dist/hooks/use-field-error.mjs +23 -0
- package/dist/hooks/use-field-error.mjs.map +1 -0
- package/dist/hooks/use-floating-element.mjs +45 -0
- package/dist/hooks/use-floating-element.mjs.map +1 -0
- package/dist/hooks/use-form-core.d.mts +16 -0
- package/dist/hooks/use-form-core.d.mts.map +1 -0
- package/dist/hooks/use-form-core.mjs +241 -0
- package/dist/hooks/use-form-core.mjs.map +1 -0
- package/dist/hooks/use-jsonata-preview.mjs +38 -0
- package/dist/hooks/use-jsonata-preview.mjs.map +1 -0
- package/dist/hooks/use-menu-navigation.mjs +86 -0
- package/dist/hooks/use-menu-navigation.mjs.map +1 -0
- package/dist/hooks/use-pipe-catalog-table.d.mts +47 -0
- package/dist/hooks/use-pipe-catalog-table.d.mts.map +1 -0
- package/dist/hooks/use-pipe-catalog-table.mjs +170 -0
- package/dist/hooks/use-pipe-catalog-table.mjs.map +1 -0
- package/dist/hooks/use-pipe-form.d.mts +31 -0
- package/dist/hooks/use-pipe-form.d.mts.map +1 -0
- package/dist/hooks/use-pipe-form.mjs +65 -0
- package/dist/hooks/use-pipe-form.mjs.map +1 -0
- package/dist/hooks/use-search-catalog-table.d.mts +40 -0
- package/dist/hooks/use-search-catalog-table.d.mts.map +1 -0
- package/dist/hooks/use-search-catalog-table.mjs +161 -0
- package/dist/hooks/use-search-catalog-table.mjs.map +1 -0
- package/dist/hooks/use-search-form.d.mts +17 -0
- package/dist/hooks/use-search-form.d.mts.map +1 -0
- package/dist/hooks/use-search-form.mjs +58 -0
- package/dist/hooks/use-search-form.mjs.map +1 -0
- package/dist/hooks/use-searches-catalog-table.d.mts +40 -0
- package/dist/hooks/use-searches-catalog-table.d.mts.map +1 -0
- package/dist/hooks/use-searches-catalog-table.mjs +161 -0
- package/dist/hooks/use-searches-catalog-table.mjs.map +1 -0
- package/dist/index.d.mts +96 -0
- package/dist/index.mjs +98 -0
- package/dist/lib/utils.mjs +11 -0
- package/dist/lib/utils.mjs.map +1 -0
- package/dist/styles/pipe0-form.css +3785 -0
- package/dist/types/adapters.d.mts +107 -0
- package/dist/types/adapters.d.mts.map +1 -0
- package/dist/types/catalog-adapters.d.mts +122 -0
- package/dist/types/catalog-adapters.d.mts.map +1 -0
- package/dist/types/field-handle.d.mts +3 -0
- package/dist/types/field-props.d.mts +285 -0
- package/dist/types/field-props.d.mts.map +1 -0
- package/dist/types/form-customization.d.mts +25 -0
- package/dist/types/form-customization.d.mts.map +1 -0
- package/dist/types/form-handle.d.mts +23 -0
- package/dist/types/form-handle.d.mts.map +1 -0
- package/dist/utils/build-section-handlers.mjs +419 -0
- package/dist/utils/build-section-handlers.mjs.map +1 -0
- package/dist/utils/catalog-helpers.d.mts +12 -0
- package/dist/utils/catalog-helpers.d.mts.map +1 -0
- package/dist/utils/catalog-helpers.mjs +35 -0
- package/dist/utils/catalog-helpers.mjs.map +1 -0
- package/dist/utils/generate-random-string.mjs +11 -0
- package/dist/utils/generate-random-string.mjs.map +1 -0
- package/dist/utils/merge-form-stores.mjs +14 -0
- package/dist/utils/merge-form-stores.mjs.map +1 -0
- package/dist/utils/object-path.mjs +72 -0
- package/dist/utils/object-path.mjs.map +1 -0
- package/dist/utils/render-slot.d.mts +44 -0
- package/dist/utils/render-slot.d.mts.map +1 -0
- package/dist/utils/render-slot.mjs +30 -0
- package/dist/utils/render-slot.mjs.map +1 -0
- package/dist/widgets/avatar-group.d.mts +36 -0
- package/dist/widgets/avatar-group.d.mts.map +1 -0
- package/dist/widgets/avatar-group.mjs +114 -0
- package/dist/widgets/avatar-group.mjs.map +1 -0
- package/dist/widgets/emoji-glyph.d.mts +11 -0
- package/dist/widgets/emoji-glyph.d.mts.map +1 -0
- package/dist/widgets/emoji-glyph.mjs +13 -0
- package/dist/widgets/emoji-glyph.mjs.map +1 -0
- package/dist/widgets/field-type-badge.d.mts +13 -0
- package/dist/widgets/field-type-badge.d.mts.map +1 -0
- package/dist/widgets/field-type-badge.mjs +30 -0
- package/dist/widgets/field-type-badge.mjs.map +1 -0
- package/dist/widgets/icon-glyph.d.mts +16 -0
- package/dist/widgets/icon-glyph.d.mts.map +1 -0
- package/dist/widgets/icon-glyph.mjs +59 -0
- package/dist/widgets/icon-glyph.mjs.map +1 -0
- package/dist/widgets/index.d.mts +9 -0
- package/dist/widgets/index.mjs +11 -0
- package/dist/widgets/logo-url.d.mts +17 -0
- package/dist/widgets/logo-url.d.mts.map +1 -0
- package/dist/widgets/logo-url.mjs +17 -0
- package/dist/widgets/logo-url.mjs.map +1 -0
- package/dist/widgets/pricing-badge.d.mts +11 -0
- package/dist/widgets/pricing-badge.d.mts.map +1 -0
- package/dist/widgets/pricing-badge.mjs +13 -0
- package/dist/widgets/pricing-badge.mjs.map +1 -0
- package/dist/widgets/provider-logo.d.mts +16 -0
- package/dist/widgets/provider-logo.d.mts.map +1 -0
- package/dist/widgets/provider-logo.mjs +20 -0
- package/dist/widgets/provider-logo.mjs.map +1 -0
- package/dist/widgets/widget-strip.d.mts +16 -0
- package/dist/widgets/widget-strip.d.mts.map +1 -0
- package/dist/widgets/widget-strip.mjs +42 -0
- package/dist/widgets/widget-strip.mjs.map +1 -0
- package/dist/widgets/widget-view.d.mts +14 -0
- package/dist/widgets/widget-view.d.mts.map +1 -0
- package/dist/widgets/widget-view.mjs +36 -0
- package/dist/widgets/widget-view.mjs.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { fuzzyFilter } from "../utils/catalog-helpers.mjs";
|
|
2
|
+
import { useDebounce } from "./use-debounce.mjs";
|
|
3
|
+
import { useCallback, useMemo, useState } from "react";
|
|
4
|
+
import { collectRequirementFields, filterPipeEntries, getDefaultOutputFields, getDefaultPipeProviders, getInitialTableData, getLowestPipeCreditAmount, getStartingCostPerPipesProvider, getTableDataAggregates } from "@pipe0/base";
|
|
5
|
+
import { createColumnHelper, getCoreRowModel, getFilteredRowModel, useReactTable } from "@tanstack/react-table";
|
|
6
|
+
|
|
7
|
+
//#region src/hooks/use-pipe-catalog-table.ts
|
|
8
|
+
const columnHelper = createColumnHelper();
|
|
9
|
+
const columns = [
|
|
10
|
+
columnHelper.accessor("pipeId", {
|
|
11
|
+
filterFn: "includesString",
|
|
12
|
+
enableGlobalFilter: true
|
|
13
|
+
}),
|
|
14
|
+
columnHelper.accessor("label", {
|
|
15
|
+
filterFn: "fuzzy",
|
|
16
|
+
enableGlobalFilter: true
|
|
17
|
+
}),
|
|
18
|
+
columnHelper.accessor("description", {
|
|
19
|
+
filterFn: "fuzzy",
|
|
20
|
+
enableGlobalFilter: true
|
|
21
|
+
}),
|
|
22
|
+
columnHelper.accessor((row) => row.defaultInputRequirement ? collectRequirementFields(row.defaultInputRequirement).map(({ field }) => field.name) : [], {
|
|
23
|
+
id: "inputFields",
|
|
24
|
+
filterFn: "arrIncludes",
|
|
25
|
+
enableGlobalFilter: false
|
|
26
|
+
}),
|
|
27
|
+
columnHelper.accessor((row) => getDefaultOutputFields(row) || [], {
|
|
28
|
+
id: "outputFields",
|
|
29
|
+
filterFn: "arrIncludes",
|
|
30
|
+
enableGlobalFilter: false
|
|
31
|
+
}),
|
|
32
|
+
columnHelper.accessor((row) => row.tags || [], {
|
|
33
|
+
id: "tags",
|
|
34
|
+
filterFn: "arrIncludes",
|
|
35
|
+
enableGlobalFilter: true
|
|
36
|
+
}),
|
|
37
|
+
columnHelper.accessor((row) => getDefaultPipeProviders(row.pipeId) || [], {
|
|
38
|
+
id: "providers",
|
|
39
|
+
filterFn: "arrIncludes",
|
|
40
|
+
enableGlobalFilter: true
|
|
41
|
+
})
|
|
42
|
+
];
|
|
43
|
+
function usePipeCatalogTable(config = {}) {
|
|
44
|
+
const [category, setCategory] = useState(null);
|
|
45
|
+
const { initialColumnFilters = [], filter } = config;
|
|
46
|
+
const initialTableData = useMemo(() => filterPipeEntries(getInitialTableData(category), filter), [category, filter]);
|
|
47
|
+
const baselineTableData = useMemo(() => filterPipeEntries(getInitialTableData(null), filter), [filter]);
|
|
48
|
+
const table = useReactTable({
|
|
49
|
+
columns,
|
|
50
|
+
data: initialTableData,
|
|
51
|
+
getCoreRowModel: getCoreRowModel(),
|
|
52
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
53
|
+
globalFilterFn: fuzzyFilter,
|
|
54
|
+
filterFns: { fuzzy: fuzzyFilter },
|
|
55
|
+
getColumnCanGlobalFilter: (column) => column.columnDef.enableGlobalFilter !== false,
|
|
56
|
+
initialState: {
|
|
57
|
+
columnFilters: initialColumnFilters,
|
|
58
|
+
pagination: { pageSize: 10 }
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const columnFilters = table.getState().columnFilters;
|
|
62
|
+
const aggregates = useMemo(() => getTableDataAggregates(initialTableData, category), [category, initialTableData]);
|
|
63
|
+
const [globalFilterInput, setGlobalFilterInput, setGlobalFilterImmediately] = useDebounce((v) => {
|
|
64
|
+
if (v === table.getState().globalFilter) return;
|
|
65
|
+
table.setGlobalFilter(v);
|
|
66
|
+
if (v) {
|
|
67
|
+
setCategory(null);
|
|
68
|
+
table.setColumnFilters([]);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const addColumnFilter = useCallback((id, value) => {
|
|
72
|
+
setGlobalFilterImmediately("");
|
|
73
|
+
table.setColumnFilters([{
|
|
74
|
+
id,
|
|
75
|
+
value
|
|
76
|
+
}]);
|
|
77
|
+
}, [setGlobalFilterImmediately, table]);
|
|
78
|
+
const handleCategoryChange = useCallback((category) => {
|
|
79
|
+
setCategory(category);
|
|
80
|
+
table.setColumnFilters([]);
|
|
81
|
+
setGlobalFilterImmediately("");
|
|
82
|
+
}, [table, setGlobalFilterImmediately]);
|
|
83
|
+
const resetFilters = useCallback(() => {
|
|
84
|
+
setGlobalFilterImmediately("");
|
|
85
|
+
setCategory(null);
|
|
86
|
+
}, [setGlobalFilterImmediately]);
|
|
87
|
+
const removeColumnFilter = useCallback((id) => {
|
|
88
|
+
table.getColumn(id)?.setFilterValue(null);
|
|
89
|
+
}, [table]);
|
|
90
|
+
const getColumnFilterValue = useCallback((id) => {
|
|
91
|
+
return columnFilters.find((f) => f.id === id)?.value;
|
|
92
|
+
}, [columnFilters]);
|
|
93
|
+
const rows = table.getRowModel().rows;
|
|
94
|
+
const cards = useMemo(() => rows.map((row) => {
|
|
95
|
+
const entry = row.original;
|
|
96
|
+
const latestEntry = aggregates.pipeEntriesByBasePipe[entry.basePipe]?.[0] ?? entry;
|
|
97
|
+
const providers = getDefaultPipeProviders(latestEntry.pipeId);
|
|
98
|
+
return {
|
|
99
|
+
pipeId: latestEntry.pipeId,
|
|
100
|
+
basePipe: entry.basePipe,
|
|
101
|
+
label: entry.label,
|
|
102
|
+
description: entry.description,
|
|
103
|
+
providers,
|
|
104
|
+
startingCostPerProvider: getStartingCostPerPipesProvider(latestEntry.pipeId),
|
|
105
|
+
startingCreditAmount: getLowestPipeCreditAmount(latestEntry),
|
|
106
|
+
costMode: "per_result",
|
|
107
|
+
defaultInputFields: latestEntry.defaultInputRequirement ? collectRequirementFields(latestEntry.defaultInputRequirement).map(({ field }) => ({ name: field.name })) : [],
|
|
108
|
+
defaultOutputFields: getDefaultOutputFields(latestEntry) ?? [],
|
|
109
|
+
docPath: latestEntry.docPath,
|
|
110
|
+
entry,
|
|
111
|
+
latestEntry
|
|
112
|
+
};
|
|
113
|
+
}), [rows, aggregates.pipeEntriesByBasePipe]);
|
|
114
|
+
return {
|
|
115
|
+
table,
|
|
116
|
+
cards,
|
|
117
|
+
cardsByCategory: useMemo(() => {
|
|
118
|
+
const groups = /* @__PURE__ */ new Map();
|
|
119
|
+
for (const card of cards) {
|
|
120
|
+
const cats = card.entry.categories ?? [];
|
|
121
|
+
for (const cat of cats) {
|
|
122
|
+
const arr = groups.get(cat);
|
|
123
|
+
if (arr) arr.push(card);
|
|
124
|
+
else groups.set(cat, [card]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return Array.from(groups, ([category, group]) => ({
|
|
128
|
+
category,
|
|
129
|
+
cards: group
|
|
130
|
+
}));
|
|
131
|
+
}, [cards]),
|
|
132
|
+
categoryCounts: useMemo(() => {
|
|
133
|
+
const counts = {};
|
|
134
|
+
for (const card of cards) {
|
|
135
|
+
const cats = card.entry.categories ?? [];
|
|
136
|
+
for (const cat of cats) counts[cat] = (counts[cat] ?? 0) + 1;
|
|
137
|
+
}
|
|
138
|
+
return counts;
|
|
139
|
+
}, [cards]),
|
|
140
|
+
baselineCardCount: baselineTableData.length,
|
|
141
|
+
baselineCategoryCounts: useMemo(() => {
|
|
142
|
+
const counts = {};
|
|
143
|
+
for (const entry of baselineTableData) {
|
|
144
|
+
const cats = entry.categories ?? [];
|
|
145
|
+
for (const cat of cats) counts[cat] = (counts[cat] ?? 0) + 1;
|
|
146
|
+
}
|
|
147
|
+
return counts;
|
|
148
|
+
}, [baselineTableData]),
|
|
149
|
+
category,
|
|
150
|
+
setCategory: handleCategoryChange,
|
|
151
|
+
globalFilterInput,
|
|
152
|
+
setGlobalFilterInput,
|
|
153
|
+
addColumnFilter,
|
|
154
|
+
removeColumnFilter,
|
|
155
|
+
resetFilters,
|
|
156
|
+
getColumnFilterValue,
|
|
157
|
+
sortedInputFieldEntries: aggregates.sortedInputFieldEntries,
|
|
158
|
+
sortedOutputFieldEntries: aggregates.sortedOutputFieldEntries,
|
|
159
|
+
sortedTagEntries: aggregates.sortedTagEntries,
|
|
160
|
+
sortedProviderEntries: aggregates.sortedProviderEntries,
|
|
161
|
+
pipeIdsByInputField: aggregates.pipeIdsByInputField,
|
|
162
|
+
pipeIdsByOutputField: aggregates.pipeIdsByOutputField,
|
|
163
|
+
pipeIdsByProvider: aggregates.pipeIdsByProvider,
|
|
164
|
+
pipeIdsByTag: aggregates.pipeIdsByTag
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
//#endregion
|
|
169
|
+
export { usePipeCatalogTable };
|
|
170
|
+
//# sourceMappingURL=use-pipe-catalog-table.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-pipe-catalog-table.mjs","names":[],"sources":["../../src/hooks/use-pipe-catalog-table.ts"],"sourcesContent":["import {\n type CatalogFilter,\n collectRequirementFields,\n filterPipeEntries,\n getDefaultOutputFields,\n getDefaultPipeProviders,\n getInitialTableData,\n getLowestPipeCreditAmount,\n getStartingCostPerPipesProvider,\n getTableDataAggregates,\n type PipeCatalogEntry,\n type PipeCategory,\n type PipeEntryWithLatestVersion,\n type PipeId,\n} from \"@pipe0/base\";\nimport {\n type ColumnFilter,\n createColumnHelper,\n getCoreRowModel,\n getFilteredRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { PipeCardData } from \"../types/catalog-adapters.js\";\nimport { fuzzyFilter } from \"../utils/catalog-helpers.js\";\nimport { useDebounce } from \"./use-debounce.js\";\n\nexport type InputFieldEntries = Record<string, PipeId[]>;\nexport type OutputFieldEntries = Record<string, PipeId[]>;\n\nconst columnHelper = createColumnHelper<PipeEntryWithLatestVersion>();\n\nconst columns = [\n columnHelper.accessor(\"pipeId\", {\n filterFn: \"includesString\",\n enableGlobalFilter: true,\n }),\n columnHelper.accessor(\"label\", {\n filterFn: \"fuzzy\" as any,\n enableGlobalFilter: true,\n }),\n columnHelper.accessor(\"description\", {\n filterFn: \"fuzzy\" as any,\n enableGlobalFilter: true,\n }),\n columnHelper.accessor(\n (row) =>\n row.defaultInputRequirement\n ? collectRequirementFields(row.defaultInputRequirement).map(({ field }) => field.name)\n : [],\n {\n id: \"inputFields\",\n filterFn: \"arrIncludes\",\n enableGlobalFilter: false,\n },\n ),\n columnHelper.accessor((row) => getDefaultOutputFields(row) || [], {\n id: \"outputFields\",\n filterFn: \"arrIncludes\",\n enableGlobalFilter: false,\n }),\n columnHelper.accessor((row) => row.tags || [], {\n id: \"tags\",\n filterFn: \"arrIncludes\",\n enableGlobalFilter: true,\n }),\n columnHelper.accessor((row) => getDefaultPipeProviders(row.pipeId) || [], {\n id: \"providers\",\n filterFn: \"arrIncludes\",\n enableGlobalFilter: true,\n }),\n];\n\nexport function usePipeCatalogTable(\n config: {\n initialColumnFilters?: ColumnFilter[];\n /**\n * Optional whitelist/blacklist of pipes and providers. Memoize to avoid\n * recomputing the table data on every render.\n */\n filter?: CatalogFilter;\n } = {},\n) {\n const [category, setCategory] = useState<PipeCategory | null>(null);\n const { initialColumnFilters = [] as ColumnFilter[], filter } = config;\n\n const initialTableData = useMemo(\n () => filterPipeEntries(getInitialTableData(category), filter),\n [category, filter],\n );\n\n // Baseline (config.filter applied, but no category / column / global filter).\n // Drives the stable category-button counts so the row doesn't jump when the\n // user changes a filter.\n const baselineTableData = useMemo(\n () => filterPipeEntries(getInitialTableData(null), filter),\n [filter],\n );\n\n const table = useReactTable({\n columns,\n data: initialTableData,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n globalFilterFn: fuzzyFilter,\n filterFns: {\n fuzzy: fuzzyFilter,\n },\n getColumnCanGlobalFilter: (column) => column.columnDef.enableGlobalFilter !== false,\n initialState: {\n columnFilters: initialColumnFilters,\n pagination: {\n pageSize: 10,\n },\n },\n });\n\n const columnFilters = table.getState().columnFilters;\n\n const aggregates = useMemo(\n () => getTableDataAggregates(initialTableData, category),\n [category, initialTableData],\n );\n\n const [globalFilterInput, setGlobalFilterInput, setGlobalFilterImmediately] = useDebounce((v) => {\n if (v === table.getState().globalFilter) return;\n table.setGlobalFilter(v);\n if (v) {\n setCategory(null);\n table.setColumnFilters([]);\n }\n });\n\n const addColumnFilter = useCallback(\n (id: \"inputFields\" | \"outputFields\" | \"tags\" | \"providers\", value: string) => {\n setGlobalFilterImmediately(\"\");\n table.setColumnFilters([{ id, value }]);\n },\n [setGlobalFilterImmediately, table],\n );\n\n const handleCategoryChange = useCallback(\n (category: PipeCategory | null) => {\n setCategory(category);\n table.setColumnFilters([]);\n setGlobalFilterImmediately(\"\");\n },\n [table, setGlobalFilterImmediately],\n );\n\n const resetFilters = useCallback(() => {\n setGlobalFilterImmediately(\"\");\n setCategory(null);\n }, [setGlobalFilterImmediately]);\n\n const removeColumnFilter = useCallback(\n (id: \"inputFields\" | \"outputFields\" | \"tags\" | \"providers\") => {\n table.getColumn(id)?.setFilterValue(null);\n },\n [table],\n );\n\n const getColumnFilterValue = useCallback(\n (id: \"inputFields\" | \"outputFields\" | \"tags\" | \"providers\") => {\n const res = columnFilters.find((f) => f.id === id)?.value;\n return res as string;\n },\n [columnFilters],\n );\n\n // Pre-compute card display data so consumers don't have to. Memoized on\n // the filtered rows + aggregate map (both stable references from tanstack).\n const rows = table.getRowModel().rows;\n const cards = useMemo<PipeCardData[]>(\n () =>\n rows.map((row) => {\n const entry = row.original;\n const latestEntry = (aggregates.pipeEntriesByBasePipe[entry.basePipe]?.[0] ??\n entry) as PipeCatalogEntry & { pipeId: PipeId };\n const providers = getDefaultPipeProviders(latestEntry.pipeId);\n return {\n pipeId: latestEntry.pipeId,\n basePipe: entry.basePipe,\n label: entry.label,\n description: entry.description,\n providers,\n startingCostPerProvider: getStartingCostPerPipesProvider(latestEntry.pipeId),\n startingCreditAmount: getLowestPipeCreditAmount(latestEntry),\n costMode: \"per_result\",\n defaultInputFields: latestEntry.defaultInputRequirement\n ? collectRequirementFields(latestEntry.defaultInputRequirement).map(({ field }) => ({\n name: field.name,\n }))\n : [],\n defaultOutputFields: getDefaultOutputFields(latestEntry) ?? [],\n docPath: latestEntry.docPath,\n entry,\n latestEntry,\n };\n }),\n [rows, aggregates.pipeEntriesByBasePipe],\n );\n\n // Group cards by category. Pipes can belong to multiple categories — they\n // appear once per matching category. Order: insertion (first-seen).\n const cardsByCategory = useMemo<{ category: PipeCategory; cards: PipeCardData[] }[]>(() => {\n const groups = new Map<PipeCategory, PipeCardData[]>();\n for (const card of cards) {\n const cats = (card.entry.categories ?? []) as PipeCategory[];\n for (const cat of cats) {\n const arr = groups.get(cat);\n if (arr) arr.push(card);\n else groups.set(cat, [card]);\n }\n }\n return Array.from(groups, ([category, group]) => ({\n category,\n cards: group,\n }));\n }, [cards]);\n\n // Count of cards per category (a pipe in N categories counts N times).\n const categoryCounts = useMemo<Partial<Record<PipeCategory, number>>>(() => {\n const counts: Partial<Record<PipeCategory, number>> = {};\n for (const card of cards) {\n const cats = (card.entry.categories ?? []) as PipeCategory[];\n for (const cat of cats) {\n counts[cat] = (counts[cat] ?? 0) + 1;\n }\n }\n return counts;\n }, [cards]);\n\n // Stable counts based on the baseline (no category / column / global filter\n // applied). Use these to render category-selector counts that don't jump as\n // the user clicks around.\n const baselineCardCount = baselineTableData.length;\n const baselineCategoryCounts = useMemo<Partial<Record<PipeCategory, number>>>(() => {\n const counts: Partial<Record<PipeCategory, number>> = {};\n for (const entry of baselineTableData) {\n const cats = (entry.categories ?? []) as PipeCategory[];\n for (const cat of cats) {\n counts[cat] = (counts[cat] ?? 0) + 1;\n }\n }\n return counts;\n }, [baselineTableData]);\n\n return {\n table,\n cards,\n cardsByCategory,\n categoryCounts,\n baselineCardCount,\n baselineCategoryCounts,\n\n // category + global filter\n category,\n setCategory: handleCategoryChange,\n globalFilterInput,\n setGlobalFilterInput,\n\n // mutators\n addColumnFilter,\n removeColumnFilter,\n resetFilters,\n getColumnFilterValue,\n\n // aggregates for filter UI\n sortedInputFieldEntries: aggregates.sortedInputFieldEntries,\n sortedOutputFieldEntries: aggregates.sortedOutputFieldEntries,\n sortedTagEntries: aggregates.sortedTagEntries,\n sortedProviderEntries: aggregates.sortedProviderEntries,\n\n // reverse indexes (power-user / inverted-filter UX)\n pipeIdsByInputField: aggregates.pipeIdsByInputField,\n pipeIdsByOutputField: aggregates.pipeIdsByOutputField,\n pipeIdsByProvider: aggregates.pipeIdsByProvider,\n pipeIdsByTag: aggregates.pipeIdsByTag,\n };\n}\n\nexport type UsePipeCatalogTableReturn = ReturnType<typeof usePipeCatalogTable>;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ResourceStatus } from "./use-form-core.mjs";
|
|
2
|
+
import { PipeFormContext } from "../context/pipe-form-context.mjs";
|
|
3
|
+
import { FormResolvers, FormStore, PipeId, PipePayload, ValidationContext } from "@pipe0/base";
|
|
4
|
+
|
|
5
|
+
//#region src/hooks/use-pipe-form.d.ts
|
|
6
|
+
interface UsePipeFormOptions {
|
|
7
|
+
pipeId: PipeId;
|
|
8
|
+
publicKey: string;
|
|
9
|
+
defaultValues?: PipePayload;
|
|
10
|
+
resolvers?: FormResolvers;
|
|
11
|
+
userConnections?: {
|
|
12
|
+
public_id: string;
|
|
13
|
+
provider: string;
|
|
14
|
+
}[];
|
|
15
|
+
validationContext?: ValidationContext;
|
|
16
|
+
store?: FormStore;
|
|
17
|
+
/**
|
|
18
|
+
* Form-level scope tags. Bundled into every `resolvers.getSecrets` call so
|
|
19
|
+
* the backend can return only the secrets allowed in the declared scopes.
|
|
20
|
+
*/
|
|
21
|
+
scopes?: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Current team context. Bundled into every `resolvers.getSecrets` call so
|
|
24
|
+
* the backend can restrict team-level secrets to this team only.
|
|
25
|
+
*/
|
|
26
|
+
teamId?: string;
|
|
27
|
+
}
|
|
28
|
+
declare function usePipeForm(options: UsePipeFormOptions): PipeFormContext;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { UsePipeFormOptions, usePipeForm };
|
|
31
|
+
//# sourceMappingURL=use-pipe-form.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-pipe-form.d.mts","names":[],"sources":["../../src/hooks/use-pipe-form.ts"],"mappings":";;;;;UAgBiB,kBAAA;EACf,MAAA,EAAQ,MAAA;EACR,SAAA;EACA,aAAA,GAAgB,WAAA;EAChB,SAAA,GAAY,aAAA;EACZ,eAAA;IAAoB,SAAA;IAAmB,QAAA;EAAA;EACvC,iBAAA,GAAoB,iBAAA;EACpB,KAAA,GAAQ,SAAA;EANR;;;;EAWA,MAAA;EARA;;;;EAaA,MAAA;AAAA;AAAA,iBAGc,WAAA,CAAY,OAAA,EAAS,kBAAA,GAAqB,eAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { useFormCore } from "./use-form-core.mjs";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { getPipeDefaultPayload, getPipePayloadFormConfig, getPipePayloadSchema } from "@pipe0/base";
|
|
4
|
+
|
|
5
|
+
//#region src/hooks/use-pipe-form.ts
|
|
6
|
+
function usePipeForm(options) {
|
|
7
|
+
const { pipeId, publicKey, defaultValues, resolvers, validationContext, store: defaultFormStore, scopes, teamId } = options;
|
|
8
|
+
const schema = useMemo(() => getPipePayloadSchema(pipeId), [pipeId]);
|
|
9
|
+
const [store, setStore] = useState(defaultFormStore ?? { field_options: {} });
|
|
10
|
+
const core = useFormCore({
|
|
11
|
+
pipeOrSearchId: pipeId,
|
|
12
|
+
kind: "pipe",
|
|
13
|
+
schema,
|
|
14
|
+
publicKey,
|
|
15
|
+
defaultValues,
|
|
16
|
+
store,
|
|
17
|
+
setStore,
|
|
18
|
+
formConfig: useMemo(() => {
|
|
19
|
+
const defaultPayload = getPipeDefaultPayload(pipeId);
|
|
20
|
+
if (!defaultPayload) throw new Error("No default payload");
|
|
21
|
+
return getPipePayloadFormConfig({
|
|
22
|
+
pipePayload: defaultPayload,
|
|
23
|
+
store,
|
|
24
|
+
validationContext,
|
|
25
|
+
formResolvers: resolvers
|
|
26
|
+
});
|
|
27
|
+
}, [
|
|
28
|
+
pipeId,
|
|
29
|
+
defaultValues,
|
|
30
|
+
validationContext,
|
|
31
|
+
store
|
|
32
|
+
]),
|
|
33
|
+
resolvers,
|
|
34
|
+
environment: validationContext?.environment,
|
|
35
|
+
scopes,
|
|
36
|
+
teamId
|
|
37
|
+
});
|
|
38
|
+
return useMemo(() => ({
|
|
39
|
+
id: pipeId,
|
|
40
|
+
publicKey,
|
|
41
|
+
form: core.form,
|
|
42
|
+
sections: core.sections,
|
|
43
|
+
fields: core.fields,
|
|
44
|
+
connectionsStatus: core.connectionsStatus,
|
|
45
|
+
fieldLoadStates: core.fieldLoadStates,
|
|
46
|
+
resolvers,
|
|
47
|
+
store,
|
|
48
|
+
reset: core.reset
|
|
49
|
+
}), [
|
|
50
|
+
pipeId,
|
|
51
|
+
publicKey,
|
|
52
|
+
core.form,
|
|
53
|
+
core.sections,
|
|
54
|
+
core.fields,
|
|
55
|
+
core.connectionsStatus,
|
|
56
|
+
core.fieldLoadStates,
|
|
57
|
+
resolvers,
|
|
58
|
+
store,
|
|
59
|
+
core.reset
|
|
60
|
+
]);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { usePipeForm };
|
|
65
|
+
//# sourceMappingURL=use-pipe-form.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-pipe-form.mjs","names":[],"sources":["../../src/hooks/use-pipe-form.ts"],"sourcesContent":["import {\n type FormResolvers,\n type FormStore,\n getPipeDefaultPayload,\n getPipePayloadFormConfig,\n getPipePayloadSchema,\n type PipeId,\n type PipePayload,\n type ValidationContext,\n} from \"@pipe0/base\";\nimport { useMemo, useState } from \"react\";\nimport type { PipeFormContext } from \"../context/pipe-form-context.js\";\nimport { type ResourceStatus, useFormCore } from \"./use-form-core.js\";\n\nexport type { PipeFormContext, ResourceStatus };\n\nexport interface UsePipeFormOptions {\n pipeId: PipeId;\n publicKey: string;\n defaultValues?: PipePayload;\n resolvers?: FormResolvers;\n userConnections?: { public_id: string; provider: string }[];\n validationContext?: ValidationContext;\n store?: FormStore;\n /**\n * Form-level scope tags. Bundled into every `resolvers.getSecrets` call so\n * the backend can return only the secrets allowed in the declared scopes.\n */\n scopes?: string[];\n /**\n * Current team context. Bundled into every `resolvers.getSecrets` call so\n * the backend can restrict team-level secrets to this team only.\n */\n teamId?: string;\n}\n\nexport function usePipeForm(options: UsePipeFormOptions): PipeFormContext {\n const {\n pipeId,\n publicKey,\n defaultValues,\n resolvers,\n validationContext,\n store: defaultFormStore,\n scopes,\n teamId,\n } = options;\n\n const schema = useMemo(() => getPipePayloadSchema(pipeId), [pipeId]);\n\n const [store, setStore] = useState<FormStore>(defaultFormStore ?? { field_options: {} });\n\n const formConfig = useMemo(() => {\n const defaultPayload = getPipeDefaultPayload(pipeId);\n if (!defaultPayload) throw new Error(\"No default payload\");\n\n return getPipePayloadFormConfig({\n pipePayload: defaultPayload,\n store,\n validationContext,\n formResolvers: resolvers,\n });\n }, [pipeId, defaultValues, validationContext, store]);\n\n const core = useFormCore<PipePayload>({\n pipeOrSearchId: pipeId,\n kind: \"pipe\",\n schema,\n publicKey,\n defaultValues,\n store,\n setStore,\n formConfig,\n resolvers,\n environment: validationContext?.environment,\n scopes,\n teamId,\n });\n\n return useMemo<PipeFormContext>(\n () => ({\n id: pipeId,\n publicKey,\n form: core.form,\n sections: core.sections,\n fields: core.fields,\n connectionsStatus: core.connectionsStatus,\n fieldLoadStates: core.fieldLoadStates,\n resolvers,\n store,\n reset: core.reset,\n }),\n [\n pipeId,\n publicKey,\n core.form,\n core.sections,\n core.fields,\n core.connectionsStatus,\n core.fieldLoadStates,\n resolvers,\n store,\n core.reset,\n ],\n );\n}\n"],"mappings":";;;;;AAoCA,SAAgB,YAAY,SAA8C;CACxE,MAAM,EACJ,QACA,WACA,eACA,WACA,mBACA,OAAO,kBACP,QACA,WACE;CAEJ,MAAM,SAAS,cAAc,qBAAqB,OAAO,EAAE,CAAC,OAAO,CAAC;CAEpE,MAAM,CAAC,OAAO,YAAY,SAAoB,oBAAoB,EAAE,eAAe,EAAE,EAAE,CAAC;CAcxF,MAAM,OAAO,YAAyB;EACpC,gBAAgB;EAChB,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,YApBiB,cAAc;GAC/B,MAAM,iBAAiB,sBAAsB,OAAO;AACpD,OAAI,CAAC,eAAgB,OAAM,IAAI,MAAM,qBAAqB;AAE1D,UAAO,yBAAyB;IAC9B,aAAa;IACb;IACA;IACA,eAAe;IAChB,CAAC;KACD;GAAC;GAAQ;GAAe;GAAmB;GAAM,CAAC;EAWnD;EACA,aAAa,mBAAmB;EAChC;EACA;EACD,CAAC;AAEF,QAAO,eACE;EACL,IAAI;EACJ;EACA,MAAM,KAAK;EACX,UAAU,KAAK;EACf,QAAQ,KAAK;EACb,mBAAmB,KAAK;EACxB,iBAAiB,KAAK;EACtB;EACA;EACA,OAAO,KAAK;EACb,GACD;EACE;EACA;EACA,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL;EACA;EACA,KAAK;EACN,CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { SearchCardData } from "../types/catalog-adapters.mjs";
|
|
2
|
+
import * as _$react from "react";
|
|
3
|
+
import { CatalogFilter, SearchCatalogTableData, SearchCategory, SearchId } from "@pipe0/base";
|
|
4
|
+
import * as _$_tanstack_react_table0 from "@tanstack/react-table";
|
|
5
|
+
import { ColumnFilter } from "@tanstack/react-table";
|
|
6
|
+
|
|
7
|
+
//#region src/hooks/use-search-catalog-table.d.ts
|
|
8
|
+
type SearchOutputFieldEntries = Record<string, SearchId[]>;
|
|
9
|
+
declare function useSearchCatalogTable(config?: {
|
|
10
|
+
initialColumnFilters?: ColumnFilter[]; /** Optional whitelist/blacklist of searches and providers. Memoize. */
|
|
11
|
+
filter?: CatalogFilter;
|
|
12
|
+
}): {
|
|
13
|
+
table: _$_tanstack_react_table0.Table<SearchCatalogTableData>;
|
|
14
|
+
cards: SearchCardData[];
|
|
15
|
+
cardsByCategory: {
|
|
16
|
+
category: SearchCategory;
|
|
17
|
+
cards: SearchCardData[];
|
|
18
|
+
}[];
|
|
19
|
+
categoryCounts: Partial<Record<SearchCategory, number>>;
|
|
20
|
+
baselineCardCount: number;
|
|
21
|
+
baselineCategoryCounts: Partial<Record<SearchCategory, number>>;
|
|
22
|
+
category: SearchCategory | null;
|
|
23
|
+
setCategory: (category: SearchCategory | null) => void;
|
|
24
|
+
globalFilterInput: string;
|
|
25
|
+
setGlobalFilterInput: _$react.Dispatch<_$react.SetStateAction<string>>;
|
|
26
|
+
addColumnFilter: (id: "inputFields" | "outputFields" | "tags" | "providers", value: string) => void;
|
|
27
|
+
removeColumnFilter: (id: "inputFields" | "outputFields" | "tags" | "providers") => void;
|
|
28
|
+
resetFilters: () => void;
|
|
29
|
+
getColumnFilterValue: (id: "inputFields" | "outputFields" | "tags" | "providers") => string;
|
|
30
|
+
sortedOutputFieldEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:amplemarket@1" | "people:profiles:crustdata@1" | "people:profiles:amplemarket@1")[]][];
|
|
31
|
+
sortedTagEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:amplemarket@1" | "people:profiles:crustdata@1" | "people:profiles:amplemarket@1")[]][];
|
|
32
|
+
sortedProviderEntries: [string, ("companies:profiles:crustdata@1" | "companies:profiles:amplemarket@1" | "people:profiles:crustdata@1" | "people:profiles:amplemarket@1")[]][];
|
|
33
|
+
searchIdsByOutputField: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:amplemarket@1" | "people:profiles:crustdata@1" | "people:profiles:amplemarket@1")[]>;
|
|
34
|
+
searchIdsByProvider: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:amplemarket@1" | "people:profiles:crustdata@1" | "people:profiles:amplemarket@1")[]>;
|
|
35
|
+
searchIdsByTag: Record<string, ("companies:profiles:crustdata@1" | "companies:profiles:amplemarket@1" | "people:profiles:crustdata@1" | "people:profiles:amplemarket@1")[]>;
|
|
36
|
+
};
|
|
37
|
+
type UseSearchCatalogTableReturn = ReturnType<typeof useSearchCatalogTable>;
|
|
38
|
+
//#endregion
|
|
39
|
+
export { SearchOutputFieldEntries, UseSearchCatalogTableReturn, useSearchCatalogTable };
|
|
40
|
+
//# sourceMappingURL=use-search-catalog-table.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-search-catalog-table.d.mts","names":[],"sources":["../../src/hooks/use-search-catalog-table.ts"],"mappings":";;;;;;;KAyBY,wBAAA,GAA2B,MAAA,SAAe,QAAA;AAAA,iBAiCtC,qBAAA,CACd,MAAA;EACE,oBAAA,GAAuB,YAAA;EAEvB,MAAA,GAAS,aAAA;AAAA;;;;cAmHiC,cAAA;WAAuB,cAAA;EAAA;;;;;0BA1CtD,cAAA;;yCAAc,OAAA,CAAA,cAAA;+EApBiC,KAAA;;;;;;;;;;;KAmIlD,2BAAA,GAA8B,UAAA,QAAkB,qBAAA"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { fuzzyFilter } from "../utils/catalog-helpers.mjs";
|
|
2
|
+
import { useDebounce } from "./use-debounce.mjs";
|
|
3
|
+
import { useCallback, useMemo, useState } from "react";
|
|
4
|
+
import { filterSearchEntries, getDefaultSearchOutputFields, getInitialSearchTableData, getLoweestSearchCreditAmount, getSearchTableDataAggregates, getStartingCostPerSearchProvider } from "@pipe0/base";
|
|
5
|
+
import { createColumnHelper, getCoreRowModel, getFilteredRowModel, useReactTable } from "@tanstack/react-table";
|
|
6
|
+
|
|
7
|
+
//#region src/hooks/use-search-catalog-table.ts
|
|
8
|
+
const columnHelper = createColumnHelper();
|
|
9
|
+
const columns = [
|
|
10
|
+
columnHelper.accessor("searchId", {
|
|
11
|
+
filterFn: "includesString",
|
|
12
|
+
enableGlobalFilter: true
|
|
13
|
+
}),
|
|
14
|
+
columnHelper.accessor("description", {
|
|
15
|
+
filterFn: "fuzzy",
|
|
16
|
+
enableGlobalFilter: true
|
|
17
|
+
}),
|
|
18
|
+
columnHelper.accessor("label", {
|
|
19
|
+
filterFn: "includesString",
|
|
20
|
+
enableGlobalFilter: true
|
|
21
|
+
}),
|
|
22
|
+
columnHelper.accessor((row) => getDefaultSearchOutputFields(row.searchId) || [], {
|
|
23
|
+
id: "outputFields",
|
|
24
|
+
filterFn: "arrIncludes",
|
|
25
|
+
enableGlobalFilter: false
|
|
26
|
+
}),
|
|
27
|
+
columnHelper.accessor((row) => row.tags || [], {
|
|
28
|
+
id: "tags",
|
|
29
|
+
filterFn: "arrIncludes",
|
|
30
|
+
enableGlobalFilter: true
|
|
31
|
+
}),
|
|
32
|
+
columnHelper.accessor((row) => row.provider, {
|
|
33
|
+
id: "providers",
|
|
34
|
+
enableGlobalFilter: true
|
|
35
|
+
})
|
|
36
|
+
];
|
|
37
|
+
function useSearchCatalogTable(config = {}) {
|
|
38
|
+
const [category, setCategory] = useState(null);
|
|
39
|
+
const { initialColumnFilters = [], filter } = config;
|
|
40
|
+
const initialSearchTableData = useMemo(() => filterSearchEntries(getInitialSearchTableData(category), filter), [category, filter]);
|
|
41
|
+
const baselineTableData = useMemo(() => filterSearchEntries(getInitialSearchTableData(null), filter), [filter]);
|
|
42
|
+
const table = useReactTable({
|
|
43
|
+
columns,
|
|
44
|
+
data: initialSearchTableData,
|
|
45
|
+
getCoreRowModel: getCoreRowModel(),
|
|
46
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
47
|
+
globalFilterFn: fuzzyFilter,
|
|
48
|
+
filterFns: { fuzzy: fuzzyFilter },
|
|
49
|
+
getColumnCanGlobalFilter: (column) => column.columnDef.enableGlobalFilter !== false,
|
|
50
|
+
initialState: {
|
|
51
|
+
columnFilters: initialColumnFilters,
|
|
52
|
+
pagination: { pageSize: 10 }
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
const columnFilters = table.getState().columnFilters;
|
|
56
|
+
const aggregates = useMemo(() => getSearchTableDataAggregates(initialSearchTableData, category), [category, initialSearchTableData]);
|
|
57
|
+
const [globalFilterInput, setGlobalFilterInput, setGlobalFilterImmediately] = useDebounce((v) => {
|
|
58
|
+
if (v === table.getState().globalFilter) return;
|
|
59
|
+
table.setGlobalFilter(v);
|
|
60
|
+
if (v) {
|
|
61
|
+
setCategory(null);
|
|
62
|
+
table.setColumnFilters([]);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const addColumnFilter = useCallback((id, value) => {
|
|
66
|
+
setGlobalFilterImmediately("");
|
|
67
|
+
table.setColumnFilters([{
|
|
68
|
+
id,
|
|
69
|
+
value
|
|
70
|
+
}]);
|
|
71
|
+
}, [setGlobalFilterImmediately, table]);
|
|
72
|
+
const resetFilters = useCallback(() => {
|
|
73
|
+
setGlobalFilterImmediately("");
|
|
74
|
+
setCategory(null);
|
|
75
|
+
}, [setGlobalFilterImmediately]);
|
|
76
|
+
const removeColumnFilter = useCallback((id) => {
|
|
77
|
+
table.getColumn(id)?.setFilterValue(null);
|
|
78
|
+
}, [table]);
|
|
79
|
+
const handleCategoryChange = useCallback((category) => {
|
|
80
|
+
setCategory(category);
|
|
81
|
+
table.setColumnFilters([]);
|
|
82
|
+
setGlobalFilterImmediately("");
|
|
83
|
+
}, [table, setGlobalFilterImmediately]);
|
|
84
|
+
const getColumnFilterValue = useCallback((id) => {
|
|
85
|
+
return columnFilters.find((f) => f.id === id)?.value;
|
|
86
|
+
}, [columnFilters]);
|
|
87
|
+
const rows = table.getRowModel().rows;
|
|
88
|
+
const cards = useMemo(() => rows.map((row) => {
|
|
89
|
+
const entry = row.original;
|
|
90
|
+
const latestEntry = aggregates.searchEntriesByBaseSearch[entry.baseSearch]?.[0] ?? entry;
|
|
91
|
+
return {
|
|
92
|
+
searchId: latestEntry.searchId,
|
|
93
|
+
baseSearch: entry.baseSearch,
|
|
94
|
+
label: entry.label,
|
|
95
|
+
description: entry.description,
|
|
96
|
+
provider: entry.provider,
|
|
97
|
+
providers: [entry.provider],
|
|
98
|
+
startingCostPerProvider: getStartingCostPerSearchProvider(latestEntry.searchId),
|
|
99
|
+
startingCreditAmount: getLoweestSearchCreditAmount(latestEntry),
|
|
100
|
+
costMode: latestEntry.cost.mode,
|
|
101
|
+
defaultOutputFields: getDefaultSearchOutputFields(latestEntry.searchId),
|
|
102
|
+
docPath: latestEntry.docPath,
|
|
103
|
+
entry,
|
|
104
|
+
latestEntry
|
|
105
|
+
};
|
|
106
|
+
}), [rows, aggregates.searchEntriesByBaseSearch]);
|
|
107
|
+
return {
|
|
108
|
+
table,
|
|
109
|
+
cards,
|
|
110
|
+
cardsByCategory: useMemo(() => {
|
|
111
|
+
const groups = /* @__PURE__ */ new Map();
|
|
112
|
+
for (const card of cards) {
|
|
113
|
+
const cats = card.entry.categories ?? [];
|
|
114
|
+
for (const cat of cats) {
|
|
115
|
+
const arr = groups.get(cat);
|
|
116
|
+
if (arr) arr.push(card);
|
|
117
|
+
else groups.set(cat, [card]);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return Array.from(groups, ([category, group]) => ({
|
|
121
|
+
category,
|
|
122
|
+
cards: group
|
|
123
|
+
}));
|
|
124
|
+
}, [cards]),
|
|
125
|
+
categoryCounts: useMemo(() => {
|
|
126
|
+
const counts = {};
|
|
127
|
+
for (const card of cards) {
|
|
128
|
+
const cats = card.entry.categories ?? [];
|
|
129
|
+
for (const cat of cats) counts[cat] = (counts[cat] ?? 0) + 1;
|
|
130
|
+
}
|
|
131
|
+
return counts;
|
|
132
|
+
}, [cards]),
|
|
133
|
+
baselineCardCount: baselineTableData.length,
|
|
134
|
+
baselineCategoryCounts: useMemo(() => {
|
|
135
|
+
const counts = {};
|
|
136
|
+
for (const entry of baselineTableData) {
|
|
137
|
+
const cats = entry.categories ?? [];
|
|
138
|
+
for (const cat of cats) counts[cat] = (counts[cat] ?? 0) + 1;
|
|
139
|
+
}
|
|
140
|
+
return counts;
|
|
141
|
+
}, [baselineTableData]),
|
|
142
|
+
category,
|
|
143
|
+
setCategory: handleCategoryChange,
|
|
144
|
+
globalFilterInput,
|
|
145
|
+
setGlobalFilterInput,
|
|
146
|
+
addColumnFilter,
|
|
147
|
+
removeColumnFilter,
|
|
148
|
+
resetFilters,
|
|
149
|
+
getColumnFilterValue,
|
|
150
|
+
sortedOutputFieldEntries: aggregates.sortedOutputFieldEntries,
|
|
151
|
+
sortedTagEntries: aggregates.sortedTagEntries,
|
|
152
|
+
sortedProviderEntries: aggregates.sortedProviderEntries,
|
|
153
|
+
searchIdsByOutputField: aggregates.searchIdsByOutputField,
|
|
154
|
+
searchIdsByProvider: aggregates.searchIdsByProvider,
|
|
155
|
+
searchIdsByTag: aggregates.searchIdsByTag
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
//#endregion
|
|
160
|
+
export { useSearchCatalogTable };
|
|
161
|
+
//# sourceMappingURL=use-search-catalog-table.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-search-catalog-table.mjs","names":[],"sources":["../../src/hooks/use-search-catalog-table.ts"],"sourcesContent":["import {\n type CatalogFilter,\n filterSearchEntries,\n getDefaultSearchOutputFields,\n getInitialSearchTableData,\n getLoweestSearchCreditAmount,\n getSearchTableDataAggregates,\n getStartingCostPerSearchProvider,\n type SearchCatalogEntry,\n type SearchCatalogTableData,\n type SearchCategory,\n type SearchId,\n} from \"@pipe0/base\";\nimport {\n type ColumnFilter,\n createColumnHelper,\n getCoreRowModel,\n getFilteredRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { CostMode, SearchCardData } from \"../types/catalog-adapters.js\";\nimport { fuzzyFilter } from \"../utils/catalog-helpers.js\";\nimport { useDebounce } from \"./use-debounce.js\";\n\nexport type SearchOutputFieldEntries = Record<string, SearchId[]>;\n\nconst columnHelper = createColumnHelper<SearchCatalogTableData>();\n\nconst columns = [\n columnHelper.accessor(\"searchId\", {\n filterFn: \"includesString\",\n enableGlobalFilter: true,\n }),\n columnHelper.accessor(\"description\", {\n filterFn: \"fuzzy\" as any,\n enableGlobalFilter: true,\n }),\n columnHelper.accessor(\"label\", {\n filterFn: \"includesString\",\n enableGlobalFilter: true,\n }),\n columnHelper.accessor((row) => getDefaultSearchOutputFields(row.searchId) || [], {\n id: \"outputFields\",\n filterFn: \"arrIncludes\",\n enableGlobalFilter: false,\n }),\n columnHelper.accessor((row) => row.tags || [], {\n id: \"tags\",\n filterFn: \"arrIncludes\",\n enableGlobalFilter: true,\n }),\n columnHelper.accessor((row) => row.provider, {\n id: \"providers\",\n enableGlobalFilter: true,\n }),\n];\n\nexport function useSearchCatalogTable(\n config: {\n initialColumnFilters?: ColumnFilter[];\n /** Optional whitelist/blacklist of searches and providers. Memoize. */\n filter?: CatalogFilter;\n } = {},\n) {\n const [category, setCategory] = useState<SearchCategory | null>(null);\n const { initialColumnFilters = [] as ColumnFilter[], filter } = config;\n\n const initialSearchTableData = useMemo(\n () => filterSearchEntries(getInitialSearchTableData(category), filter),\n [category, filter],\n );\n\n // Baseline (config.filter applied, but no category / column / global filter).\n // Drives the stable category-button counts so the row doesn't jump.\n const baselineTableData = useMemo(\n () => filterSearchEntries(getInitialSearchTableData(null), filter),\n [filter],\n );\n\n const table = useReactTable({\n columns,\n data: initialSearchTableData,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n globalFilterFn: fuzzyFilter,\n filterFns: {\n fuzzy: fuzzyFilter,\n },\n getColumnCanGlobalFilter: (column) => column.columnDef.enableGlobalFilter !== false,\n initialState: {\n columnFilters: initialColumnFilters,\n pagination: {\n pageSize: 10,\n },\n },\n });\n\n const columnFilters = table.getState().columnFilters;\n\n const aggregates = useMemo(\n () => getSearchTableDataAggregates(initialSearchTableData, category),\n [category, initialSearchTableData],\n );\n\n const [globalFilterInput, setGlobalFilterInput, setGlobalFilterImmediately] = useDebounce((v) => {\n if (v === table.getState().globalFilter) return;\n table.setGlobalFilter(v);\n if (v) {\n setCategory(null);\n table.setColumnFilters([]);\n }\n });\n\n const addColumnFilter = useCallback(\n (id: \"inputFields\" | \"outputFields\" | \"tags\" | \"providers\", value: string) => {\n setGlobalFilterImmediately(\"\");\n table.setColumnFilters([{ id, value }]);\n },\n [setGlobalFilterImmediately, table],\n );\n\n const resetFilters = useCallback(() => {\n setGlobalFilterImmediately(\"\");\n setCategory(null);\n }, [setGlobalFilterImmediately]);\n\n const removeColumnFilter = useCallback(\n (id: \"inputFields\" | \"outputFields\" | \"tags\" | \"providers\") => {\n table.getColumn(id)?.setFilterValue(null);\n },\n [table],\n );\n\n const handleCategoryChange = useCallback(\n (category: SearchCategory | null) => {\n setCategory(category);\n table.setColumnFilters([]);\n setGlobalFilterImmediately(\"\");\n },\n [table, setGlobalFilterImmediately],\n );\n\n const getColumnFilterValue = useCallback(\n (id: \"inputFields\" | \"outputFields\" | \"tags\" | \"providers\") => {\n const res = columnFilters.find((f) => f.id === id)?.value;\n return res as string;\n },\n [columnFilters],\n );\n\n const rows = table.getRowModel().rows;\n const cards = useMemo<SearchCardData[]>(\n () =>\n rows.map((row) => {\n const entry = row.original;\n const latestEntry = (aggregates.searchEntriesByBaseSearch[entry.baseSearch]?.[0] ??\n entry) as SearchCatalogEntry & { searchId: SearchId };\n return {\n searchId: latestEntry.searchId,\n baseSearch: entry.baseSearch,\n label: entry.label,\n description: entry.description,\n provider: entry.provider,\n providers: [entry.provider],\n startingCostPerProvider: getStartingCostPerSearchProvider(latestEntry.searchId),\n startingCreditAmount: getLoweestSearchCreditAmount(latestEntry),\n costMode: latestEntry.cost.mode as CostMode,\n defaultOutputFields: getDefaultSearchOutputFields(latestEntry.searchId),\n docPath: latestEntry.docPath,\n entry: entry as SearchCatalogTableData,\n latestEntry,\n };\n }),\n [rows, aggregates.searchEntriesByBaseSearch],\n );\n\n const cardsByCategory = useMemo<{ category: SearchCategory; cards: SearchCardData[] }[]>(() => {\n const groups = new Map<SearchCategory, SearchCardData[]>();\n for (const card of cards) {\n const cats = (card.entry.categories ?? []) as SearchCategory[];\n for (const cat of cats) {\n const arr = groups.get(cat);\n if (arr) arr.push(card);\n else groups.set(cat, [card]);\n }\n }\n return Array.from(groups, ([category, group]) => ({\n category,\n cards: group,\n }));\n }, [cards]);\n\n const categoryCounts = useMemo<Partial<Record<SearchCategory, number>>>(() => {\n const counts: Partial<Record<SearchCategory, number>> = {};\n for (const card of cards) {\n const cats = (card.entry.categories ?? []) as SearchCategory[];\n for (const cat of cats) {\n counts[cat] = (counts[cat] ?? 0) + 1;\n }\n }\n return counts;\n }, [cards]);\n\n // Stable counts based on the baseline (no category / column / global filter\n // applied).\n const baselineCardCount = baselineTableData.length;\n const baselineCategoryCounts = useMemo<Partial<Record<SearchCategory, number>>>(() => {\n const counts: Partial<Record<SearchCategory, number>> = {};\n for (const entry of baselineTableData) {\n const cats = (entry.categories ?? []) as SearchCategory[];\n for (const cat of cats) {\n counts[cat] = (counts[cat] ?? 0) + 1;\n }\n }\n return counts;\n }, [baselineTableData]);\n\n return {\n table,\n cards,\n cardsByCategory,\n categoryCounts,\n baselineCardCount,\n baselineCategoryCounts,\n\n category,\n setCategory: handleCategoryChange,\n globalFilterInput,\n setGlobalFilterInput,\n\n addColumnFilter,\n removeColumnFilter,\n resetFilters,\n getColumnFilterValue,\n\n sortedOutputFieldEntries: aggregates.sortedOutputFieldEntries,\n sortedTagEntries: aggregates.sortedTagEntries,\n sortedProviderEntries: aggregates.sortedProviderEntries,\n\n searchIdsByOutputField: aggregates.searchIdsByOutputField,\n searchIdsByProvider: aggregates.searchIdsByProvider,\n searchIdsByTag: aggregates.searchIdsByTag,\n };\n}\n\nexport type UseSearchCatalogTableReturn = ReturnType<typeof useSearchCatalogTable>;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ResourceStatus } from "./use-form-core.mjs";
|
|
2
|
+
import { SearchFormContext } from "../context/search-form-context.mjs";
|
|
3
|
+
import { FormResolvers, FormStore, PipesEnvironment, SearchId, SearchPayload } from "@pipe0/base";
|
|
4
|
+
|
|
5
|
+
//#region src/hooks/use-search-form.d.ts
|
|
6
|
+
interface UseSearchFormOptions {
|
|
7
|
+
searchId: SearchId;
|
|
8
|
+
publicKey: string;
|
|
9
|
+
defaultValues?: SearchPayload;
|
|
10
|
+
resolvers?: FormResolvers;
|
|
11
|
+
environment?: PipesEnvironment;
|
|
12
|
+
store?: FormStore;
|
|
13
|
+
}
|
|
14
|
+
declare function useSearchForm(options: UseSearchFormOptions): SearchFormContext;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { UseSearchFormOptions, useSearchForm };
|
|
17
|
+
//# sourceMappingURL=use-search-form.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-search-form.d.mts","names":[],"sources":["../../src/hooks/use-search-form.ts"],"mappings":";;;;;UAeiB,oBAAA;EACf,QAAA,EAAU,QAAA;EACV,SAAA;EACA,aAAA,GAAgB,aAAA;EAChB,SAAA,GAAY,aAAA;EACZ,WAAA,GAAc,gBAAA;EACd,KAAA,GAAQ,SAAA;AAAA;AAAA,iBAGM,aAAA,CAAc,OAAA,EAAS,oBAAA,GAAuB,iBAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { useFormCore } from "./use-form-core.mjs";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { getSearchPayloadFormConfig, getSearchPayloadSchema } from "@pipe0/base";
|
|
4
|
+
|
|
5
|
+
//#region src/hooks/use-search-form.ts
|
|
6
|
+
function useSearchForm(options) {
|
|
7
|
+
const { searchId, publicKey, defaultValues, resolvers, environment, store: defaultStore } = options;
|
|
8
|
+
const schema = useMemo(() => getSearchPayloadSchema(searchId), [searchId]);
|
|
9
|
+
const [store, setStore] = useState(defaultStore ?? { field_options: {} });
|
|
10
|
+
const core = useFormCore({
|
|
11
|
+
pipeOrSearchId: searchId,
|
|
12
|
+
kind: "search",
|
|
13
|
+
schema,
|
|
14
|
+
publicKey,
|
|
15
|
+
defaultValues,
|
|
16
|
+
store,
|
|
17
|
+
setStore,
|
|
18
|
+
formConfig: useMemo(() => {
|
|
19
|
+
return getSearchPayloadFormConfig({
|
|
20
|
+
searchPayload: defaultValues ?? { search_id: searchId },
|
|
21
|
+
formContext: store
|
|
22
|
+
});
|
|
23
|
+
}, [
|
|
24
|
+
searchId,
|
|
25
|
+
defaultValues,
|
|
26
|
+
store
|
|
27
|
+
]),
|
|
28
|
+
resolvers,
|
|
29
|
+
environment
|
|
30
|
+
});
|
|
31
|
+
return useMemo(() => ({
|
|
32
|
+
id: searchId,
|
|
33
|
+
publicKey,
|
|
34
|
+
form: core.form,
|
|
35
|
+
sections: core.sections,
|
|
36
|
+
fields: core.fields,
|
|
37
|
+
connectionsStatus: core.connectionsStatus,
|
|
38
|
+
fieldLoadStates: core.fieldLoadStates,
|
|
39
|
+
resolvers,
|
|
40
|
+
store,
|
|
41
|
+
reset: core.reset
|
|
42
|
+
}), [
|
|
43
|
+
searchId,
|
|
44
|
+
publicKey,
|
|
45
|
+
core.form,
|
|
46
|
+
core.sections,
|
|
47
|
+
core.fields,
|
|
48
|
+
core.connectionsStatus,
|
|
49
|
+
core.fieldLoadStates,
|
|
50
|
+
resolvers,
|
|
51
|
+
store,
|
|
52
|
+
core.reset
|
|
53
|
+
]);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
export { useSearchForm };
|
|
58
|
+
//# sourceMappingURL=use-search-form.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-search-form.mjs","names":[],"sources":["../../src/hooks/use-search-form.ts"],"sourcesContent":["import {\n type FormResolvers,\n type FormStore,\n getSearchPayloadFormConfig,\n getSearchPayloadSchema,\n type PipesEnvironment,\n type SearchId,\n type SearchPayload,\n} from \"@pipe0/base\";\nimport { useMemo, useState } from \"react\";\nimport type { SearchFormContext } from \"../context/search-form-context.js\";\nimport { type ResourceStatus, useFormCore } from \"./use-form-core.js\";\n\nexport type { ResourceStatus, SearchFormContext };\n\nexport interface UseSearchFormOptions {\n searchId: SearchId;\n publicKey: string;\n defaultValues?: SearchPayload;\n resolvers?: FormResolvers;\n environment?: PipesEnvironment;\n store?: FormStore;\n}\n\nexport function useSearchForm(options: UseSearchFormOptions): SearchFormContext {\n const {\n searchId,\n publicKey,\n defaultValues,\n resolvers,\n environment,\n store: defaultStore,\n } = options;\n\n const schema = useMemo(() => getSearchPayloadSchema(searchId), [searchId]);\n\n const [store, setStore] = useState<FormStore>(defaultStore ?? { field_options: {} });\n\n const formConfig = useMemo(() => {\n return getSearchPayloadFormConfig({\n searchPayload: defaultValues ?? ({ search_id: searchId } as SearchPayload),\n formContext: store,\n });\n }, [searchId, defaultValues, store]);\n\n const core = useFormCore<SearchPayload>({\n pipeOrSearchId: searchId,\n kind: \"search\",\n schema,\n publicKey,\n defaultValues,\n store,\n setStore,\n formConfig,\n resolvers,\n environment,\n });\n\n return useMemo<SearchFormContext>(\n () => ({\n id: searchId,\n publicKey,\n form: core.form,\n sections: core.sections,\n fields: core.fields,\n connectionsStatus: core.connectionsStatus,\n fieldLoadStates: core.fieldLoadStates,\n resolvers,\n store,\n reset: core.reset,\n }),\n [\n searchId,\n publicKey,\n core.form,\n core.sections,\n core.fields,\n core.connectionsStatus,\n core.fieldLoadStates,\n resolvers,\n store,\n core.reset,\n ],\n );\n}\n"],"mappings":";;;;;AAwBA,SAAgB,cAAc,SAAkD;CAC9E,MAAM,EACJ,UACA,WACA,eACA,WACA,aACA,OAAO,iBACL;CAEJ,MAAM,SAAS,cAAc,uBAAuB,SAAS,EAAE,CAAC,SAAS,CAAC;CAE1E,MAAM,CAAC,OAAO,YAAY,SAAoB,gBAAgB,EAAE,eAAe,EAAE,EAAE,CAAC;CASpF,MAAM,OAAO,YAA2B;EACtC,gBAAgB;EAChB,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,YAfiB,cAAc;AAC/B,UAAO,2BAA2B;IAChC,eAAe,iBAAkB,EAAE,WAAW,UAAU;IACxD,aAAa;IACd,CAAC;KACD;GAAC;GAAU;GAAe;GAAM,CAAC;EAWlC;EACA;EACD,CAAC;AAEF,QAAO,eACE;EACL,IAAI;EACJ;EACA,MAAM,KAAK;EACX,UAAU,KAAK;EACf,QAAQ,KAAK;EACb,mBAAmB,KAAK;EACxB,iBAAiB,KAAK;EACtB;EACA;EACA,OAAO,KAAK;EACb,GACD;EACE;EACA;EACA,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL;EACA;EACA,KAAK;EACN,CACF"}
|