@commercetools-frontend-extensions/change-history 8.38.0 → 8.39.1

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.
Files changed (23) hide show
  1. package/dist/commercetools-frontend-extensions-change-history.cjs.dev.js +907 -681
  2. package/dist/commercetools-frontend-extensions-change-history.cjs.prod.js +902 -676
  3. package/dist/commercetools-frontend-extensions-change-history.esm.js +906 -679
  4. package/dist/declarations/src/components/_types/change-history.d.ts +5 -0
  5. package/dist/declarations/src/components/change-history-list-connector/change-history-list-connector.d.ts +42 -0
  6. package/dist/declarations/src/components/change-history-list-connector/conversions.d.ts +49 -0
  7. package/dist/declarations/src/components/change-history-list-view/filter-definitions.d.ts +37 -0
  8. package/dist/declarations/src/components/search/filters-container/filter-configurations/filter-configurations.d.ts +36 -0
  9. package/dist/declarations/src/components/search/standard-filter-definitions/index.d.ts +1 -0
  10. package/dist/declarations/src/components/search/standard-filter-definitions/standard-filter-definitions.d.ts +24 -0
  11. package/dist/declarations/src/components/search/standard-filters/enum-filters/enum-filters.d.ts +9 -0
  12. package/dist/declarations/src/components/search/standard-filters/enum-filters/index.d.ts +1 -0
  13. package/dist/declarations/src/components/search/standard-filters/resource-change-filter/resource-change-filter.d.ts +16 -0
  14. package/dist/declarations/src/components/search/standard-filters/stores-filter/stores-filter.d.ts +12 -0
  15. package/dist/declarations/src/components/search/standard-filters/text-filter/index.d.ts +1 -0
  16. package/dist/declarations/src/components/search/standard-filters/text-filter/text-filter.d.ts +6 -0
  17. package/dist/declarations/src/constants/filters.d.ts +13 -7
  18. package/dist/declarations/src/constants/old-filters.d.ts +0 -5
  19. package/dist/declarations/src/hooks/use-search-query-state/types.d.ts +105 -0
  20. package/dist/declarations/src/types/filters-types.d.ts +152 -0
  21. package/dist/declarations/types/src/generated/ctp.d.ts +15067 -0
  22. package/dist/declarations/types/src/generated/mc.d.ts +604 -0
  23. package/package.json +15 -13
