@bynder/compact-view 5.1.2 → 5.1.4
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/ActiveFilter.js +33 -0
- package/ActiveFilter.js.map +1 -0
- package/ActiveFilters.js +81 -0
- package/ActiveFilters.js.map +1 -0
- package/AddMedia.js +90 -0
- package/AddMedia.js.map +1 -0
- package/Advanced.js +66 -0
- package/Advanced.js.map +1 -0
- package/App.d.ts +1 -1
- package/App.js +89 -0
- package/App.js.map +1 -0
- package/AssetCard.js +172 -0
- package/AssetCard.js.map +1 -0
- package/AssetCardMetaproperties.js +47 -0
- package/AssetCardMetaproperties.js.map +1 -0
- package/AssetFilter.js +158 -0
- package/AssetFilter.js.map +1 -0
- package/AssetFilterContext.js +162 -0
- package/AssetFilterContext.js.map +1 -0
- package/AssetItem.js +40 -0
- package/AssetItem.js.map +1 -0
- package/AssetList.js +158 -0
- package/AssetList.js.map +1 -0
- package/AssetTypeItem.js +34 -0
- package/AssetTypeItem.js.map +1 -0
- package/AssetsView.js +61 -0
- package/AssetsView.js.map +1 -0
- package/Autocomplete.js +148 -0
- package/Autocomplete.js.map +1 -0
- package/ButtonAction.js +14 -0
- package/ButtonAction.js.map +1 -0
- package/CardSkeleton.js +31 -0
- package/CardSkeleton.js.map +1 -0
- package/Checkbox.styles.js +38 -0
- package/Checkbox.styles.js.map +1 -0
- package/Chip.js +43 -0
- package/Chip.js.map +1 -0
- package/CollectionCard.js +56 -0
- package/CollectionCard.js.map +1 -0
- package/CollectionItem.js +41 -0
- package/CollectionItem.js.map +1 -0
- package/CollectionList.js +53 -0
- package/CollectionList.js.map +1 -0
- package/CollectionView.js +73 -0
- package/CollectionView.js.map +1 -0
- package/CollectionsView.js +58 -0
- package/CollectionsView.js.map +1 -0
- package/ConfigContext.js +18 -0
- package/ConfigContext.js.map +1 -0
- package/ConnectButton.js +20 -0
- package/ConnectButton.js.map +1 -0
- package/Container.js +52 -0
- package/Container.js.map +1 -0
- package/ContextAction.js +42 -0
- package/ContextAction.js.map +1 -0
- package/Dat/Dat.d.ts +2 -12
- package/Dat/DatDropdownItem.d.ts +1 -1
- package/Dat/index.d.ts +0 -1
- package/Dat/types.d.ts +1 -1
- package/Dat.js +90 -0
- package/Dat.js.map +1 -0
- package/DatDropdownItem.js +47 -0
- package/DatDropdownItem.js.map +1 -0
- package/DesignSystemContext.js +12 -0
- package/DesignSystemContext.js.map +1 -0
- package/DirectionSelect.js +43 -0
- package/DirectionSelect.js.map +1 -0
- package/DocumentIcon.js +69 -0
- package/DocumentIcon.js.map +1 -0
- package/DomainInput.js +39 -0
- package/DomainInput.js.map +1 -0
- package/DragSelect.js +144 -0
- package/DragSelect.js.map +1 -0
- package/Dropdown.js +72 -0
- package/Dropdown.js.map +1 -0
- package/DropdownContent.js +59 -0
- package/DropdownContent.js.map +1 -0
- package/DropdownListItem.js +52 -0
- package/DropdownListItem.js.map +1 -0
- package/ErrorIcon.js +48 -0
- package/ErrorIcon.js.map +1 -0
- package/ErrorMessage.js +40 -0
- package/ErrorMessage.js.map +1 -0
- package/FieldSelect.js +74 -0
- package/FieldSelect.js.map +1 -0
- package/FileSelector.js +239 -0
- package/FileSelector.js.map +1 -0
- package/Header.js +42 -0
- package/Header.js.map +1 -0
- package/HorizontalScroll.js +51 -0
- package/HorizontalScroll.js.map +1 -0
- package/InfiniteScroll.js +26 -0
- package/InfiniteScroll.js.map +1 -0
- package/LeftArrow.js +31 -0
- package/LeftArrow.js.map +1 -0
- package/LoginComponent.js +32 -0
- package/LoginComponent.js.map +1 -0
- package/LoginContext.js +85 -0
- package/LoginContext.js.map +1 -0
- package/MetapropertyFilterContent.js +25 -0
- package/MetapropertyFilterContent.js.map +1 -0
- package/MetapropertyOption.js +24 -0
- package/MetapropertyOption.js.map +1 -0
- package/Modal.js +48 -0
- package/Modal.js.map +1 -0
- package/NoResults.js +51 -0
- package/NoResults.js.map +1 -0
- package/Oops.js +54 -0
- package/Oops.js.map +1 -0
- package/Option.js +50 -0
- package/Option.js.map +1 -0
- package/RefreshingSpinner.js +22 -0
- package/RefreshingSpinner.js.map +1 -0
- package/ReportModal.js +51 -0
- package/ReportModal.js.map +1 -0
- package/RightArrow.js +31 -0
- package/RightArrow.js.map +1 -0
- package/RootElementContext.js +12 -0
- package/RootElementContext.js.map +1 -0
- package/SearchInput.js +76 -0
- package/SearchInput.js.map +1 -0
- package/SelectedItemContainer.js +44 -0
- package/SelectedItemContainer.js.map +1 -0
- package/SelectedItems.js +27 -0
- package/SelectedItems.js.map +1 -0
- package/SelectionContext.js +144 -0
- package/SelectionContext.js.map +1 -0
- package/SelectionFooter.js +65 -0
- package/SelectionFooter.js.map +1 -0
- package/ShadowRoot.js +11 -0
- package/ShadowRoot.js.map +1 -0
- package/ShadowRootInternal.js +78 -0
- package/ShadowRootInternal.js.map +1 -0
- package/Shield.js +25 -0
- package/Shield.js.map +1 -0
- package/Skeleton.js +43 -0
- package/Skeleton.js.map +1 -0
- package/SmartFilterContent.js +11 -0
- package/SmartFilterContent.js.map +1 -0
- package/SmartFilterSelect.js +91 -0
- package/SmartFilterSelect.js.map +1 -0
- package/Smartfilters.js +186 -0
- package/Smartfilters.js.map +1 -0
- package/Spinner.js +32 -0
- package/Spinner.js.map +1 -0
- package/StatefulAssetList.js +100 -0
- package/StatefulAssetList.js.map +1 -0
- package/Styles.css.js +5 -0
- package/Styles.css.js.map +1 -0
- package/SwitchNLS.js +80 -0
- package/SwitchNLS.js.map +1 -0
- package/TagItem.js +38 -0
- package/TagItem.js.map +1 -0
- package/Tags.js +48 -0
- package/Tags.js.map +1 -0
- package/Theming.js +30 -0
- package/Theming.js.map +1 -0
- package/Toolbar.js +53 -0
- package/Toolbar.js.map +1 -0
- package/Tooltip.js +81 -0
- package/Tooltip.js.map +1 -0
- package/ViewSwitch.js +45 -0
- package/ViewSwitch.js.map +1 -0
- package/api/filterAssets.d.ts +1 -1
- package/api/getCollections.d.ts +1 -1
- package/api/getFilters.d.ts +1 -1
- package/api/getSimilarityAssets.d.ts +1 -1
- package/api/index.d.ts +2 -2
- package/api/rest/autocomplete.d.ts +1 -1
- package/api/rest/getAssetCounts.d.ts +2 -2
- package/api/rest/getInitialFilters.d.ts +2 -2
- package/api/rest/getMetapropertiesOptions.d.ts +1 -1
- package/app-config/ConfigContext.d.ts +3 -4
- package/app-config/appConfig.type.guard.d.ts +1 -1
- package/asset.type.js +31 -0
- package/asset.type.js.map +1 -0
- package/asyncDebounce.js +14 -0
- package/asyncDebounce.js.map +1 -0
- package/auth.js +35 -0
- package/auth.js.map +1 -0
- package/autocomplete2.js +25 -0
- package/autocomplete2.js.map +1 -0
- package/base64Converter.js +15 -0
- package/base64Converter.js.map +1 -0
- package/chunk.js +10 -0
- package/chunk.js.map +1 -0
- package/class.js +7 -0
- package/class.js.map +1 -0
- package/combineFilters.js +9 -0
- package/combineFilters.js.map +1 -0
- package/combineMetaproperties.js +25 -0
- package/combineMetaproperties.js.map +1 -0
- package/common/components/CardSkeleton.d.ts +1 -1
- package/common/components/Checkbox.styles.d.ts +4 -4
- package/common/components/Chip.d.ts +1 -1
- package/common/components/DocumentIcon.d.ts +1 -1
- package/common/components/DragSelect.d.ts +1 -1
- package/common/components/HorizontalScroll.d.ts +1 -1
- package/common/components/InfiniteScroll.d.ts +1 -1
- package/common/components/LeftArrow.d.ts +1 -1
- package/common/components/Modal.d.ts +1 -1
- package/common/components/NoResults.d.ts +1 -1
- package/common/components/RightArrow.d.ts +1 -1
- package/common/components/Skeleton.d.ts +1 -1
- package/common/components/Spinner.d.ts +1 -1
- package/common/components/Tooltip.d.ts +1 -1
- package/common/components/dropdown/Dropdown.d.ts +1 -1
- package/common/components/dropdown/DropdownContent.d.ts +1 -1
- package/common/components/dropdown/DropdownListItem.d.ts +1 -1
- package/common/hooks/useClickOutside.d.ts +1 -1
- package/constants.js +15 -0
- package/constants.js.map +1 -0
- package/createSelectors.js +11 -0
- package/createSelectors.js.map +1 -0
- package/crypto.js +21 -0
- package/crypto.js.map +1 -0
- package/error-handling/ErrorIcon.d.ts +1 -1
- package/error-handling/ErrorMessage.d.ts +1 -1
- package/error-handling/Oops.d.ts +1 -1
- package/error-handling/ReportModal.d.ts +1 -1
- package/error-handling/Shield.d.ts +1 -1
- package/filter/AssetFilter.d.ts +1 -1
- package/filter/AssetFilterContext.d.ts +3 -3
- package/filter/active-filters/ActiveFilter.d.ts +1 -1
- package/filter/active-filters/ActiveFilters.d.ts +1 -1
- package/filter/filters/advanced/Advanced.d.ts +1 -1
- package/filter/filters/advanced/AssetTypeItem.d.ts +1 -1
- package/filter/filters/metaproperty/Metaproperty.d.ts +1 -1
- package/filter/filters/metaproperty/MetapropertyFilterContent.d.ts +1 -1
- package/filter/filters/metaproperty/MetapropertyOption.d.ts +1 -1
- package/filter/filters/metaproperty/SmartFilterContent.d.ts +1 -1
- package/filter/filters/smartfilters/Metaproperties/Autocomplete.d.ts +3 -3
- package/filter/filters/smartfilters/Metaproperties/Option.d.ts +2 -2
- package/filter/filters/smartfilters/Metaproperties/SmartFilterSelect.d.ts +2 -2
- package/filter/filters/smartfilters/Smartfilters.d.ts +2 -2
- package/filter/filters/tags/TagItem.d.ts +1 -1
- package/filter/filters/tags/Tags.d.ts +1 -1
- package/filterAssets.js +175 -0
- package/filterAssets.js.map +1 -0
- package/filterEmptyMetaproperties.js +11 -0
- package/filterEmptyMetaproperties.js.map +1 -0
- package/getAsset.js +70 -0
- package/getAsset.js.map +1 -0
- package/getAssetCounts.js +27 -0
- package/getAssetCounts.js.map +1 -0
- package/getAssets.js +137 -0
- package/getAssets.js.map +1 -0
- package/getCollections.js +78 -0
- package/getCollections.js.map +1 -0
- package/getFilters.js +84 -0
- package/getFilters.js.map +1 -0
- package/getInitialFilters.js +51 -0
- package/getInitialFilters.js.map +1 -0
- package/getMetapropertiesOptions.js +31 -0
- package/getMetapropertiesOptions.js.map +1 -0
- package/getSimilarityAssets.js +141 -0
- package/getSimilarityAssets.js.map +1 -0
- package/handlers.js +11 -0
- package/handlers.js.map +1 -0
- package/helpers.js +7 -0
- package/helpers.js.map +1 -0
- package/index.js +9 -1162
- package/index.js.map +1 -0
- package/index2.js +18 -0
- package/index2.js.map +1 -0
- package/index3.js +36 -0
- package/index3.js.map +1 -0
- package/index4.js +20 -0
- package/index4.js.map +1 -0
- package/logger.js +7 -0
- package/logger.js.map +1 -0
- package/login/LoginComponent.d.ts +1 -1
- package/login/LoginContext.d.ts +1 -1
- package/login/components/ConnectButton.d.ts +1 -1
- package/login/components/Container.d.ts +1 -1
- package/login/components/DomainInput.d.ts +1 -1
- package/login/components/Header.d.ts +1 -1
- package/login/components/RefreshingSpinner.d.ts +1 -1
- package/loginwindow.js +84 -0
- package/loginwindow.js.map +1 -0
- package/normalizeResponse.js +31 -0
- package/normalizeResponse.js.map +1 -0
- package/oauth2.js +87 -0
- package/oauth2.js.map +1 -0
- package/order/DirectionSelect.d.ts +1 -1
- package/order/FieldSelect.d.ts +2 -2
- package/package.json +2 -9
- package/result.type.js +25 -0
- package/result.type.js.map +1 -0
- package/router/RouterContext.d.ts +1 -1
- package/search/SearchInput.d.ts +1 -1
- package/search/SwitchNLS.d.ts +1 -1
- package/search/index.d.ts +0 -2
- package/select/FileSelector.d.ts +1 -1
- package/select/SelectionContext.d.ts +1 -1
- package/select/SelectionFooter.d.ts +1 -1
- package/select/add-media/AddMedia.d.ts +1 -1
- package/select/add-media/ButtonAction.d.ts +1 -1
- package/select/current-selection/AssetItem.d.ts +1 -1
- package/select/current-selection/CollectionItem.d.ts +1 -1
- package/select/current-selection/SelectedItemContainer.d.ts +1 -1
- package/select/current-selection/SelectedItems.d.ts +1 -1
- package/store/useDatStore.d.ts +73 -0
- package/store/useOrderingStore.d.ts +2 -2
- package/store/useRouterStore.d.ts +4 -4
- package/store/useSearchStore.d.ts +69 -0
- package/store/useSimilaritySearchStore.d.ts +67 -0
- package/style/DesignSystemContext.d.ts +1 -1
- package/style/RootElementContext.d.ts +1 -1
- package/style/Theming.d.ts +1 -1
- package/style/shadowroot/ShadowRoot.d.ts +1 -1
- package/style/shadowroot/ShadowRootInternal.d.ts +1 -1
- package/text.js +9 -0
- package/text.js.map +1 -0
- package/toolbar/Toolbar.d.ts +1 -1
- package/toolbar/ViewSwitch.d.ts +1 -1
- package/trimMetapropertyValue.js +6 -0
- package/trimMetapropertyValue.js.map +1 -0
- package/url.js +7 -0
- package/url.js.map +1 -0
- package/useAccountDomain.js +33 -0
- package/useAccountDomain.js.map +1 -0
- package/useAuthInformation.js +42 -0
- package/useAuthInformation.js.map +1 -0
- package/useClickOutside.js +16 -0
- package/useClickOutside.js.map +1 -0
- package/useDatStore.js +62 -0
- package/useDatStore.js.map +1 -0
- package/useDimensions.js +31 -0
- package/useDimensions.js.map +1 -0
- package/useOrderingStore.js +27 -0
- package/useOrderingStore.js.map +1 -0
- package/useRouterStore.js +21 -0
- package/useRouterStore.js.map +1 -0
- package/useSearchStore.js +49 -0
- package/useSearchStore.js.map +1 -0
- package/useSimilaritySearchStore.js +28 -0
- package/useSimilaritySearchStore.js.map +1 -0
- package/utils/base64Converter.d.ts +1 -1
- package/utils/combineFilters.d.ts +1 -1
- package/utils/combineMetaproperties.d.ts +2 -2
- package/utils/filterEmptyMetaproperties.d.ts +1 -1
- package/utils/getMetaPropertiesForFilter.d.ts +1 -1
- package/utils/normalizeResponse.d.ts +1 -1
- package/utils.js +49 -0
- package/utils.js.map +1 -0
- package/utils2.js +51 -0
- package/utils2.js.map +1 -0
- package/views/asset/AssetList.d.ts +5 -3
- package/views/asset/AssetsView.d.ts +1 -1
- package/views/asset/StatefulAssetList.d.ts +2 -2
- package/views/asset/asset-card/AssetCard.d.ts +1 -1
- package/views/asset/asset-card/AssetCardMetaproperties.d.ts +3 -3
- package/views/asset/asset-card/ContextAction.d.ts +1 -1
- package/views/collection/CollectionView.d.ts +1 -1
- package/views/collections/CollectionCard.d.ts +1 -1
- package/views/collections/CollectionList.d.ts +1 -1
- package/views/collections/CollectionsView.d.ts +1 -1
- package/Dat/DatContext.d.ts +0 -12
- package/__tests__/utils/index.d.ts +0 -116
- package/api/__tests__/testMocks/mocks.d.ts +0 -14
- package/api/__tests__/utils.d.ts +0 -10
- package/common/components/__mocks__/Tooltip.d.ts +0 -6
- package/common/components/__tests__/utils.d.ts +0 -34
- package/error-handling/__tests__/utils.d.ts +0 -56
- package/filter/__tests__/utils.d.ts +0 -13
- package/index.mjs +0 -1163
- package/login/__tests__/mocks.d.ts +0 -1
- package/login/__tests__/utils.d.ts +0 -41
- package/search/SearchContext.d.ts +0 -25
- package/search/SimilaritySearchContext.d.ts +0 -21
- package/search/__mocks__/SimilaritySearchContext.d.ts +0 -5
- package/select/__tests__/utils.d.ts +0 -11
- package/style/shadowroot/__mocks__/ShadowRoot.d.ts +0 -4
- package/utils/__mocks__/logger.d.ts +0 -4
- package/views/asset/__tests__/utils.d.ts +0 -7
- package/views/collections/__tests__/utils.d.ts +0 -5
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { jsxs as S, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import { useState as l } from "react";
|
|
3
|
+
import r from "styled-components";
|
|
4
|
+
import { token as n } from "@bynder/design-system";
|
|
5
|
+
import { getMetapropertiesOptions as C } from "./getMetapropertiesOptions.js";
|
|
6
|
+
import { InfiniteScroll as $ } from "./InfiniteScroll.js";
|
|
7
|
+
import { OptionComponent as v } from "./Option.js";
|
|
8
|
+
import { useAuth as z } from "./LoginContext.js";
|
|
9
|
+
const E = ({
|
|
10
|
+
metaproperty: t,
|
|
11
|
+
smartfilterId: h,
|
|
12
|
+
onOptionSelect: m,
|
|
13
|
+
selectedOptions: p,
|
|
14
|
+
filteredMetaproperty: a
|
|
15
|
+
}) => {
|
|
16
|
+
const x = z(), [f, d] = l(!1), [s, g] = l(t.options), [u, c] = l(t.options.length % 30 === 0), w = async () => {
|
|
17
|
+
d(!0);
|
|
18
|
+
const e = s[s.length - 1];
|
|
19
|
+
try {
|
|
20
|
+
const o = await C({
|
|
21
|
+
auth: x,
|
|
22
|
+
smartfilterId: h,
|
|
23
|
+
metapropertyId: t.id,
|
|
24
|
+
labelKeyset: e.label,
|
|
25
|
+
zindexKeyset: e.zindex,
|
|
26
|
+
mpoKeyset: e.id
|
|
27
|
+
});
|
|
28
|
+
o.options.length ? (g((b) => [...b, ...o.options]), c(o.options.length % 30 === 0)) : c(!1);
|
|
29
|
+
} catch (o) {
|
|
30
|
+
throw new Error(`Error while loading more options: ${o}`);
|
|
31
|
+
} finally {
|
|
32
|
+
d(!1);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return /* @__PURE__ */ S(F, { "data-testid": "metaproperty-filter-content", children: [
|
|
36
|
+
/* @__PURE__ */ i(
|
|
37
|
+
L,
|
|
38
|
+
{
|
|
39
|
+
"data-testid": "metaproperty-title",
|
|
40
|
+
title: t.label || t.name,
|
|
41
|
+
children: t.label || t.name
|
|
42
|
+
}
|
|
43
|
+
),
|
|
44
|
+
/* @__PURE__ */ i(M, { children: /* @__PURE__ */ i(
|
|
45
|
+
$,
|
|
46
|
+
{
|
|
47
|
+
isLoading: f,
|
|
48
|
+
hasNextPage: u,
|
|
49
|
+
loadMore: w,
|
|
50
|
+
children: s.map((e) => a[e?.name] ? /* @__PURE__ */ i(
|
|
51
|
+
v,
|
|
52
|
+
{
|
|
53
|
+
option: e,
|
|
54
|
+
onClick: m,
|
|
55
|
+
metapropertyName: t.name,
|
|
56
|
+
isSelected: !!p[t.name]?.[e.id],
|
|
57
|
+
metapropertyMultifilter: !!t.isMultifilter,
|
|
58
|
+
count: a[e.name],
|
|
59
|
+
showCount: t.showCounter
|
|
60
|
+
},
|
|
61
|
+
e.id
|
|
62
|
+
) : null)
|
|
63
|
+
}
|
|
64
|
+
) })
|
|
65
|
+
] });
|
|
66
|
+
}, F = r.div`
|
|
67
|
+
color: ${n.colorText};
|
|
68
|
+
width: 282px;
|
|
69
|
+
`, L = r.h3`
|
|
70
|
+
padding: ${n.spacing5};
|
|
71
|
+
margin: 0;
|
|
72
|
+
overflow: hidden;
|
|
73
|
+
text-overflow: ellipsis;
|
|
74
|
+
white-space: nowrap;
|
|
75
|
+
font-size: ${n.fontSize100};
|
|
76
|
+
line-height: ${n.lineHeightText};
|
|
77
|
+
border-bottom: 1px solid rgba(3, 16, 38, 0.1);
|
|
78
|
+
box-shadow: 0px 0px 1px 0px rgba(3, 16, 38, 0.1), 0px 1px 4px -1px rgba(3, 16, 38, 0.1);
|
|
79
|
+
`, M = r.ul`
|
|
80
|
+
max-height: 400px;
|
|
81
|
+
overflow-y: auto;
|
|
82
|
+
padding: 0;
|
|
83
|
+
width: 100%;
|
|
84
|
+
list-style: none;
|
|
85
|
+
margin: 0;
|
|
86
|
+
scrollbar-width: none;
|
|
87
|
+
`;
|
|
88
|
+
export {
|
|
89
|
+
E as SmartFilterSelect
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=SmartFilterSelect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartFilterSelect.js","sources":["../../src/filter/filters/smartfilters/Metaproperties/SmartFilterSelect.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { token } from '@bynder/design-system';\nimport {\n\tSmartfilterMetaproperty,\n\tSmartfilterOption,\n\tSmartfilterSelectedOptionType,\n} from '@src/api/rest/types';\nimport { getMetapropertiesOptions } from '@src/api/rest/getMetapropertiesOptions';\nimport { InfiniteScroll } from '@src/common/components/InfiniteScroll';\nimport { OptionComponent } from './Option';\nimport { useAuth } from '@src/login/LoginContext';\n\ntype Props = {\n\tmetaproperty: SmartfilterMetaproperty;\n\tsmartfilterId: string;\n\tonOptionSelect: (\n\t\tmetapropertyName: string,\n\t\toption: SmartfilterOption,\n\t\tmetapropertyMultifilter: boolean,\n\t) => void;\n\tselectedOptions: Record<string, Record<string, SmartfilterSelectedOptionType>>;\n\tfilteredMetaproperty: Record<string, number>;\n};\n\nconst SmartFilterSelect = ({\n\tmetaproperty,\n\tsmartfilterId,\n\tonOptionSelect,\n\tselectedOptions,\n\tfilteredMetaproperty,\n}: Props) => {\n\tconst auth = useAuth();\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [options, setOptions] = useState(metaproperty.options);\n\tconst [hasNextPage, setHasNextPage] = useState(metaproperty.options.length % 30 === 0);\n\n\tconst handleLoadMore = async () => {\n\t\tsetIsLoading(true);\n\t\tconst lastOption = options[options.length - 1];\n\n\t\ttry {\n\t\t\tconst response = await getMetapropertiesOptions({\n\t\t\t\tauth,\n\t\t\t\tsmartfilterId,\n\t\t\t\tmetapropertyId: metaproperty.id,\n\t\t\t\tlabelKeyset: lastOption.label,\n\t\t\t\tzindexKeyset: lastOption.zindex,\n\t\t\t\tmpoKeyset: lastOption.id,\n\t\t\t});\n\n\t\t\tif (response.options.length) {\n\t\t\t\tsetOptions((prevOptions) => [...prevOptions, ...response.options]);\n\t\t\t\tsetHasNextPage(response.options.length % 30 === 0);\n\t\t\t} else {\n\t\t\t\tsetHasNextPage(false);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new Error(`Error while loading more options: ${error}`);\n\t\t} finally {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t};\n\n\treturn (\n\t\t<FilterContent data-testid=\"metaproperty-filter-content\">\n\t\t\t<FilterHead\n\t\t\t\tdata-testid=\"metaproperty-title\"\n\t\t\t\ttitle={metaproperty.label || metaproperty.name}\n\t\t\t>\n\t\t\t\t{metaproperty.label || metaproperty.name}\n\t\t\t</FilterHead>\n\t\t\t<FilterList>\n\t\t\t\t<InfiniteScroll\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\thasNextPage={hasNextPage}\n\t\t\t\t\tloadMore={handleLoadMore}\n\t\t\t\t>\n\t\t\t\t\t{options.map((option) => {\n\t\t\t\t\t\tif (!filteredMetaproperty[option?.name]) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<OptionComponent\n\t\t\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\t\t\toption={option}\n\t\t\t\t\t\t\t\tonClick={onOptionSelect}\n\t\t\t\t\t\t\t\tmetapropertyName={metaproperty.name}\n\t\t\t\t\t\t\t\tisSelected={!!selectedOptions[metaproperty.name]?.[option.id]}\n\t\t\t\t\t\t\t\tmetapropertyMultifilter={!!metaproperty.isMultifilter}\n\t\t\t\t\t\t\t\tcount={filteredMetaproperty[option.name]}\n\t\t\t\t\t\t\t\tshowCount={metaproperty.showCounter}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</InfiniteScroll>\n\t\t\t</FilterList>\n\t\t</FilterContent>\n\t);\n};\n\nexport { SmartFilterSelect };\n\nconst FilterContent = styled.div`\n\tcolor: ${token.colorText};\n\twidth: 282px;\n`;\n\nconst FilterHead = styled.h3`\n\tpadding: ${token.spacing5};\n\tmargin: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tfont-size: ${token.fontSize100};\n\tline-height: ${token.lineHeightText};\n\tborder-bottom: 1px solid rgba(3, 16, 38, 0.1);\n\tbox-shadow: 0px 0px 1px 0px rgba(3, 16, 38, 0.1), 0px 1px 4px -1px rgba(3, 16, 38, 0.1);\n`;\n\nconst FilterList = styled.ul`\n\tmax-height: 400px;\n\toverflow-y: auto;\n\tpadding: 0;\n\twidth: 100%;\n\tlist-style: none;\n\tmargin: 0;\n\tscrollbar-width: none;\n`;\n"],"names":["SmartFilterSelect","metaproperty","smartfilterId","onOptionSelect","selectedOptions","filteredMetaproperty","auth","useAuth","isLoading","setIsLoading","useState","options","setOptions","hasNextPage","setHasNextPage","handleLoadMore","lastOption","response","getMetapropertiesOptions","prevOptions","error","jsxs","FilterContent","jsx","FilterHead","FilterList","InfiniteScroll","option","OptionComponent","styled","token"],"mappings":";;;;;;;;AAyBA,MAAMA,IAAoB,CAAC;AAAA,EAC1B,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,sBAAAC;AACD,MAAa;AACZ,QAAMC,IAAOC,EAAA,GACP,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1C,CAACC,GAASC,CAAU,IAAIF,EAAST,EAAa,OAAO,GACrD,CAACY,GAAaC,CAAc,IAAIJ,EAAST,EAAa,QAAQ,SAAS,OAAO,CAAC,GAE/Ec,IAAiB,YAAY;AAClC,IAAAN,EAAa,EAAI;AACjB,UAAMO,IAAaL,EAAQA,EAAQ,SAAS,CAAC;AAE7C,QAAI;AACH,YAAMM,IAAW,MAAMC,EAAyB;AAAA,QAC/C,MAAAZ;AAAA,QACA,eAAAJ;AAAA,QACA,gBAAgBD,EAAa;AAAA,QAC7B,aAAae,EAAW;AAAA,QACxB,cAAcA,EAAW;AAAA,QACzB,WAAWA,EAAW;AAAA,MAAA,CACtB;AAED,MAAIC,EAAS,QAAQ,UACpBL,EAAW,CAACO,MAAgB,CAAC,GAAGA,GAAa,GAAGF,EAAS,OAAO,CAAC,GACjEH,EAAeG,EAAS,QAAQ,SAAS,OAAO,CAAC,KAEjDH,EAAe,EAAK;AAAA,IAEtB,SAASM,GAAO;AACf,YAAM,IAAI,MAAM,qCAAqCA,CAAK,EAAE;AAAA,IAC7D,UAAA;AACC,MAAAX,EAAa,EAAK;AAAA,IACnB;AAAA,EACD;AAEA,SACC,gBAAAY,EAACC,GAAA,EAAc,eAAY,+BAC1B,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,eAAY;AAAA,QACZ,OAAOvB,EAAa,SAASA,EAAa;AAAA,QAEzC,UAAAA,EAAa,SAASA,EAAa;AAAA,MAAA;AAAA,IAAA;AAAA,sBAEpCwB,GAAA,EACA,UAAA,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACA,WAAAlB;AAAA,QACA,aAAAK;AAAA,QACA,UAAUE;AAAA,QAET,UAAAJ,EAAQ,IAAI,CAACgB,MACRtB,EAAqBsB,GAAQ,IAAI,IAKrC,gBAAAJ;AAAA,UAACK;AAAA,UAAA;AAAA,YAEA,QAAAD;AAAA,YACA,SAASxB;AAAA,YACT,kBAAkBF,EAAa;AAAA,YAC/B,YAAY,CAAC,CAACG,EAAgBH,EAAa,IAAI,IAAI0B,EAAO,EAAE;AAAA,YAC5D,yBAAyB,CAAC,CAAC1B,EAAa;AAAA,YACxC,OAAOI,EAAqBsB,EAAO,IAAI;AAAA,YACvC,WAAW1B,EAAa;AAAA,UAAA;AAAA,UAPnB0B,EAAO;AAAA,QAAA,IALN,IAeR;AAAA,MAAA;AAAA,IAAA,EACF,CACD;AAAA,EAAA,GACD;AAEF,GAIML,IAAgBO,EAAO;AAAA,UACnBC,EAAM,SAAS;AAAA;AAAA,GAInBN,IAAaK,EAAO;AAAA,YACdC,EAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,cAKZA,EAAM,WAAW;AAAA,gBACfA,EAAM,cAAc;AAAA;AAAA;AAAA,GAK9BL,IAAaI,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
package/Smartfilters.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { jsx as r, Fragment as _, jsxs as O } from "react/jsx-runtime";
|
|
2
|
+
import { useState as u, useRef as p, useEffect as T } from "react";
|
|
3
|
+
import { styled as f } from "styled-components";
|
|
4
|
+
import { Box as q, token as S, Flex as G, Button as J } from "@bynder/design-system";
|
|
5
|
+
import { IconArrowLeft as K, IconArrowRight as Q } from "@bynder/icons";
|
|
6
|
+
import { useConfig as Y } from "./ConfigContext.js";
|
|
7
|
+
import { useAssetFilter as Z } from "./AssetFilterContext.js";
|
|
8
|
+
import { Dropdown as tt } from "./Dropdown.js";
|
|
9
|
+
import { Autocomplete as et } from "./Autocomplete.js";
|
|
10
|
+
import { SmartFilterSelect as nt } from "./SmartFilterSelect.js";
|
|
11
|
+
import { getAutocompleteOptions as rt } from "./autocomplete2.js";
|
|
12
|
+
import { useAuth as ot } from "./LoginContext.js";
|
|
13
|
+
import { debounceAsync as it } from "./asyncDebounce.js";
|
|
14
|
+
const vt = ({ smartfilters: l, metaproperties: m }) => {
|
|
15
|
+
const o = Z(), $ = ot(), { language: w } = Y(), k = lt(l), [L, D] = u({}), [X, A] = u(), [P, M] = u({}), [g, d] = u(0), [s, I] = u(0), [v, y] = u(!1), c = p(null), b = p(!1), a = p(null), h = p(null), x = p({});
|
|
16
|
+
T(() => {
|
|
17
|
+
c.current && I(c.current.scrollWidth - c.current.clientWidth), o.isDropdownActive || (D({}), A({}));
|
|
18
|
+
}, [l, c, o]);
|
|
19
|
+
const R = g === 0, U = s > 5 && g !== s;
|
|
20
|
+
function j() {
|
|
21
|
+
d((t) => {
|
|
22
|
+
const e = Math.max(t - 250, 0);
|
|
23
|
+
return e >= 100 ? e : 0;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function z() {
|
|
27
|
+
d((t) => {
|
|
28
|
+
const e = Math.min(t + 250, s);
|
|
29
|
+
return e <= s - 100 ? e : s;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const E = async (t, e) => {
|
|
33
|
+
let n;
|
|
34
|
+
M((i) => ({
|
|
35
|
+
...i,
|
|
36
|
+
[e]: !0
|
|
37
|
+
})), t.length >= 2 && (n = await rt({
|
|
38
|
+
metapropertyId: e,
|
|
39
|
+
auth: $,
|
|
40
|
+
searchTerm: t
|
|
41
|
+
})), A((i) => ({
|
|
42
|
+
...i,
|
|
43
|
+
[e]: n || null
|
|
44
|
+
})), M((i) => ({
|
|
45
|
+
...i,
|
|
46
|
+
[e]: !1
|
|
47
|
+
}));
|
|
48
|
+
}, N = (t) => (x.current[t] || (x.current[t] = it(E, 500)), x.current[t]), F = (t, e, n) => {
|
|
49
|
+
o.selectSmartfilterOption(t, e, n);
|
|
50
|
+
}, W = (t, e) => {
|
|
51
|
+
D((i) => ({
|
|
52
|
+
...i,
|
|
53
|
+
[t]: e
|
|
54
|
+
})), N(t)(e, t);
|
|
55
|
+
}, B = (t) => {
|
|
56
|
+
a.current = t.clientX, b.current = !1, y(!0);
|
|
57
|
+
}, H = (t) => {
|
|
58
|
+
if (b.current) {
|
|
59
|
+
t.preventDefault();
|
|
60
|
+
const e = (n) => {
|
|
61
|
+
n.stopPropagation(), document.removeEventListener("click", e, !0);
|
|
62
|
+
};
|
|
63
|
+
document.addEventListener("click", e, {
|
|
64
|
+
capture: !0,
|
|
65
|
+
once: !0
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
a.current = null, h.current = null, y(!1);
|
|
69
|
+
}, V = (t) => {
|
|
70
|
+
if (!v || !c.current || !a.current) return;
|
|
71
|
+
t.preventDefault(), h.current === null && (h.current = g), a.current && Math.abs(t.clientX - a.current) > 5 && (b.current = !0);
|
|
72
|
+
const e = (t.clientX - a.current) * -1 + h.current;
|
|
73
|
+
return e <= 16 ? d(0) : e + 16 < s ? d(e) : d(s);
|
|
74
|
+
};
|
|
75
|
+
return /* @__PURE__ */ r(_, { children: k.map((t) => m[t.id] ? /* @__PURE__ */ r(
|
|
76
|
+
tt,
|
|
77
|
+
{
|
|
78
|
+
title: t.labels[w] || t.labels.en_US,
|
|
79
|
+
alt: t.labels[w] || t.labels.en_US,
|
|
80
|
+
isSmall: !0,
|
|
81
|
+
fadeIn: !0,
|
|
82
|
+
isMetapropertyDropdown: !0,
|
|
83
|
+
children: () => /* @__PURE__ */ O(
|
|
84
|
+
st,
|
|
85
|
+
{
|
|
86
|
+
ref: c,
|
|
87
|
+
onMouseDown: B,
|
|
88
|
+
onMouseUp: H,
|
|
89
|
+
onMouseMove: V,
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ r(
|
|
92
|
+
ct,
|
|
93
|
+
{
|
|
94
|
+
$scroll: g,
|
|
95
|
+
"data-testid": "metaproperty-dropdown-content",
|
|
96
|
+
$isDragging: v,
|
|
97
|
+
children: t.metaproperties.map((e) => {
|
|
98
|
+
const n = m[t.id][e];
|
|
99
|
+
if (!n || !o.existingFilters?.[n.name] || n.type !== "autocomplete" && (n.type !== "smart-single" && n.type !== "select" || n.options.length === 0))
|
|
100
|
+
return null;
|
|
101
|
+
const i = n.type === "autocomplete" ? /* @__PURE__ */ r(
|
|
102
|
+
et,
|
|
103
|
+
{
|
|
104
|
+
metaproperty: n,
|
|
105
|
+
value: L[n.id] || "",
|
|
106
|
+
onChange: W,
|
|
107
|
+
onOptionSelect: F,
|
|
108
|
+
autocompleteOptions: X || {},
|
|
109
|
+
isLoading: P[n.id] || !1,
|
|
110
|
+
selectedOptions: o.selectedSmartfilterOptions || {}
|
|
111
|
+
}
|
|
112
|
+
) : /* @__PURE__ */ r(
|
|
113
|
+
nt,
|
|
114
|
+
{
|
|
115
|
+
metaproperty: n,
|
|
116
|
+
smartfilterId: t.id,
|
|
117
|
+
onOptionSelect: F,
|
|
118
|
+
selectedOptions: o.selectedSmartfilterOptions || {},
|
|
119
|
+
filteredMetaproperty: o.existingFilters?.[n.name]
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
return /* @__PURE__ */ r(at, { children: i }, e);
|
|
123
|
+
})
|
|
124
|
+
}
|
|
125
|
+
),
|
|
126
|
+
/* @__PURE__ */ O(ut, { direction: "row", justifyContent: "flex-end", children: [
|
|
127
|
+
/* @__PURE__ */ r(
|
|
128
|
+
C,
|
|
129
|
+
{
|
|
130
|
+
title: "Previous",
|
|
131
|
+
icon: /* @__PURE__ */ r(K, {}),
|
|
132
|
+
onClick: j,
|
|
133
|
+
"data-testid": "left-arrow",
|
|
134
|
+
isDisabled: R
|
|
135
|
+
}
|
|
136
|
+
),
|
|
137
|
+
/* @__PURE__ */ r(
|
|
138
|
+
C,
|
|
139
|
+
{
|
|
140
|
+
title: "Next",
|
|
141
|
+
icon: /* @__PURE__ */ r(Q, {}),
|
|
142
|
+
onClick: z,
|
|
143
|
+
"data-testid": "right-arrow",
|
|
144
|
+
isDisabled: !U
|
|
145
|
+
}
|
|
146
|
+
)
|
|
147
|
+
] })
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
)
|
|
151
|
+
},
|
|
152
|
+
t.id
|
|
153
|
+
) : null) });
|
|
154
|
+
};
|
|
155
|
+
function lt(l) {
|
|
156
|
+
return [...l].sort((m, o) => m.zindex - o.zindex);
|
|
157
|
+
}
|
|
158
|
+
const st = f.div`
|
|
159
|
+
display: flex;
|
|
160
|
+
flex-direction: column;
|
|
161
|
+
overflow: hidden;
|
|
162
|
+
`, ct = f.div`
|
|
163
|
+
display: flex;
|
|
164
|
+
flex-direction: row;
|
|
165
|
+
transform: translateX(-${(l) => l.$scroll}px);
|
|
166
|
+
transition: transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.15);
|
|
167
|
+
width: fit-content;
|
|
168
|
+
cursor: ${(l) => l.$isDragging ? "grabbing" : "default"};
|
|
169
|
+
`, at = f(q)`
|
|
170
|
+
border-right: 1px solid rgba(3, 16, 38, 0.1);
|
|
171
|
+
max-width: 300px;
|
|
172
|
+
`, ut = f(G)`
|
|
173
|
+
padding: ${S.spacing3};
|
|
174
|
+
border-top: 1px solid rgba(3, 16, 38, 0.1);
|
|
175
|
+
gap: ${S.spacing3};
|
|
176
|
+
`, C = f(J)`
|
|
177
|
+
padding: ${S.spacing3};
|
|
178
|
+
border-radius: 6px;
|
|
179
|
+
border: 1px solid rgba(3, 16, 38, 0.1);
|
|
180
|
+
background: rgba(3, 16, 38, 0.03);
|
|
181
|
+
cursor: pointer;
|
|
182
|
+
`;
|
|
183
|
+
export {
|
|
184
|
+
vt as Smartfilter
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=Smartfilters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Smartfilters.js","sources":["../../src/filter/filters/smartfilters/Smartfilters.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { styled } from 'styled-components';\nimport { Box, Button, Flex, token } from '@bynder/design-system';\nimport { IconArrowLeft, IconArrowRight } from '@bynder/icons';\nimport {\n\tSmartfilter as SmartfilterType,\n\tSmartfilterMetaproperty,\n\tSmartfilterOption,\n\tAutocompleteOption,\n} from '@src/api/rest/types';\nimport { useConfig } from '@src/app-config/ConfigContext';\nimport { useAssetFilter } from '../../AssetFilterContext';\nimport { Dropdown } from '@src/common/components/dropdown/Dropdown';\nimport { Autocomplete } from './Metaproperties/Autocomplete';\nimport { SmartFilterSelect } from './Metaproperties/SmartFilterSelect';\nimport { getAutocompleteOptions, AutocompleteOptions } from '@src/api/rest/autocomplete';\nimport { useAuth } from '@src/login/LoginContext';\nimport { debounceAsync } from '@src/utils/asyncDebounce';\n\ntype Props = {\n\tsmartfilters: SmartfilterType[];\n\tmetaproperties: Record<string, Record<string, SmartfilterMetaproperty>>;\n};\n\nconst Smartfilter = ({ smartfilters, metaproperties }: Props) => {\n\tconst assetFilterState = useAssetFilter();\n\tconst auth = useAuth();\n\tconst { language } = useConfig();\n\n\tconst sortedFilters = sortFilters(smartfilters);\n\n\tconst [inputValue, setInputValue] = useState<{ [key: string]: string }>({});\n\tconst [autocompleteOptions, setAutocompleteOptions] = useState<\n\t\tAutocompleteOptions | undefined\n\t>();\n\tconst [isLoading, setIsLoading] = useState<{ [key: string]: boolean }>({});\n\n\tconst [scroll, setScroll] = useState(0);\n\tconst [maxScroll, setMaxScroll] = useState(0);\n\n\tconst [isDragging, setIsDragging] = useState(false);\n\n\tconst nodeRef = useRef<HTMLDivElement>(null);\n\tconst hasMoved = useRef(false);\n\tconst initialX = useRef<number | null>(null);\n\tconst initialScrollPos = useRef<number | null>(null);\n\n\t// useRef to track inputs so we can debounce them individually\n\tconst debouncedFunctions = useRef<{\n\t\t[key: string]: (search: string, id: string) => Promise<void>;\n\t}>({});\n\n\tuseEffect(() => {\n\t\tif (nodeRef.current) {\n\t\t\tsetMaxScroll(nodeRef.current.scrollWidth - nodeRef.current.clientWidth);\n\t\t}\n\n\t\tif (!assetFilterState.isDropdownActive) {\n\t\t\tsetInputValue({});\n\t\t\tsetAutocompleteOptions({});\n\t\t}\n\t}, [smartfilters, nodeRef, assetFilterState]);\n\n\tconst isLeftArrowDisabled = scroll === 0;\n\tconst isRightArrowDisabled = maxScroll > 5 && scroll !== maxScroll;\n\n\tfunction handleLeftScroll() {\n\t\tsetScroll((prevScroll: number) => {\n\t\t\tconst leftScroll = Math.max(prevScroll - 250, 0);\n\n\t\t\treturn leftScroll >= 100 ? leftScroll : 0;\n\t\t});\n\t}\n\n\tfunction handleRightScroll() {\n\t\tsetScroll((prevScroll: number) => {\n\t\t\tconst rightScroll = Math.min(prevScroll + 250, maxScroll);\n\n\t\t\treturn rightScroll <= maxScroll - 100 ? rightScroll : maxScroll;\n\t\t});\n\t}\n\n\tconst handleApi = async (search: string, id: string) => {\n\t\tlet callAutocomplete;\n\t\t// set the loading state for the specific search as we can have more than 1\n\t\tsetIsLoading((prev) => ({\n\t\t\t...prev,\n\t\t\t[id]: true,\n\t\t}));\n\n\t\t// api searches of 1 character break the api returning a 500\n\t\tif (search.length >= 2) {\n\t\t\tcallAutocomplete = await getAutocompleteOptions({\n\t\t\t\tmetapropertyId: id,\n\t\t\t\tauth,\n\t\t\t\tsearchTerm: search,\n\t\t\t});\n\t\t}\n\n\t\tsetAutocompleteOptions((prev) => ({\n\t\t\t...prev,\n\t\t\t[id]: callAutocomplete ? callAutocomplete : null,\n\t\t}));\n\n\t\tsetIsLoading((prev) => ({\n\t\t\t...prev,\n\t\t\t[id]: false,\n\t\t}));\n\t};\n\n\tconst getDebouncedFunction = (id: string) => {\n\t\t// Create a debounced function for the specific input if it doesn't exist\n\t\tif (!debouncedFunctions.current[id]) {\n\t\t\tdebouncedFunctions.current[id] = debounceAsync(handleApi, 500) as (\n\t\t\t\tsearch: string,\n\t\t\t\tid: string,\n\t\t\t) => Promise<void>;\n\t\t}\n\n\t\treturn debouncedFunctions.current[id];\n\t};\n\n\tconst handleSmartfilterOptionSelections = (\n\t\tmetapropertyName: string,\n\t\toption: AutocompleteOption | SmartfilterOption,\n\t\tisMultifilter: boolean,\n\t) => {\n\t\tassetFilterState.selectSmartfilterOption(metapropertyName, option, isMultifilter);\n\t};\n\n\tconst handleAutocompleteInputChange = (metapropertyId: string, value: string) => {\n\t\tsetInputValue((prev) => ({\n\t\t\t...prev,\n\t\t\t[metapropertyId]: value,\n\t\t}));\n\t\tconst debouncedHandleApi = getDebouncedFunction(metapropertyId);\n\t\tdebouncedHandleApi(value, metapropertyId);\n\t};\n\n\tconst handleMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\t// Save the initial position for movement detection\n\t\tinitialX.current = event.clientX;\n\t\thasMoved.current = false;\n\t\tsetIsDragging(true);\n\t};\n\n\tconst handleMouseUp = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (hasMoved.current) {\n\t\t\tevent.preventDefault();\n\t\t\tconst preventClickPropagation = (e: MouseEvent) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\tdocument.removeEventListener('click', preventClickPropagation, true);\n\t\t\t};\n\n\t\t\t// Add a one-time click handler that will fire before any other click handlers\n\t\t\tdocument.addEventListener('click', preventClickPropagation, {\n\t\t\t\tcapture: true,\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t}\n\n\t\tinitialX.current = null;\n\t\tinitialScrollPos.current = null;\n\n\t\tsetIsDragging(false);\n\t};\n\n\tconst handleDrag = (event: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!isDragging || !nodeRef.current || !initialX.current) return;\n\n\t\tevent.preventDefault();\n\n\t\t// This tracks the initial scroll position when the drag starts so it doesn't reset\n\t\t// to 0 when the user starts dragging again.\n\t\tif (initialScrollPos.current === null) {\n\t\t\tinitialScrollPos.current = scroll;\n\t\t}\n\n\t\t// Check if we've moved enough to consider this a drag operation\n\t\tif (initialX.current) {\n\t\t\tconst deltaX = Math.abs(event.clientX - initialX.current);\n\n\t\t\t// If moved more than the threshold in either direction, mark as moved\n\t\t\tif (deltaX > 5) {\n\t\t\t\thasMoved.current = true;\n\t\t\t}\n\t\t}\n\n\t\tconst walkX = (event.clientX - initialX.current) * -1 + initialScrollPos.current;\n\n\t\t// 16 is to make the scroll a bit smoother in case of coming up short (Padding width offset)\n\t\tif (walkX <= 16) {\n\t\t\treturn setScroll(0);\n\t\t}\n\n\t\tif (walkX + 16 < maxScroll) {\n\t\t\treturn setScroll(walkX);\n\t\t}\n\n\t\treturn setScroll(maxScroll);\n\t};\n\n\t/* Note that it is important for the Dropdown component *not* to be rerendered when\n\t * the reference value of the filter object changes, only when it is actually a\n\t * different filter (i.e. when the ID changes). When a GraphQL request is made, the\n\t * same filter will be represented by a new object. If this causes a rerender of the\n\t * Dropdown component, the dropdown will close after every filter selection. Instead,\n\t * the dropdown should stay open after a filter is selected.\n\t */\n\treturn (\n\t\t<>\n\t\t\t{sortedFilters.map((filter) => {\n\t\t\t\tif (!metaproperties[filter.id]) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn (\n\t\t\t\t\t<Dropdown\n\t\t\t\t\t\tkey={filter.id}\n\t\t\t\t\t\ttitle={filter.labels[language] || filter.labels.en_US}\n\t\t\t\t\t\talt={filter.labels[language] || filter.labels.en_US}\n\t\t\t\t\t\tisSmall\n\t\t\t\t\t\tfadeIn\n\t\t\t\t\t\tisMetapropertyDropdown\n\t\t\t\t\t>\n\t\t\t\t\t\t{() => (\n\t\t\t\t\t\t\t<MetaPropertyFilterParent\n\t\t\t\t\t\t\t\tref={nodeRef}\n\t\t\t\t\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\t\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\t\t\t\t\tonMouseMove={handleDrag}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DropdownContentWrapper\n\t\t\t\t\t\t\t\t\t$scroll={scroll}\n\t\t\t\t\t\t\t\t\tdata-testid=\"metaproperty-dropdown-content\"\n\t\t\t\t\t\t\t\t\t$isDragging={isDragging}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{filter.metaproperties.map((metapropertyId) => {\n\t\t\t\t\t\t\t\t\t\tconst metaproperty =\n\t\t\t\t\t\t\t\t\t\t\tmetaproperties[filter.id][metapropertyId];\n\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t!metaproperty ||\n\t\t\t\t\t\t\t\t\t\t\t!assetFilterState.existingFilters?.[metaproperty.name]\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tmetaproperty.type !== 'autocomplete' &&\n\t\t\t\t\t\t\t\t\t\t\t((metaproperty.type !== 'smart-single' &&\n\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty.type !== 'select') ||\n\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty.options.length === 0)\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tconst content =\n\t\t\t\t\t\t\t\t\t\t\tmetaproperty.type === 'autocomplete' ? (\n\t\t\t\t\t\t\t\t\t\t\t\t<Autocomplete\n\t\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty={metaproperty}\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={inputValue[metaproperty.id] || ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={handleAutocompleteInputChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonOptionSelect={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleSmartfilterOptionSelections\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tautocompleteOptions={autocompleteOptions || {}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisLoading={isLoading[metaproperty.id] || false}\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedOptions={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tassetFilterState.selectedSmartfilterOptions ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t<SmartFilterSelect\n\t\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty={metaproperty}\n\t\t\t\t\t\t\t\t\t\t\t\t\tsmartfilterId={filter.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonOptionSelect={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleSmartfilterOptionSelections\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedOptions={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tassetFilterState.selectedSmartfilterOptions ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfilteredMetaproperty={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tassetFilterState.existingFilters?.[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tmetaproperty.name\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<DropdownContentContainer key={metapropertyId}>\n\t\t\t\t\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t\t\t\t\t</DropdownContentContainer>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</DropdownContentWrapper>\n\n\t\t\t\t\t\t\t\t<NavigationParent direction=\"row\" justifyContent=\"flex-end\">\n\t\t\t\t\t\t\t\t\t<NavigationArrow\n\t\t\t\t\t\t\t\t\t\ttitle=\"Previous\"\n\t\t\t\t\t\t\t\t\t\ticon={<IconArrowLeft />}\n\t\t\t\t\t\t\t\t\t\tonClick={handleLeftScroll}\n\t\t\t\t\t\t\t\t\t\tdata-testid=\"left-arrow\"\n\t\t\t\t\t\t\t\t\t\tisDisabled={isLeftArrowDisabled}\n\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t<NavigationArrow\n\t\t\t\t\t\t\t\t\t\ttitle=\"Next\"\n\t\t\t\t\t\t\t\t\t\ticon={<IconArrowRight />}\n\t\t\t\t\t\t\t\t\t\tonClick={handleRightScroll}\n\t\t\t\t\t\t\t\t\t\tdata-testid=\"right-arrow\"\n\t\t\t\t\t\t\t\t\t\tisDisabled={!isRightArrowDisabled}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</NavigationParent>\n\t\t\t\t\t\t\t</MetaPropertyFilterParent>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Dropdown>\n\t\t\t\t);\n\t\t\t})}\n\t\t</>\n\t);\n};\n\nfunction sortFilters(filters: SmartfilterType[]) {\n\treturn [...filters].sort((a, b) => a.zindex - b.zindex);\n}\n\nexport { Smartfilter };\n\nconst MetaPropertyFilterParent = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n`;\n\nconst DropdownContentWrapper = styled.div<{ $scroll: number; $isDragging?: boolean }>`\n\tdisplay: flex;\n\tflex-direction: row;\n\ttransform: translateX(-${(p) => p.$scroll}px);\n\ttransition: transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.15);\n\twidth: fit-content;\n\tcursor: ${(p) => (p.$isDragging ? 'grabbing' : 'default')};\n`;\n\nconst DropdownContentContainer = styled(Box)`\n\tborder-right: 1px solid rgba(3, 16, 38, 0.1);\n\tmax-width: 300px;\n`;\n\nconst NavigationParent = styled(Flex)`\n\tpadding: ${token.spacing3};\n\tborder-top: 1px solid rgba(3, 16, 38, 0.1);\n\tgap: ${token.spacing3};\n`;\n\nconst NavigationArrow = styled(Button)`\n\tpadding: ${token.spacing3};\n\tborder-radius: 6px;\n\tborder: 1px solid rgba(3, 16, 38, 0.1);\n\tbackground: rgba(3, 16, 38, 0.03);\n\tcursor: pointer;\n`;\n"],"names":["Smartfilter","smartfilters","metaproperties","assetFilterState","useAssetFilter","auth","useAuth","language","useConfig","sortedFilters","sortFilters","inputValue","setInputValue","useState","autocompleteOptions","setAutocompleteOptions","isLoading","setIsLoading","scroll","setScroll","maxScroll","setMaxScroll","isDragging","setIsDragging","nodeRef","useRef","hasMoved","initialX","initialScrollPos","debouncedFunctions","useEffect","isLeftArrowDisabled","isRightArrowDisabled","handleLeftScroll","prevScroll","leftScroll","handleRightScroll","rightScroll","handleApi","search","id","callAutocomplete","prev","getAutocompleteOptions","getDebouncedFunction","debounceAsync","handleSmartfilterOptionSelections","metapropertyName","option","isMultifilter","handleAutocompleteInputChange","metapropertyId","value","handleMouseDown","event","handleMouseUp","preventClickPropagation","e","handleDrag","walkX","jsx","Fragment","filter","Dropdown","jsxs","MetaPropertyFilterParent","DropdownContentWrapper","metaproperty","content","Autocomplete","SmartFilterSelect","DropdownContentContainer","NavigationParent","NavigationArrow","IconArrowLeft","IconArrowRight","filters","a","b","styled","p","Box","Flex","token","Button"],"mappings":"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"}
|
package/Spinner.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { styled as r } from "styled-components";
|
|
3
|
+
import { token as n } from "@bynder/design-system";
|
|
4
|
+
function g(i) {
|
|
5
|
+
return /* @__PURE__ */ e(
|
|
6
|
+
s,
|
|
7
|
+
{
|
|
8
|
+
"data-testid": "spinner",
|
|
9
|
+
$isRelative: i.isRelative,
|
|
10
|
+
$isHidden: i.isHidden,
|
|
11
|
+
$isRefreshingSpinner: i.isRefreshingSpinner,
|
|
12
|
+
$isNotUsingMargin: i.isNotUsingMargin,
|
|
13
|
+
children: /* @__PURE__ */ e("svg", { className: "spinner", viewBox: "0 0 20 20", children: /* @__PURE__ */ e("circle", { cx: "10", cy: "10", r: "8", fill: "none", strokeWidth: "3" }) })
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
const s = r.div`
|
|
18
|
+
display: ${(i) => i.$isHidden ? "none" : "initial"};
|
|
19
|
+
position: ${(i) => i.$isRelative ? "relative" : "absolute"};
|
|
20
|
+
top: ${(i) => i.$isRefreshingSpinner ? "initial" : "0"};
|
|
21
|
+
right: ${(i) => i.$isRefreshingSpinner ? "initial" : "0"};
|
|
22
|
+
width: ${n.spacing6};
|
|
23
|
+
height: ${n.spacing6};
|
|
24
|
+
margin-right: ${(i) => i.$isNotUsingMargin ? "0" : n.spacing3};
|
|
25
|
+
margin-top: ${(i) => i.$isNotUsingMargin ? "0" : n.spacing4};
|
|
26
|
+
background-color: #fff;
|
|
27
|
+
color: rgba(0, 34, 51, 0.3);
|
|
28
|
+
`;
|
|
29
|
+
export {
|
|
30
|
+
g as Spinner
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=Spinner.js.map
|
package/Spinner.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Spinner.js","sources":["../../src/common/components/Spinner.tsx"],"sourcesContent":["import React from 'react';\n\nimport { styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\n\ninterface Props {\n\tisRelative?: boolean;\n\tisHidden?: boolean;\n\tisRefreshingSpinner?: boolean;\n\tisNotUsingMargin?: boolean;\n}\n\nexport function Spinner(props: Props) {\n\treturn (\n\t\t<SpinnerContainer\n\t\t\tdata-testid=\"spinner\"\n\t\t\t$isRelative={props.isRelative}\n\t\t\t$isHidden={props.isHidden}\n\t\t\t$isRefreshingSpinner={props.isRefreshingSpinner}\n\t\t\t$isNotUsingMargin={props.isNotUsingMargin}\n\t\t>\n\t\t\t<svg className=\"spinner\" viewBox=\"0 0 20 20\">\n\t\t\t\t<circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"none\" strokeWidth=\"3\" />\n\t\t\t</svg>\n\t\t</SpinnerContainer>\n\t);\n}\n\nconst SpinnerContainer = styled.div<{\n\t$isRelative?: boolean;\n\t$isHidden?: boolean;\n\t$isRefreshingSpinner?: boolean;\n\t$isNotUsingMargin?: boolean;\n}>`\n\tdisplay: ${(props) => (props.$isHidden ? 'none' : 'initial')};\n\tposition: ${(props) => (props.$isRelative ? 'relative' : 'absolute')};\n\ttop: ${(props) => (props.$isRefreshingSpinner ? 'initial' : '0')};\n\tright: ${(props) => (props.$isRefreshingSpinner ? 'initial' : '0')};\n\twidth: ${token.spacing6};\n\theight: ${token.spacing6};\n\tmargin-right: ${(props) => (props.$isNotUsingMargin ? '0' : token.spacing3)};\n\tmargin-top: ${(props) => (props.$isNotUsingMargin ? '0' : token.spacing4)};\n\tbackground-color: #fff;\n\tcolor: rgba(0, 34, 51, 0.3);\n`;\n"],"names":["Spinner","props","jsx","SpinnerContainer","styled","token"],"mappings":";;;AAYO,SAASA,EAAQC,GAAc;AACrC,SACC,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,eAAY;AAAA,MACZ,aAAaF,EAAM;AAAA,MACnB,WAAWA,EAAM;AAAA,MACjB,sBAAsBA,EAAM;AAAA,MAC5B,mBAAmBA,EAAM;AAAA,MAEzB,4BAAC,OAAA,EAAI,WAAU,WAAU,SAAQ,aAChC,4BAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,QAAO,aAAY,KAAI,EAAA,CAC3D;AAAA,IAAA;AAAA,EAAA;AAGH;AAEA,MAAME,IAAmBC,EAAO;AAAA,YAMpB,CAACH,MAAWA,EAAM,YAAY,SAAS,SAAU;AAAA,aAChD,CAACA,MAAWA,EAAM,cAAc,aAAa,UAAW;AAAA,QAC7D,CAACA,MAAWA,EAAM,uBAAuB,YAAY,GAAI;AAAA,UACvD,CAACA,MAAWA,EAAM,uBAAuB,YAAY,GAAI;AAAA,UACzDI,EAAM,QAAQ;AAAA,WACbA,EAAM,QAAQ;AAAA,iBACR,CAACJ,MAAWA,EAAM,oBAAoB,MAAMI,EAAM,QAAS;AAAA,eAC7D,CAACJ,MAAWA,EAAM,oBAAoB,MAAMI,EAAM,QAAS;AAAA;AAAA;AAAA;"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { jsx as t, jsxs as F } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect as c } from "react";
|
|
3
|
+
import { styled as f } from "styled-components";
|
|
4
|
+
import { token as i } from "@bynder/design-system";
|
|
5
|
+
import { IconErrorOutline as N } from "@bynder/icons";
|
|
6
|
+
import { __ as m } from "./index2.js";
|
|
7
|
+
import { NoResults as I } from "./NoResults.js";
|
|
8
|
+
import { useAssetFilter as _ } from "./AssetFilterContext.js";
|
|
9
|
+
import { useConfig as w } from "./ConfigContext.js";
|
|
10
|
+
import { useSelectedAssetIds as D, useSelection as R } from "./SelectionContext.js";
|
|
11
|
+
import { Oops as M } from "./Oops.js";
|
|
12
|
+
import { ActiveFilters as P } from "./ActiveFilters.js";
|
|
13
|
+
import { pluralize as $ } from "./text.js";
|
|
14
|
+
import { AssetList as b } from "./AssetList.js";
|
|
15
|
+
import { DirectionSelect as j } from "./DirectionSelect.js";
|
|
16
|
+
import { FieldSelect as k } from "./FieldSelect.js";
|
|
17
|
+
import { Tooltip as z } from "./Tooltip.js";
|
|
18
|
+
import { useSearchStore as B } from "./useSearchStore.js";
|
|
19
|
+
import { useSimilaritySearchStore as H } from "./useSimilaritySearchStore.js";
|
|
20
|
+
function ce(e) {
|
|
21
|
+
const { data: s, isLoading: r, loadMore: g, hasNextPage: p, executeQuery: d } = e.connection, { setIsLoading: S, setSearch: a } = B(), l = w(), A = D(), { selectAssets: h, toggleAssets: v, setAllAssets: L } = R(), x = _(), {
|
|
22
|
+
isNLSSelected: E,
|
|
23
|
+
NLSSearchText: y,
|
|
24
|
+
isSelected: C
|
|
25
|
+
} = H();
|
|
26
|
+
if (c(() => {
|
|
27
|
+
r || S(!1);
|
|
28
|
+
}, [r]), c(() => {
|
|
29
|
+
s.tag !== "Failure" && L(u(s));
|
|
30
|
+
}, [s]), s.tag === "Failure")
|
|
31
|
+
return /* @__PURE__ */ t(M, { error: new Error(s.value), onRetry: d });
|
|
32
|
+
const o = s.value?.searchAssets?.assets?.totalCount ?? e.totalCount, T = () => {
|
|
33
|
+
x.clear(), a("assets", ""), a("collection", "");
|
|
34
|
+
}, n = !!(C || E && y);
|
|
35
|
+
return /* @__PURE__ */ t(
|
|
36
|
+
b,
|
|
37
|
+
{
|
|
38
|
+
assets: u(s),
|
|
39
|
+
count: o,
|
|
40
|
+
isLoading: r,
|
|
41
|
+
loadMore: g,
|
|
42
|
+
hasNextPage: p,
|
|
43
|
+
theme: l.theme,
|
|
44
|
+
selectionMode: l.selectionMode,
|
|
45
|
+
selectedAssetIds: A,
|
|
46
|
+
onSelect: h,
|
|
47
|
+
onToggle: v,
|
|
48
|
+
emptyStateElement: /* @__PURE__ */ t(I, { onReset: T }),
|
|
49
|
+
children: /* @__PURE__ */ F(O, { children: [
|
|
50
|
+
o !== void 0 && /* @__PURE__ */ t(U, { "data-testid": "assets-amount", children: $(o, m("{} asset"), m("{} assets")) }, o),
|
|
51
|
+
e.showActiveFilters && /* @__PURE__ */ t(P, {}),
|
|
52
|
+
/* @__PURE__ */ t(
|
|
53
|
+
k,
|
|
54
|
+
{
|
|
55
|
+
options: n ? ["NL_SEARCH"] : ["CREATED_AT", "PUBLISHED_AT", "UPDATED_AT", "NAME"]
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ t(j, { nlSearch: n }),
|
|
59
|
+
n && /* @__PURE__ */ t(
|
|
60
|
+
z,
|
|
61
|
+
{
|
|
62
|
+
text: `You cannot change the sorting criteria while a Visual Similarity filter
|
|
63
|
+
is being applied`,
|
|
64
|
+
position: "left",
|
|
65
|
+
margin: "left",
|
|
66
|
+
marginAmount: "spacing3",
|
|
67
|
+
children: /* @__PURE__ */ t(N, {})
|
|
68
|
+
}
|
|
69
|
+
)
|
|
70
|
+
] })
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function u(e) {
|
|
75
|
+
return e.tag === "Loading" && !e.value ? {
|
|
76
|
+
tag: "Loading",
|
|
77
|
+
value: void 0
|
|
78
|
+
} : e.tag === "Loading" ? {
|
|
79
|
+
tag: e.tag,
|
|
80
|
+
value: e.value?.searchAssets.assets.nodes
|
|
81
|
+
} : {
|
|
82
|
+
tag: e.tag,
|
|
83
|
+
value: e.value.searchAssets.assets.nodes
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const O = f.div`
|
|
87
|
+
display: flex;
|
|
88
|
+
justify-content: space-between;
|
|
89
|
+
align-items: center;
|
|
90
|
+
z-index: 10;
|
|
91
|
+
padding: ${i.spacing5} ${i.spacing5} ${i.spacing3} ${i.spacing5};
|
|
92
|
+
`, U = f.span`
|
|
93
|
+
color: rgba(0, 34, 51, 0.5);
|
|
94
|
+
flex-shrink: 0;
|
|
95
|
+
animation: fade-in-down 0.15s ease-out;
|
|
96
|
+
`;
|
|
97
|
+
export {
|
|
98
|
+
ce as StatefulAssetList
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=StatefulAssetList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatefulAssetList.js","sources":["../../src/views/asset/StatefulAssetList.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\nimport { IconErrorOutline } from '@bynder/icons';\nimport { __ } from '@src/localization';\nimport { NoResults } from '@src/common/components/NoResults';\nimport { useAssetFilter } from '@src/filter/AssetFilterContext';\nimport { Connection } from '@src/api/graphql.types';\nimport { useConfig } from '@src/app-config/ConfigContext';\nimport { useSelectedAssetIds, useSelection } from '@src/select/SelectionContext';\nimport { Oops } from '@src/error-handling/Oops';\nimport { ActiveFilters } from '@src/filter/active-filters/ActiveFilters';\nimport { pluralize } from '@src/utils/text';\nimport { Asset } from './asset.type';\nimport { AssetList } from './AssetList';\nimport { DirectionSelect } from '@src/order/DirectionSelect';\nimport { FieldSelect } from '@src/order/FieldSelect';\nimport { Tooltip } from '@src/common/components/Tooltip';\nimport { useSearchStore } from '@src/store/useSearchStore';\nimport { useSimilaritySearchStore } from '@src/store/useSimilaritySearchStore';\n\ninterface DataValue {\n\tsearchAssets: {\n\t\tassets: {\n\t\t\ttotalCount: number;\n\t\t\tnodes: Asset[];\n\t\t};\n\t};\n}\n\ninterface Props {\n\tconnection: Connection<DataValue>;\n\ttotalCount?: number;\n\tshowActiveFilters?: boolean;\n}\n\nexport function StatefulAssetList(props: Props) {\n\tconst { data, isLoading, loadMore, hasNextPage, executeQuery } = props.connection;\n\tconst { setIsLoading, setSearch } = useSearchStore();\n\tconst config = useConfig();\n\tconst selectedAssetIds = useSelectedAssetIds();\n\tconst { selectAssets, toggleAssets, setAllAssets } = useSelection();\n\tconst assetFilterState = useAssetFilter();\n\tconst {\n\t\tisNLSSelected,\n\t\tNLSSearchText,\n\t\tisSelected: isSimilaritySearchSelected,\n\t} = useSimilaritySearchStore();\n\n\tuseEffect(() => {\n\t\tif (!isLoading) {\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}, [isLoading]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\tuseEffect(() => {\n\t\tif (data.tag !== 'Failure') {\n\t\t\tsetAllAssets(getAssetNodes(data));\n\t\t}\n\t}, [data]); // eslint-disable-line react-hooks/exhaustive-deps\n\n\tif (data.tag === 'Failure') {\n\t\treturn <Oops error={new Error(data.value)} onRetry={executeQuery} />;\n\t}\n\n\tconst totalCount = data.value?.searchAssets?.assets?.totalCount ?? props.totalCount;\n\n\tconst onReset = () => {\n\t\tassetFilterState.clear();\n\t\tsetSearch('assets', '');\n\t\tsetSearch('collection', '');\n\t};\n\n\tconst isAISearchPerformed = Boolean(\n\t\tisSimilaritySearchSelected || (isNLSSelected && NLSSearchText),\n\t);\n\n\treturn (\n\t\t<AssetList\n\t\t\tassets={getAssetNodes(data)}\n\t\t\tcount={totalCount}\n\t\t\tisLoading={isLoading}\n\t\t\tloadMore={loadMore}\n\t\t\thasNextPage={hasNextPage}\n\t\t\ttheme={config.theme}\n\t\t\tselectionMode={config.selectionMode}\n\t\t\tselectedAssetIds={selectedAssetIds}\n\t\t\tonSelect={selectAssets}\n\t\t\tonToggle={toggleAssets}\n\t\t\temptyStateElement={<NoResults onReset={onReset} />}\n\t\t>\n\t\t\t<StatefulAssetListContainer>\n\t\t\t\t{totalCount !== undefined && (\n\t\t\t\t\t<StatefulAssetListCount data-testid=\"assets-amount\" key={totalCount}>\n\t\t\t\t\t\t{pluralize(totalCount, __('{} asset'), __('{} assets'))}\n\t\t\t\t\t</StatefulAssetListCount>\n\t\t\t\t)}\n\n\t\t\t\t{props.showActiveFilters && <ActiveFilters />}\n\n\t\t\t\t<FieldSelect\n\t\t\t\t\toptions={\n\t\t\t\t\t\tisAISearchPerformed\n\t\t\t\t\t\t\t? ['NL_SEARCH']\n\t\t\t\t\t\t\t: ['CREATED_AT', 'PUBLISHED_AT', 'UPDATED_AT', 'NAME']\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t\t<DirectionSelect nlSearch={isAISearchPerformed} />\n\t\t\t\t{isAISearchPerformed && (\n\t\t\t\t\t<Tooltip\n\t\t\t\t\t\ttext=\"You cannot change the sorting criteria while a Visual Similarity filter\n\t\t\t\t\t\t\tis being applied\"\n\t\t\t\t\t\tposition=\"left\"\n\t\t\t\t\t\tmargin=\"left\"\n\t\t\t\t\t\tmarginAmount=\"spacing3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconErrorOutline />\n\t\t\t\t\t</Tooltip>\n\t\t\t\t)}\n\t\t\t</StatefulAssetListContainer>\n\t\t</AssetList>\n\t);\n}\n\nfunction getAssetNodes(\n\tdata:\n\t\t| { tag: 'Loading'; value: undefined | null | DataValue }\n\t\t| { tag: 'Loaded'; value: DataValue },\n): { tag: 'Loading'; value: undefined | Asset[] } | { tag: 'Loaded'; value: Asset[] } {\n\tif (data.tag === 'Loading' && !data.value) {\n\t\treturn {\n\t\t\ttag: 'Loading',\n\t\t\tvalue: undefined,\n\t\t};\n\t} else if (data.tag === 'Loading') {\n\t\treturn {\n\t\t\ttag: data.tag,\n\t\t\tvalue: data.value?.searchAssets.assets.nodes,\n\t\t};\n\t}\n\n\treturn {\n\t\ttag: data.tag,\n\t\tvalue: data.value.searchAssets.assets.nodes,\n\t};\n}\n\nconst StatefulAssetListContainer = styled.div`\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tz-index: 10;\n\tpadding: ${token.spacing5} ${token.spacing5} ${token.spacing3} ${token.spacing5};\n`;\n\nconst StatefulAssetListCount = styled.span`\n\tcolor: rgba(0, 34, 51, 0.5);\n\tflex-shrink: 0;\n\tanimation: fade-in-down 0.15s ease-out;\n`;\n"],"names":["StatefulAssetList","props","data","isLoading","loadMore","hasNextPage","executeQuery","setIsLoading","setSearch","useSearchStore","config","useConfig","selectedAssetIds","useSelectedAssetIds","selectAssets","toggleAssets","setAllAssets","useSelection","assetFilterState","useAssetFilter","isNLSSelected","NLSSearchText","isSimilaritySearchSelected","useSimilaritySearchStore","useEffect","getAssetNodes","jsx","Oops","totalCount","onReset","isAISearchPerformed","AssetList","NoResults","StatefulAssetListContainer","StatefulAssetListCount","pluralize","__","ActiveFilters","FieldSelect","DirectionSelect","Tooltip","IconErrorOutline","styled","token"],"mappings":"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"}
|
package/Styles.css.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const e = ':host{font-family:SourceSansPro,Source Sans Pro,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";--fade-in-down: fade-in-down .15s ease-out}.translate-y-2\\/4{-webkit-transform:translateY(-50%);transform:translateY(-50%)}@-webkit-keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@-webkit-keyframes fade-in-down{0%{opacity:0;-webkit-transform:translateY(-2px);transform:translateY(-2px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fade-in-down{0%{opacity:0;-webkit-transform:translateY(-2px);transform:translateY(-2px)}to{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes border-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes border-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes border-dash{0%{stroke-dasharray:1,100;stroke-dashoffset:0}50%{stroke-dasharray:80,100;stroke-dashoffset:-20}to{stroke-dasharray:80,100;stroke-dashoffset:-48}}@keyframes border-dash{0%{stroke-dasharray:1,100;stroke-dashoffset:0}50%{stroke-dasharray:80,100;stroke-dashoffset:-20}to{stroke-dasharray:80,100;stroke-dashoffset:-48}}.transition-shadow{-webkit-transition:-webkit-box-shadow .1s linear;transition:-webkit-box-shadow .1s linear;transition:box-shadow .1s linear;transition:box-shadow .1s linear,-webkit-box-shadow .1s linear}.transition-transform{-webkit-transition:-webkit-transform .6s cubic-bezier(.175,.885,.32,1.15);transition:-webkit-transform .6s cubic-bezier(.175,.885,.32,1.15);transition:transform .6s cubic-bezier(.175,.885,.32,1.15);transition:transform .6s cubic-bezier(.175,.885,.32,1.15),-webkit-transform .6s cubic-bezier(.175,.885,.32,1.15)}.cv-root{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;background-color:#fff;font-family:SourceSansPro,Source Sans Pro,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;font-size:16px;color:#023c}.cv-root *,.cv-root *:before,.cv-root *:after{-webkit-box-sizing:inherit;box-sizing:inherit}.cv-container{overflow:hidden;width:100%;height:100%}.cv-container nav:last-of-type{-webkit-box-shadow:0 1px 0 0 rgba(0,34,51,.1),0 1px 6px 0 rgba(0,34,51,.1);box-shadow:0 1px #0022331a,0 1px 6px #0022331a}.cv-dropdown{position:fixed;border-width:1px;border-color:#0022331a;-webkit-animation:fade-in-down .15s ease-out;animation:fade-in-down .15s ease-out;margin-top:16px;border-radius:5px;-webkit-box-shadow:0 4px 10px 0 rgba(0,34,51,.1);box-shadow:0 4px 10px #0022331a;z-index:9999999;overflow-y:hidden;-webkit-transition:left .1s ease-out;transition:left .1s ease-out}.card-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-positive:1;flex-grow:1;-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-pack:center;justify-content:center;position:relative;padding-left:8px;padding-right:8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.max-h-400{max-height:400px}.max-w-600{max-width:600px}.flip-y{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.spinner{-webkit-animation:border-rotate 1s linear infinite;animation:border-rotate 1s linear infinite;z-index:2;position:absolute;top:50%;left:50%;margin:-10px 0 0 -10px;width:20px;height:20px}.spinner circle{stroke:currentColor;stroke-linecap:round;-webkit-animation:border-dash 1.5s ease-in-out infinite;animation:border-dash 1.5s ease-in-out infinite}::-ms-clear{display:none}.fa-lg{line-height:1.05em}.z-a-lot{z-index:999999}.z-a-lot-more{z-index:9999999}button:focus{outline:revert}';
|
|
2
|
+
export {
|
|
3
|
+
e as default
|
|
4
|
+
};
|
|
5
|
+
//# sourceMappingURL=Styles.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Styles.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
package/SwitchNLS.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsxs as l, jsx as i } from "react/jsx-runtime";
|
|
2
|
+
import r from "styled-components";
|
|
3
|
+
import { token as e, textStyles as s, TruncatedText as c, Switch as f } from "@bynder/design-system";
|
|
4
|
+
import { IconSmart as m } from "@bynder/icons";
|
|
5
|
+
import { __ as d } from "./index2.js";
|
|
6
|
+
const C = ({ isNLSSearchOn: n, setIsNLSSearchOn: o }) => {
|
|
7
|
+
const a = (t) => {
|
|
8
|
+
t && t.currentTarget !== t.target || (t?.stopPropagation(), o(!n));
|
|
9
|
+
}, g = () => {
|
|
10
|
+
o(!n);
|
|
11
|
+
};
|
|
12
|
+
return /* @__PURE__ */ l(
|
|
13
|
+
p,
|
|
14
|
+
{
|
|
15
|
+
onClick: a,
|
|
16
|
+
onKeyDown: (t) => {
|
|
17
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), a(t));
|
|
18
|
+
},
|
|
19
|
+
tabIndex: 0,
|
|
20
|
+
"data-testid": "switch-nls-container",
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ i(h, { children: /* @__PURE__ */ i(m, {}) }),
|
|
23
|
+
/* @__PURE__ */ l(u, { id: "labelId", children: [
|
|
24
|
+
/* @__PURE__ */ i(c, { children: d("Use natural language search") }),
|
|
25
|
+
/* @__PURE__ */ i(x, { children: /* @__PURE__ */ i(c, { children: d("Find images by describing them") }) })
|
|
26
|
+
] }),
|
|
27
|
+
/* @__PURE__ */ i(b, { children: /* @__PURE__ */ i(
|
|
28
|
+
f,
|
|
29
|
+
{
|
|
30
|
+
isChecked: n,
|
|
31
|
+
"aria-labelledby": "labelId",
|
|
32
|
+
onChange: g
|
|
33
|
+
}
|
|
34
|
+
) })
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
}, p = r.div`
|
|
39
|
+
display: flex;
|
|
40
|
+
|
|
41
|
+
align-items: flex-start;
|
|
42
|
+
margin: ${e.spacing3};
|
|
43
|
+
padding: ${e.spacing3};
|
|
44
|
+
background-color: #f3f2fd;
|
|
45
|
+
border-radius: ${e.radiusLarge};
|
|
46
|
+
|
|
47
|
+
&:hover {
|
|
48
|
+
background-color: #eeedfc;
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&:active {
|
|
53
|
+
background-color: #f3f2fd;
|
|
54
|
+
}
|
|
55
|
+
`, h = r.div`
|
|
56
|
+
flex: none;
|
|
57
|
+
margin-right: ${e.spacing4};
|
|
58
|
+
color: ${e.purple500};
|
|
59
|
+
`, u = r.div`
|
|
60
|
+
${s.uiTextM}
|
|
61
|
+
|
|
62
|
+
flex: 1;
|
|
63
|
+
min-width: 0;
|
|
64
|
+
font-weight: 400;
|
|
65
|
+
color: #031026;
|
|
66
|
+
`, x = r.div`
|
|
67
|
+
${s.uiTextS}
|
|
68
|
+
|
|
69
|
+
color: ${e.colorTextMuted};
|
|
70
|
+
`, b = r.div`
|
|
71
|
+
display: flex;
|
|
72
|
+
flex: none;
|
|
73
|
+
gap: ${e.spacing3};
|
|
74
|
+
align-items: center;
|
|
75
|
+
margin-left: ${e.spacing4};
|
|
76
|
+
`;
|
|
77
|
+
export {
|
|
78
|
+
C as SwitchNLS
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=SwitchNLS.js.map
|
package/SwitchNLS.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwitchNLS.js","sources":["../../src/search/SwitchNLS.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport { Switch, textStyles, token, TruncatedText } from '@bynder/design-system';\nimport { IconSmart } from '@bynder/icons';\nimport { __ } from '@src/localization';\n\ninterface Props {\n\tisNLSSearchOn: boolean;\n\tsetIsNLSSearchOn: React.Dispatch<React.SetStateAction<boolean>>;\n}\n\nexport const SwitchNLS = ({ isNLSSearchOn, setIsNLSSearchOn }: Props) => {\n\tconst toggleNLSAndFocusSpotlight = (event?: React.MouseEvent | React.KeyboardEvent) => {\n\t\t// Only proceed if the click was directly on the container, not on its children (especially the Switch)\n\t\tif (event && event.currentTarget !== event.target) {\n\t\t\treturn;\n\t\t}\n\n\t\tevent?.stopPropagation();\n\t\tsetIsNLSSearchOn(!isNLSSearchOn);\n\t};\n\n\tconst handleSwitchChange = () => {\n\t\tsetIsNLSSearchOn(!isNLSSearchOn);\n\t};\n\n\treturn (\n\t\t<ItemStyled\n\t\t\tonClick={toggleNLSAndFocusSpotlight}\n\t\t\tonKeyDown={(event) => {\n\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\ttoggleNLSAndFocusSpotlight(event);\n\t\t\t\t}\n\t\t\t}}\n\t\t\ttabIndex={0}\n\t\t\tdata-testid=\"switch-nls-container\"\n\t\t>\n\t\t\t<ThumbnailContainer>\n\t\t\t\t<IconSmart />\n\t\t\t</ThumbnailContainer>\n\n\t\t\t<Content id=\"labelId\">\n\t\t\t\t<TruncatedText>{__('Use natural language search')}</TruncatedText>\n\t\t\t\t<Subtext>\n\t\t\t\t\t<TruncatedText>{__('Find images by describing them')}</TruncatedText>\n\t\t\t\t</Subtext>\n\t\t\t</Content>\n\n\t\t\t<RightElements>\n\t\t\t\t<Switch\n\t\t\t\t\tisChecked={isNLSSearchOn}\n\t\t\t\t\taria-labelledby=\"labelId\"\n\t\t\t\t\tonChange={handleSwitchChange}\n\t\t\t\t/>\n\t\t\t</RightElements>\n\t\t</ItemStyled>\n\t);\n};\n\nconst ItemStyled = styled.div`\n\tdisplay: flex;\n\n\talign-items: flex-start;\n\tmargin: ${token.spacing3};\n\tpadding: ${token.spacing3};\n\tbackground-color: #f3f2fd;\n\tborder-radius: ${token.radiusLarge};\n\n\t&:hover {\n\t\tbackground-color: #eeedfc;\n\t\tcursor: pointer;\n\t}\n\n\t&:active {\n\t\tbackground-color: #f3f2fd;\n\t}\n`;\n\nconst ThumbnailContainer = styled.div`\n\tflex: none;\n\tmargin-right: ${token.spacing4};\n\tcolor: ${token.purple500};\n`;\n\nconst Content = styled.div`\n\t${textStyles.uiTextM}\n\n\tflex: 1;\n\tmin-width: 0;\n\tfont-weight: 400;\n\tcolor: #031026;\n`;\n\nconst Subtext = styled.div<{ $isDisabled?: boolean }>`\n\t${textStyles.uiTextS}\n\n\tcolor: ${token.colorTextMuted};\n`;\n\nconst RightElements = styled.div`\n\tdisplay: flex;\n\tflex: none;\n\tgap: ${token.spacing3};\n\talign-items: center;\n\tmargin-left: ${token.spacing4};\n`;\n"],"names":["SwitchNLS","isNLSSearchOn","setIsNLSSearchOn","toggleNLSAndFocusSpotlight","event","handleSwitchChange","jsxs","ItemStyled","jsx","ThumbnailContainer","IconSmart","Content","TruncatedText","__","Subtext","RightElements","Switch","styled","token","textStyles"],"mappings":";;;;;AAWO,MAAMA,IAAY,CAAC,EAAE,eAAAC,GAAe,kBAAAC,QAA8B;AACxE,QAAMC,IAA6B,CAACC,MAAmD;AAEtF,IAAIA,KAASA,EAAM,kBAAkBA,EAAM,WAI3CA,GAAO,gBAAA,GACPF,EAAiB,CAACD,CAAa;AAAA,EAChC,GAEMI,IAAqB,MAAM;AAChC,IAAAH,EAAiB,CAACD,CAAa;AAAA,EAChC;AAEA,SACC,gBAAAK;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,SAASJ;AAAA,MACT,WAAW,CAACC,MAAU;AACrB,SAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SAC1CA,EAAM,eAAA,GACND,EAA2BC,CAAK;AAAA,MAElC;AAAA,MACA,UAAU;AAAA,MACV,eAAY;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAAI,EAACC,GAAA,EACA,UAAA,gBAAAD,EAACE,GAAA,CAAA,CAAU,GACZ;AAAA,QAEA,gBAAAJ,EAACK,GAAA,EAAQ,IAAG,WACX,UAAA;AAAA,UAAA,gBAAAH,EAACI,GAAA,EAAe,UAAAC,EAAG,6BAA6B,EAAA,CAAE;AAAA,4BACjDC,GAAA,EACA,UAAA,gBAAAN,EAACI,KAAe,UAAAC,EAAG,gCAAgC,GAAE,EAAA,CACtD;AAAA,QAAA,GACD;AAAA,0BAECE,GAAA,EACA,UAAA,gBAAAP;AAAA,UAACQ;AAAA,UAAA;AAAA,YACA,WAAWf;AAAA,YACX,mBAAgB;AAAA,YAChB,UAAUI;AAAA,UAAA;AAAA,QAAA,EACX,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGH,GAEME,IAAaU,EAAO;AAAA;AAAA;AAAA;AAAA,WAIfC,EAAM,QAAQ;AAAA,YACbA,EAAM,QAAQ;AAAA;AAAA,kBAERA,EAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAY7BT,IAAqBQ,EAAO;AAAA;AAAA,iBAEjBC,EAAM,QAAQ;AAAA,UACrBA,EAAM,SAAS;AAAA,GAGnBP,IAAUM,EAAO;AAAA,GACpBE,EAAW,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAQfL,IAAUG,EAAO;AAAA,GACpBE,EAAW,OAAO;AAAA;AAAA,UAEXD,EAAM,cAAc;AAAA,GAGxBH,IAAgBE,EAAO;AAAA;AAAA;AAAA,QAGrBC,EAAM,QAAQ;AAAA;AAAA,gBAENA,EAAM,QAAQ;AAAA;"}
|
package/TagItem.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsxs as m, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { styled as n } from "styled-components";
|
|
3
|
+
import { token as s } from "@bynder/design-system";
|
|
4
|
+
import { Chip as l } from "./Chip.js";
|
|
5
|
+
import { useAssetFilter as r } from "./AssetFilterContext.js";
|
|
6
|
+
function x(t) {
|
|
7
|
+
const e = r(), i = e.tags.includes(t.tag.name);
|
|
8
|
+
function o() {
|
|
9
|
+
i ? e.removeTag(t.tag.name) : t.isLoading || e.addTag(t.tag.name);
|
|
10
|
+
}
|
|
11
|
+
return /* @__PURE__ */ m(
|
|
12
|
+
l,
|
|
13
|
+
{
|
|
14
|
+
loading: t.isLoading,
|
|
15
|
+
active: i,
|
|
16
|
+
onClick: o,
|
|
17
|
+
"data-testid": "tag-item",
|
|
18
|
+
children: [
|
|
19
|
+
/* @__PURE__ */ a(g, { children: t.tag.name }),
|
|
20
|
+
/* @__PURE__ */ a(c, { children: t.tag.assetCount })
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
t.tag.id
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
const g = n.span`
|
|
27
|
+
max-with: 128px;
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
text-overflow: ellipsis;
|
|
30
|
+
white-space: nowrap;
|
|
31
|
+
`, c = n.span`
|
|
32
|
+
color: rgba(0, 34, 51, 0.5);
|
|
33
|
+
margin-left: ${s.spacing3};
|
|
34
|
+
`;
|
|
35
|
+
export {
|
|
36
|
+
x as TagItem
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=TagItem.js.map
|
package/TagItem.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TagItem.js","sources":["../../src/filter/filters/tags/TagItem.tsx"],"sourcesContent":["import React from 'react';\nimport { styled } from 'styled-components';\nimport { token } from '@bynder/design-system';\nimport { Chip } from '../../../common/components/Chip';\nimport { useAssetFilter } from '../../AssetFilterContext';\nimport { Tag } from '../metaproperty/MetapropertyFilterContent';\n\nexport function TagItem(props: { tag: Tag; isLoading: boolean }) {\n\tconst assetFilterState = useAssetFilter();\n\n\tconst active = assetFilterState.tags.includes(props.tag.name);\n\n\tfunction handleClick() {\n\t\tif (active) {\n\t\t\tassetFilterState.removeTag(props.tag.name);\n\t\t} else if (!props.isLoading) {\n\t\t\tassetFilterState.addTag(props.tag.name);\n\t\t}\n\t}\n\n\treturn (\n\t\t<Chip\n\t\t\tkey={props.tag.id}\n\t\t\tloading={props.isLoading}\n\t\t\tactive={active}\n\t\t\tonClick={handleClick}\n\t\t\tdata-testid=\"tag-item\"\n\t\t>\n\t\t\t<ChipName>{props.tag.name}</ChipName>\n\t\t\t<ChipCount>{props.tag.assetCount}</ChipCount>\n\t\t</Chip>\n\t);\n}\n\nconst ChipName = styled.span`\n\tmax-with: 128px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n`;\n\nconst ChipCount = styled.span`\n\tcolor: rgba(0, 34, 51, 0.5);\n\tmargin-left: ${token.spacing3};\n`;\n"],"names":["TagItem","props","assetFilterState","useAssetFilter","active","handleClick","jsxs","Chip","jsx","ChipName","ChipCount","styled","token"],"mappings":";;;;;AAOO,SAASA,EAAQC,GAAyC;AAChE,QAAMC,IAAmBC,EAAA,GAEnBC,IAASF,EAAiB,KAAK,SAASD,EAAM,IAAI,IAAI;AAE5D,WAASI,IAAc;AACtB,IAAID,IACHF,EAAiB,UAAUD,EAAM,IAAI,IAAI,IAC9BA,EAAM,aACjBC,EAAiB,OAAOD,EAAM,IAAI,IAAI;AAAA,EAExC;AAEA,SACC,gBAAAK;AAAA,IAACC;AAAA,IAAA;AAAA,MAEA,SAASN,EAAM;AAAA,MACf,QAAAG;AAAA,MACA,SAASC;AAAA,MACT,eAAY;AAAA,MAEZ,UAAA;AAAA,QAAA,gBAAAG,EAACC,GAAA,EAAU,UAAAR,EAAM,IAAI,MAAK;AAAA,QAC1B,gBAAAO,EAACE,GAAA,EAAW,UAAAT,EAAM,IAAI,WAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAP5BA,EAAM,IAAI;AAAA,EAAA;AAUlB;AAEA,MAAMQ,IAAWE,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAOlBD,IAAYC,EAAO;AAAA;AAAA,gBAETC,EAAM,QAAQ;AAAA;"}
|