@@ -0,0 +1,5 @@
1
+ import { ChangeType, ResourceTypes, Source } from "../../../types/src/generated/change-history.js";
2
+ import { ValueOf } from "../../types/common-types.js";
3
+ export type TResourceTypes = ValueOf<typeof ResourceTypes>;
4
+ export type TChangeType = ValueOf<typeof ChangeType>;
5
+ export type TSource = ValueOf<typeof Source>;
@@ -0,0 +1,42 @@
1
+ import { ReactElement } from 'react';
2
+ import type { TCustomer, TLocalizedString } from "../../../types/src/generated/ctp.js";
3
+ import type { TOAuthClient } from "../../../types/src/generated/mc.js";
4
+ import type { TResourceType } from "../../constants/index.js";
5
+ import type { TSearchQuery } from "../../hooks/use-search-query-state/types.js";
6
+ import type { TALUsers } from "../../types/common-types.js";
7
+ import type { TConvertedChangeHistoryEntry } from "./conversions.js";
8
+ export type TApiClients = Record<TOAuthClient['id'], TOAuthClient['name']>;
9
+ export type TCustomers = Record<TCustomer['id'], TCustomer['email']>;
10
+ export type TLocalizedStringObj = Array<TLocalizedString> | null;
11
+ export type TLocalizedField = Record<string, string>;
12
+ export type TChangeHistoryListConnectorProps = {
13
+ canViewCustomers: boolean;
14
+ canViewDeveloperSettings: boolean;
15
+ children: (props: {
16
+ isLoading: boolean;
17
+ changeHistoryFetcher: {
18
+ history: {
19
+ total: number;
20
+ results: TConvertedChangeHistoryEntry[];
21
+ };
22
+ searchQuery: TSearchQuery;
23
+ };
24
+ currentRecordsFetcher: {
25
+ total: number;
26
+ };
27
+ members: TALUsers;
28
+ apiClients: TApiClients;
29
+ customers: TCustomers;
30
+ refetchChangeHistory: () => void;
31
+ }) => ReactElement;
32
+ projectKey: string;
33
+ resourceId?: string;
34
+ allowedResourceTypes: TResourceType[];
35
+ inContextEntity?: TResourceType;
36
+ searchQuery: TSearchQuery;
37
+ };
38
+ declare const ChangeHistoryListConnector: {
39
+ (props: TChangeHistoryListConnectorProps): ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
40
+ displayName: string;
41
+ };
42
+ export default ChangeHistoryListConnector;
@@ -0,0 +1,49 @@
1
+ import type { TLocalizedStringObj } from "./change-history-list-connector.js";
2
+ import { TFetchAllUsersOfOrganizationQuery, TFetchChangeHistoryQuery, TStore } from "../../../types/src/generated/change-history.js";
3
+ import { TCustomer, TFetchCustomersQueryQuery, TFetchStoresQueryQuery } from "../../../types/src/generated/ctp.js";
4
+ import { TFetchOAuthClientsQueryQuery } from "../../../types/src/generated/mc.js";
5
+ import { TALUsers } from "../../types/common-types.js";
6
+ import { TApiClients, TCustomers, TLocalizedField } from "./change-history-list-connector.js";
7
+ export type TStoreDataWithName = TStore & {
8
+ name?: TLocalizedField;
9
+ };
10
+ export type TChangeHistoryResult = TFetchChangeHistoryQuery['changeHistory']['results'][number];
11
+ export type TLabelData = TChangeHistoryResult['label'];
12
+ export type TLabelDataWithUpdatedCustomer = Omit<TLabelData, 'customer'> & {
13
+ customer?: TFetchCustomersQueryQuery['customers']['results'][number] | null;
14
+ };
15
+ type TStoresResults = TFetchStoresQueryQuery['stores']['results'];
16
+ type TFetchChangeHistoryChanges = TChangeHistoryResult['changes'][number];
17
+ export type TConvertedFetchChangeHistoryChanges = Omit<TFetchChangeHistoryChanges, 'customLineItemNameAllLocales' | 'lineItemNameAllLocales'> & {
18
+ customLineItem: TLocalizedStringObj;
19
+ asset?: {
20
+ name: TLocalizedStringObj;
21
+ };
22
+ lineItem?: TLocalizedStringObj | {
23
+ name: TLocalizedStringObj;
24
+ };
25
+ textLineItem?: {
26
+ name: TLocalizedStringObj;
27
+ };
28
+ };
29
+ type TStoreResult = TStoresResults[number];
30
+ export type TConvertedStoreResult = TStoreResult & {
31
+ name?: TLocalizedField;
32
+ };
33
+ export type TConvertedChangeHistoryEntry = {
34
+ label: TLabelData | TLabelDataWithUpdatedCustomer;
35
+ previousLabel: TLabelData | TLabelDataWithUpdatedCustomer;
36
+ changes: Array<TConvertedFetchChangeHistoryChanges | null>;
37
+ stores: Array<TConvertedStoreResult>;
38
+ } & Omit<TChangeHistoryResult, 'label' | 'previousLabel' | 'changes' | 'stores'>;
39
+ export type TChangeHistoryResponse = {
40
+ total?: number | null;
41
+ results: Array<TConvertedChangeHistoryEntry>;
42
+ };
43
+ export declare const gatherChangeHistoryFromGraphqlResponse: (changeHistoryData: TFetchChangeHistoryQuery, storesData?: TStoresResults, entityLabelCustomerData?: TEntityLabelCustomerData | null) => TChangeHistoryResponse;
44
+ export declare const gatherMembersFromGraphqlResponse: (data: TFetchAllUsersOfOrganizationQuery | undefined) => TALUsers;
45
+ export declare const gatherApiClientsFromGraphqlResponse: (data?: TFetchOAuthClientsQueryQuery) => TApiClients;
46
+ export type TEntityLabelCustomerData = Record<TCustomer['id'], Pick<TCustomer, 'id' | 'email' | 'companyName'>>;
47
+ export declare const gatherEntityLabelCustomerDataFromGraphqlResponse: (data: TFetchCustomersQueryQuery) => TEntityLabelCustomerData;
48
+ export declare const gatherCustomersFromGraphqlResponse: (data?: TFetchCustomersQueryQuery) => TCustomers;
49
+ export {};
@@ -0,0 +1,37 @@
1
+ import type { MessageDescriptor } from 'react-intl';
2
+ import { TOption } from '@commercetools-frontend/ui-kit';
3
+ import { TierLevels } from "../../../types/src/generated/change-history.js";
4
+ import { TResourceType } from "../../constants/index.js";
5
+ import { TALUsers, TIntl } from "../../types/common-types.js";
6
+ import { TAvailableFilters, TFilteredFilterDefinitions } from "../../types/filters-types.js";
7
+ import { TApiClients } from "../change-history-list-connector/change-history-list-connector.js";
8
+ export type TDisabledGroupTitleLabelProps = {
9
+ group: string;
10
+ groupTitleMessage: MessageDescriptor;
11
+ };
12
+ export type TOptionsWithDisabledForBasic = TOption & {
13
+ disabledForBasic?: boolean;
14
+ };
15
+ export declare const optionsGrouping: ({ options, tier, }: {
16
+ options: TOptionsWithDisabledForBasic[];
17
+ tier?: TierLevels | null | undefined;
18
+ }) => TOptionsWithDisabledForBasic[] | {
19
+ label: import("@emotion/react/jsx-runtime").JSX.Element;
20
+ value: TierLevels;
21
+ options: TOptionsWithDisabledForBasic[];
22
+ }[];
23
+ export declare const statusOptions: (intl: TIntl) => TOption[];
24
+ type TCreateFilterDefinitionProps = {
25
+ allowedResourceTypes: TResourceType[];
26
+ apiClients: TApiClients;
27
+ availableFilters: TAvailableFilters;
28
+ canViewBusinessUnits: boolean;
29
+ canViewCustomers: boolean;
30
+ canViewDeveloperSettings: boolean;
31
+ canViewStores: boolean;
32
+ intl: TIntl;
33
+ members: TALUsers;
34
+ tier: TierLevels;
35
+ };
36
+ declare const createFilterDefinitions: import("memoize-one").MemoizedFn<({ allowedResourceTypes, apiClients, availableFilters, canViewBusinessUnits, canViewCustomers, canViewDeveloperSettings, canViewStores, intl, members, tier, }: TCreateFilterDefinitionProps) => TFilteredFilterDefinitions>;
37
+ export default createFilterDefinitions;
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import { IntlShape } from 'react-intl';
3
+ import type { TFilterConfiguration } from '@commercetools-uikit/filters';
4
+ import type { TAppliedFilterValue } from '@commercetools-uikit/filters/dist/declarations/src/filter-menu';
5
+ import type { ReactElement, ReactNode } from 'react';
6
+ import type { TFilterKey, TFilterOperator, TResourceType } from "../../../../constants/index.js";
7
+ import type { TSearchQuery } from "../../../../hooks/use-search-query-state/types.js";
8
+ export type TOperatorOption = {
9
+ value: TFilterOperator;
10
+ label: ReactNode;
11
+ };
12
+ export type TALFilterValue = {
13
+ operator?: TFilterOperator;
14
+ appliedFilterValues: TAppliedFilterValue[];
15
+ };
16
+ export type TFilterValueState = Partial<Record<TFilterKey, TALFilterValue>>;
17
+ type TCommonFilterConfigProps = {
18
+ filterValue: TFilterValueState;
19
+ setFilterValue: React.Dispatch<React.SetStateAction<TFilterValueState>>;
20
+ searchQuery: TSearchQuery;
21
+ onUpdateSearch: (updatedSearchQuery?: Partial<TSearchQuery>) => void;
22
+ removeFilter: (key: TFilterKey) => void;
23
+ };
24
+ type TCreateFilterConfigurationsProps = {
25
+ intl: IntlShape;
26
+ allowedResourceTypes: TResourceType[];
27
+ commonFilterProps: TCommonFilterConfigProps;
28
+ };
29
+ export type TBaseCreateFilterConfigProps = TCommonFilterConfigProps & {
30
+ key: TFilterKey;
31
+ label: string;
32
+ tooltip?: ReactElement;
33
+ groupKey?: string;
34
+ };
35
+ export declare const createFilterConfigurations: ({ allowedResourceTypes, intl, commonFilterProps, }: TCreateFilterConfigurationsProps) => TFilterConfiguration[];
36
+ export {};
@@ -0,0 +1 @@
1
+ export * from "./standard-filter-definitions.js";
@@ -0,0 +1,24 @@
1
+ import { TOption } from '@commercetools-frontend/ui-kit';
2
+ import { TierLevels } from "../../../../types/src/generated/change-history.js";
3
+ import { TIntl } from "../../../types/common-types.js";
4
+ import { TFilterTypeToFilterDefinitionMap } from "../../../types/filters-types.js";
5
+ import { TOptionsWithDisabledForBasic } from "../../change-history-list-view/filter-definitions.js";
6
+ export type TCreateStandardFilterMapMeta = {
7
+ options?: TOptionsWithDisabledForBasic[];
8
+ isMulti?: boolean;
9
+ isSearchable?: boolean;
10
+ resources?: TOption[];
11
+ tier?: TierLevels;
12
+ };
13
+ export declare function createDateDefinitionsMap(intl: TIntl): TFilterTypeToFilterDefinitionMap;
14
+ export declare function createFilterTypeToDefinitionMap(intl: TIntl, meta: TCreateStandardFilterMapMeta): TFilterTypeToFilterDefinitionMap;
15
+ export declare function createTypeOfChangeDefinitionsMap(intl: TIntl, meta: TCreateStandardFilterMapMeta): TFilterTypeToFilterDefinitionMap;
16
+ export declare function createUserDefinitionsMap(intl: TIntl, meta: TCreateStandardFilterMapMeta): TFilterTypeToFilterDefinitionMap;
17
+ export declare function createToolOptionsDefinitionsMap(intl: TIntl, meta: TCreateStandardFilterMapMeta): TFilterTypeToFilterDefinitionMap;
18
+ export declare function createResourceChangeDefinitionsMap(intl: TIntl, meta: TCreateStandardFilterMapMeta): TFilterTypeToFilterDefinitionMap;
19
+ export declare function createApiClientDefinitionsMap(intl: TIntl, meta: TCreateStandardFilterMapMeta): TFilterTypeToFilterDefinitionMap;
20
+ export declare function createCustomerIdDefinitionsMap(intl: TIntl): TFilterTypeToFilterDefinitionMap;
21
+ export declare function createExcludePlatformChangesDefinitionsMap(intl: TIntl): TFilterTypeToFilterDefinitionMap;
22
+ export declare function createStoresDefinitionsMap(intl: TIntl): TFilterTypeToFilterDefinitionMap;
23
+ export declare function createBusinessUnitDefinitionsMap(intl: TIntl): TFilterTypeToFilterDefinitionMap;
24
+ export declare function createEntityIdDefinitionsMap(intl: TIntl): TFilterTypeToFilterDefinitionMap;
@@ -0,0 +1,9 @@
1
+ import { TFilterFieldComponentProps } from "../../../../types/filters-types.js";
2
+ import { TCreateStandardFilterMapMeta } from "../../standard-filter-definitions/index.js";
3
+ export type TEnumFilterValue<T> = {
4
+ value: T | T[];
5
+ };
6
+ export declare const createEnumFilter: <T extends string>({ options, isMulti, isSearchable, }: TCreateStandardFilterMapMeta) => {
7
+ ({ error, value, onUpdateFilter }: TFilterFieldComponentProps): import("@emotion/react/jsx-runtime").JSX.Element;
8
+ displayName: string;
9
+ };
@@ -0,0 +1 @@
1
+ export * from "./enum-filters.js";
@@ -0,0 +1,16 @@
1
+ import { TResourceChangeInputName, TResourceType } from "../../../../constants/index.js";
2
+ import { TFilterFieldComponentProps } from "../../../../types/filters-types.js";
3
+ import { TCreateStandardFilterMapMeta } from "../../standard-filter-definitions/index.js";
4
+ export type TResourceChangeFilterValue = {
5
+ resource: TResourceType | null;
6
+ change: TResourceChangeInputName | null;
7
+ };
8
+ export declare const isResourceChangeFilterValue: (input: any) => input is TResourceChangeFilterValue;
9
+ export type TResourceChangeFilterProps = TFilterFieldComponentProps & {
10
+ resources: TCreateStandardFilterMapMeta['resources'];
11
+ };
12
+ declare const ResourceChangeFilter: {
13
+ ({ resources, ...props }: TResourceChangeFilterProps): import("@emotion/react/jsx-runtime").JSX.Element;
14
+ displayName: string;
15
+ };
16
+ export default ResourceChangeFilter;
@@ -0,0 +1,12 @@
1
+ import { TFilterFieldComponentProps } from "../../../../types/filters-types.js";
2
+ export type TStoresFilterValue = Array<{
3
+ id: string;
4
+ key: string;
5
+ label: string;
6
+ value: string;
7
+ }>;
8
+ declare const StoresFilter: {
9
+ (props: TFilterFieldComponentProps): import("@emotion/react/jsx-runtime").JSX.Element;
10
+ displayName: string;
11
+ };
12
+ export default StoresFilter;
@@ -0,0 +1 @@
1
+ export * from "./text-filter.js";
@@ -0,0 +1,6 @@
1
+ import { TFilterFieldComponentProps } from "../../../../types/filters-types.js";
2
+ export type TTextFilterValue = string;
3
+ export declare const TextFilter: {
4
+ (props: TFilterFieldComponentProps): import("@emotion/react/jsx-runtime").JSX.Element;
5
+ displayName: string;
6
+ };
@@ -1,17 +1,23 @@
1
+ import { TDateFilterType } from "../hooks/use-search-query-state/types.js";
1
2
  import { ValueOf } from "../types/common-types.js";
3
+ export declare const quickFilterToday: TDateFilterType;
4
+ export declare const quickFilterYesterday: TDateFilterType;
5
+ export declare const quickFilterLast7Days: TDateFilterType;
6
+ export declare const quickFilterLast30Days: TDateFilterType;
7
+ export declare const quickFilterCustom: TDateFilterType;
2
8
  export declare const FILTER_KEY: {
3
- readonly API_CLIENT: "apiClientId";
9
+ readonly API_CLIENT: "clientId";
4
10
  readonly BUSINESS_UNIT: "businessUnit";
5
- readonly RESOURCE_CHANGE: "resourceChange";
6
- readonly CHANGE_TYPE: "changeType";
11
+ readonly CHANGES: "changes";
12
+ readonly CHANGE_TYPE: "type";
13
+ readonly CREATED_AT: "date";
14
+ readonly CREATED_BY: "userId";
7
15
  readonly CUSTOMER_ID: "customerId";
8
- readonly CREATED_AT: "createdAt";
9
- readonly RESOURCE_ID: "resourceId";
10
- readonly RESOURCE_TYPE: "resource.typeId";
11
16
  readonly EXCLUDE_PLATFORM_CHANGES: "excludePlatformInitiatedChanges";
12
17
  readonly IS_PLATFORM_CLIENT: "isPlatformClient";
18
+ readonly RESOURCE_ID: "resourceId";
19
+ readonly RESOURCE_TYPE: "resourceType";
13
20
  readonly STORES: "stores";
14
- readonly CREATED_BY: "createdBy.id";
15
21
  };
16
22
  export type TFilterKey = ValueOf<typeof FILTER_KEY>;
17
23
  export declare const FILTER_OPERATOR: {
@@ -26,11 +26,6 @@ export declare const FILTER_TYPES: {
26
26
  };
27
27
  export type TFilterTypeKeys = keyof typeof FILTER_TYPES;
28
28
  export type TFilterType = ValueOf<typeof FILTER_TYPES>;
29
- export declare const quickFilterToday = "today";
30
- export declare const quickFilterYesterday = "yesterday";
31
- export declare const quickFilterLast7Days = "last7Days";
32
- export declare const quickFilterLast30Days = "last30Days";
33
- export declare const quickFilterCustom = "custom";
34
29
  export declare const TOOL_OPTIONS: {
35
30
  readonly MERCHANT_CENTER: "MERCHANT_CENTER";
36
31
  readonly IMPEX: "IMPEX";
@@ -0,0 +1,105 @@
1
+ import type { TDataTableProps } from '@commercetools-frontend/ui-kit';
2
+ import type { TALFilterValue } from "../../components/search/filters-container/filter-configurations/filter-configurations.js";
3
+ import type { TFilterKey } from "../../constants/index.js";
4
+ import type { TExcludePlatformChangesFilterValue } from "../../types/filters-types.js";
5
+ import { TAppliedFilterValue } from '@commercetools-uikit/filters/dist/declarations/src/filter-menu';
6
+ import { TResourceChangeFilterValue } from "../../components/search/standard-filters/resource-change-filter/resource-change-filter.js";
7
+ import { TStoresFilterValue } from "../../components/search/standard-filters/stores-filter/stores-filter.js";
8
+ import { TTextFilterValue } from "../../components/search/standard-filters/text-filter/index.js";
9
+ import { FILTER_OPTION_KEYS, FILTER_TYPES, TColumns } from "../../constants/index.js";
10
+ import { TISODateString } from "../../types/common-types.js";
11
+ import { TApiClientFilterValue, TBusinessUnitFilterValue, TChangesFilterValue, TEntityTypeFilterValue, TModifiedByFilterValue, TSourceFilterValue } from "../../types/filters-types.js";
12
+ export type TDateRangeFilterValue = {
13
+ from: TISODateString;
14
+ to: TISODateString;
15
+ };
16
+ export type TDateFilterType = 'today' | 'yesterday' | 'last7Days' | 'last30Days' | 'custom';
17
+ export type TDateFilter = {
18
+ hasHours: boolean;
19
+ selectedFilterType: TDateFilterType;
20
+ type: 'range' | 'equalTo' | 'lessThan' | 'moreThan';
21
+ value?: TDateRangeFilterValue;
22
+ };
23
+ export type TSearchQuerySort = {
24
+ key: TColumns;
25
+ order: TDataTableProps['sortDirection'];
26
+ };
27
+ export type TOldFilters = {
28
+ [FILTER_OPTION_KEYS.API_CLIENT]?: Array<{
29
+ type: typeof FILTER_TYPES.equalTo;
30
+ value: TApiClientFilterValue;
31
+ }>;
32
+ [FILTER_OPTION_KEYS.BUSINESS_UNIT]?: Array<{
33
+ type: typeof FILTER_TYPES.equalTo;
34
+ value: TBusinessUnitFilterValue;
35
+ }>;
36
+ [FILTER_OPTION_KEYS.CHANGE]?: Array<{
37
+ type: typeof FILTER_TYPES.resourceChange;
38
+ value: TResourceChangeFilterValue;
39
+ }>;
40
+ [FILTER_OPTION_KEYS.CHANGE_TYPE]?: Array<{
41
+ type: typeof FILTER_TYPES.equalTo;
42
+ value: TChangesFilterValue;
43
+ }>;
44
+ [FILTER_OPTION_KEYS.CUSTOMER_ID]?: Array<{
45
+ type: typeof FILTER_TYPES.equalTo;
46
+ value: TTextFilterValue;
47
+ }>;
48
+ [FILTER_OPTION_KEYS.DATE_RANGE]: Array<TDateFilter>;
49
+ [FILTER_OPTION_KEYS.ENTITY_ID]?: Array<{
50
+ type: typeof FILTER_TYPES.equalTo;
51
+ value: TTextFilterValue;
52
+ }>;
53
+ [FILTER_OPTION_KEYS.ENTITY_TYPE]?: Array<{
54
+ type: typeof FILTER_TYPES.in | typeof FILTER_TYPES.equalTo | typeof FILTER_TYPES.missing | typeof FILTER_TYPES.missingIn;
55
+ value: TEntityTypeFilterValue;
56
+ }>;
57
+ [FILTER_OPTION_KEYS.EXCLUDE_PLATFORM_CHANGES]?: Array<{
58
+ type: typeof FILTER_TYPES.equalTo;
59
+ value: TExcludePlatformChangesFilterValue;
60
+ }>;
61
+ [FILTER_OPTION_KEYS.SOURCE]?: Array<{
62
+ type: typeof FILTER_TYPES.in;
63
+ value: TSourceFilterValue;
64
+ }>;
65
+ [FILTER_OPTION_KEYS.STORES]?: Array<{
66
+ type: typeof FILTER_TYPES.equalTo;
67
+ value: TStoresFilterValue;
68
+ }>;
69
+ [FILTER_OPTION_KEYS.MODIFIED_BY]?: Array<{
70
+ type: typeof FILTER_TYPES.equalTo;
71
+ value: TModifiedByFilterValue;
72
+ }>;
73
+ };
74
+ export type TALFilterValueWithoutLabels = Omit<TALFilterValue, 'appliedFilterValues'> & {
75
+ appliedFilterValues: Array<Omit<TAppliedFilterValue, 'label'>>;
76
+ };
77
+ export type TSearchQueryFilters = Partial<Record<TFilterKey, TALFilterValueWithoutLabels | TDateFilter>>;
78
+ export type TSearchQuery = {
79
+ filters: TOldFilters | TSearchQueryFilters;
80
+ page: number;
81
+ perPage: number;
82
+ sorting: TSearchQuerySort;
83
+ columns: TColumns[];
84
+ displaySettings: {
85
+ isCondensed: boolean;
86
+ isWrappingText: boolean;
87
+ };
88
+ searchText?: string;
89
+ };
90
+ export type TStoredSearchQuery = TSearchQuery & {
91
+ __version?: number;
92
+ };
93
+ export type TLocationState = {
94
+ search: string;
95
+ };
96
+ export type TUseSearchViewRouterStateSearchProps = {
97
+ storageSlice: string;
98
+ defaultSearchQuery: TSearchQuery;
99
+ };
100
+ export type TSetSearchQuery = (nextSearchQuery: TSearchQuery) => void;
101
+ export type TUseSearchViewRouterStateSearch = {
102
+ searchQuery: TSearchQuery;
103
+ getSearchQuery: () => TSearchQuery;
104
+ setSearchQuery: TSetSearchQuery;
105
+ };
@@ -0,0 +1,152 @@
1
+ import { type JSX } from 'react';
2
+ import { OptionProps } from 'react-select';
3
+ import type { TDateRangeFilterValue } from "../hooks/use-search-query-state/types.js";
4
+ import { TUser } from "../../types/src/generated/change-history.js";
5
+ import { TChangeType, TResourceTypes } from "../components/_types/change-history.js";
6
+ import { TEnumFilterValue } from "../components/search/standard-filters/enum-filters/index.js";
7
+ import { TResourceChangeFilterValue } from "../components/search/standard-filters/resource-change-filter/resource-change-filter.js";
8
+ import { TStoresFilterValue } from "../components/search/standard-filters/stores-filter/stores-filter.js";
9
+ import { TTextFilterValue } from "../components/search/standard-filters/text-filter/index.js";
10
+ import { FILTER_OPTION_KEYS, TFilterOptionKey, TFilterType, TFilterTypeKeys, TResourceType, TToolOptions } from "../constants/index.js";
11
+ import { TIntl, ValueOf } from "./common-types.js";
12
+ export type TAvailableFilter = {
13
+ key: TFilterOptionKey;
14
+ resources?: Array<TResourceType>;
15
+ };
16
+ export type TAvailableFilters = Array<TAvailableFilter>;
17
+ export type TAllFilterDefinitions = {
18
+ [key in ValueOf<typeof FILTER_OPTION_KEYS>]: TFilterConfig;
19
+ };
20
+ export type TFilteredFilterDefinitions = Partial<TAllFilterDefinitions>;
21
+ export type TFilterConfig = {
22
+ label: string;
23
+ filterTypes: TFilterTypeToFilterDefinitionMap;
24
+ isHidden?: boolean;
25
+ isSearchable?: boolean;
26
+ tooltip?: React.ReactNode | undefined;
27
+ disabledForBasic?: boolean;
28
+ };
29
+ export type TFilterTypeToFilterDefinitionMap = Partial<{
30
+ [key in TFilterType]: TFilterDefinition;
31
+ }>;
32
+ export type TFilterDefinition = {
33
+ filterComponent: React.ComponentType<TFilterFieldComponentProps> | ((props: TFilterFieldComponentProps) => JSX.Element);
34
+ tagComponent: React.ComponentType<TFilterFieldTagsProps> | ((props: TFilterFieldTagsProps) => JSX.Element);
35
+ label: string;
36
+ canBeAppliedMultipleTimes?: boolean;
37
+ isEmptyFilter?: () => boolean;
38
+ validator?: TValidatorFunction;
39
+ };
40
+ export type TFilterComponentProps = {
41
+ fieldName: string;
42
+ fieldFilters?: TFieldFilter;
43
+ filterConfig: TFilterConfig;
44
+ onAddFilterToField: (options: TAddFilterOptions) => void;
45
+ onRemoveFilterFromField: (options: TRemoveFilterOptions) => void;
46
+ onUpdateFilterForField: (options: TUpdateFilterOptions) => void;
47
+ onRemoveFilterTagFromField: (options: {
48
+ index: number;
49
+ fieldName: string;
50
+ }) => void;
51
+ onToggleEditMode: (forceIsToggled?: boolean) => void;
52
+ };
53
+ export type TFilterFieldComponentProps = {
54
+ value?: TFieldFilterValue;
55
+ error?: string;
56
+ onUpdateFilter: (value?: TFieldFilterValue | null) => void;
57
+ };
58
+ export type TFilterFieldTagsProps = {
59
+ fieldLabel: TFilterConfig['label'];
60
+ filterTypeLabel: TFilterDefinition['label'];
61
+ value: TFieldFilter[number]['value'];
62
+ onRemove: () => void;
63
+ onClick: () => void;
64
+ };
65
+ export type TDateError = {
66
+ from?: string;
67
+ to?: string;
68
+ };
69
+ export type TValidatorFunction = (filter: {
70
+ type: TFilterTypeKeys;
71
+ value: TFieldFilterValue;
72
+ }, intl: TIntl) => TDateError | string | null;
73
+ export interface ICustomOptionProps extends OptionProps<any, any> {
74
+ isDisabledForBasic?: boolean;
75
+ }
76
+ export type TFiltersProps = {
77
+ filterDefinitions: TFilteredFilterDefinitions;
78
+ filteredFields: TFilteredFields;
79
+ filtersListMaxMenuHeight?: number;
80
+ isEditMode: boolean;
81
+ hasChangesInFilters?: boolean;
82
+ isOrderCustomFieldLoading?: boolean;
83
+ enableCustomFilterStyle?: boolean;
84
+ onClearFiltersFromField?: Function;
85
+ onAddField: Function;
86
+ onUpdateQuickFilterForField?: (options: {
87
+ fieldName: string;
88
+ filter: TFilter;
89
+ }) => void;
90
+ onAddFilterToField: (options: TAddFilterOptions) => void;
91
+ onApplyFilters: (options: {
92
+ removeEmptyFilters: boolean;
93
+ }) => boolean;
94
+ onCancelFilterChanges: () => void;
95
+ onClearAll: () => void;
96
+ onRemoveFilterFromField: (options: TRemoveFilterOptions) => void;
97
+ onRemoveFilterTagFromField: (options: {
98
+ index: number;
99
+ fieldName: string;
100
+ }) => void;
101
+ onToggleEditMode: (forceIsToggled?: boolean) => void;
102
+ onUpdateFilterForField: (options: TUpdateFilterOptions) => void;
103
+ showApplyButton?: boolean;
104
+ showSaveActions?: boolean;
105
+ showOnClearAll?: boolean;
106
+ tagDelimiter?: string;
107
+ };
108
+ export type TApiClientFilterValue = TEnumFilterValue<string>;
109
+ export type TBusinessUnitFilterValue = {
110
+ label: string;
111
+ value: string;
112
+ };
113
+ export type TChangesFilterValue = TEnumFilterValue<TChangeType>;
114
+ export type TEntityTypeFilterValue = TEnumFilterValue<TResourceTypes>;
115
+ export type TExcludePlatformChangesFilterValue = {
116
+ value: ['excludeAll'] | null;
117
+ };
118
+ export type TSourceFilterValue = TEnumFilterValue<TToolOptions>;
119
+ export type TModifiedByFilterValue = TEnumFilterValue<TUser['id']>;
120
+ export type TFieldFilterValue = TApiClientFilterValue | TBusinessUnitFilterValue | TResourceChangeFilterValue | TChangesFilterValue | TEntityTypeFilterValue | TSourceFilterValue | TStoresFilterValue | TTextFilterValue | TDateRangeFilterValue | TExcludePlatformChangesFilterValue | null;
121
+ export type TFieldFilter = Array<{
122
+ type: TFilterTypeKeys;
123
+ value?: TFieldFilterValue;
124
+ error?: string;
125
+ }>;
126
+ export type TFilter = TFieldFilter[number];
127
+ export type TFilteredFields = {
128
+ [key in TFilterOptionKey]?: TFieldFilter;
129
+ };
130
+ type TBaseFilterOptions = {
131
+ fieldName: string;
132
+ index: number;
133
+ };
134
+ export type TAddFilterOptions = TBaseFilterOptions & {
135
+ filter: object;
136
+ };
137
+ export type TRemoveFilterOptions = TBaseFilterOptions;
138
+ export type TUpdateFilterOptions = TBaseFilterOptions & {
139
+ filter: object;
140
+ };
141
+ export type TAddFilterTypeOptions = {
142
+ filter: Pick<TFieldFilter[number], 'type' | 'value'>;
143
+ index: number;
144
+ };
145
+ export type TRemoveFilterTypeOptions = {
146
+ index: number;
147
+ };
148
+ export type TUpdateFilterTypeOptions = {
149
+ filter: Pick<TFieldFilter[number], 'type' | 'value'>;
150
+ index: number;
151
+ };
152
+ export {};