import { FetchResult, MutationResult } from "@apollo/client"; import { ConfirmButtonTransitionState } from "@dashboard/components/ConfirmButton"; import { UserPermissionFragment } from "@dashboard/graphql"; import { FilterElement, IFilter } from "./components/Filter"; import { MultiAutocompleteChoiceType } from "./components/MultiAutocompleteSelectField"; export interface UserError { field: string | null; message?: string | null; } export interface DialogProps { open: boolean; onClose: () => void; } export interface ListSettings { columns?: TColumn[]; rowNumber: number; } export enum ListViews { APPS_LIST = "APPS_LIST", ATTRIBUTE_LIST = "ATTRIBUTE_LIST", ATTRIBUTE_VALUE_LIST = "ATTRIBUTE_VALUE_LIST", CATEGORY_LIST = "CATEGORY_LIST", COLLECTION_LIST = "COLLECTION_LIST", CUSTOMER_LIST = "CUSTOMER_LIST", DRAFT_LIST = "DRAFT_LIST", NAVIGATION_LIST = "NAVIGATION_LIST", ORDER_LIST = "ORDER_LIST", ORDER_DETAILS_LIST = "ORDER_DETAILS_LIST", ORDER_DRAFT_DETAILS_LIST = "ORDER_DRAFT_DETAILS_LIST", PAGES_LIST = "PAGES_LIST", PAGE_TYPES_LIST = "PAGE_TYPES_LIST", PLUGINS_LIST = "PLUGIN_LIST", PRODUCT_LIST = "PRODUCT_LIST", PERMISSION_GROUP_LIST = "PERMISSION_GROUP_LIST", PRODUCT_TYPE_LIST = "PRODUCT_TYPE_LIST", SALES_LIST = "SALES_LIST", SHIPPING_METHODS_LIST = "SHIPPING_METHODS_LIST", STAFF_MEMBERS_LIST = "STAFF_MEMBERS_LIST", VOUCHER_LIST = "VOUCHER_LIST", WAREHOUSE_LIST = "WAREHOUSE_LIST", WEBHOOK_LIST = "WEBHOOK_LIST", TRANSLATION_ATTRIBUTE_VALUE_LIST = "TRANSLATION_ATTRIBUTE_VALUE_LIST", GIFT_CARD_LIST = "GIFT_CARD_LIST", } export interface ListProps { disabled: boolean; settings?: ListSettings; onUpdateListSettings?: >( key: T, value: ListSettings[T], ) => void; onListSettingsReset?: () => void; filterDependency?: FilterElement; } export interface PaginateListProps { pageInfo?: { hasNextPage: boolean; hasPreviousPage: boolean; }; onNextPage: () => void; onPreviousPage: () => void; } export interface SortPage { sort: Sort; onSort: (field: TSortKey, id?: string) => void; } /** * @param toggle Will be use to change status of item * @param isChecked Returns true for ids of chosen items * @param selected Number of chosen items. */ export interface ListActionsWithoutToolbar { toggle: (id: string) => void; toggleAll: (items: React.ReactNodeArray, selected: number) => void; isChecked: (id: string) => boolean; selected: number; } export type TabListActions = ListActionsWithoutToolbar & Record; export interface ListActions extends ListActionsWithoutToolbar { toolbar: React.ReactNode | React.ReactNodeArray; } export interface PageListProps extends ListProps { defaultSettings?: ListSettings; } export interface SearchProps { onSearchChange: (value: string) => void; } export interface SearchPageProps extends SearchProps { initialSearch: string; } export interface FilterPageProps extends FilterProps, SearchPageProps, TabPageProps { filterOpts: TOpts; } export interface FilterPagePropsWithPresets< TKeys extends string, TOpts extends {}, > extends FilterProps, SearchPageProps, FilterPresetsProps { filterOpts: TOpts; } export interface FilterProps { currencySymbol?: string; onFilterChange: (filter: IFilter) => void; onFilterAttributeFocus?: (id?: string) => void; } export interface FilterPresetsProps { selectedFilterPreset: number | undefined; filterPresets: string[]; onFilterPresetsAll: () => void; onFilterPresetChange: (id: number) => void; onFilterPresetUpdate: (name: string) => void; onFilterPresetDelete: (id: number) => void; onFilterPresetPresetSave: () => void; hasPresetsChanged: () => boolean; } export interface TabPageProps { currentTab: number | undefined; tabs: string[]; onAll: () => void; onTabChange: (tab: number) => void; onTabDelete: () => void; onTabSave: () => void; } export interface ChannelProps { selectedChannelId: string; } export interface PartialMutationProviderOutput< TData extends {} = {}, TVariables extends {} = {}, > { opts: MutationResult & MutationResultAdditionalProps; mutate: (variables: TVariables) => Promise>; } export interface Node { id: string; } export interface SlugNode { slug: string; } export interface TagNode { tag: string; } export type Pagination = Partial<{ after: string; before: string; }>; export type Dialog = Partial<{ action: TDialog; }>; export type ActiveTab = Partial<{ activeTab: TTab; }>; export type Filters = Partial< Record >; export type FiltersWithMultipleValues = Partial< Record >; export type FiltersAsDictWithMultipleValues = Partial< Record> >; export type FiltersWithKeyValueValues = Partial< Record >; export type Search = Partial<{ query: string; }>; export type SingleAction = Partial<{ id: string; }>; export type Sort = Partial<{ asc: boolean; sort: TSort; }>; export type BulkAction = Partial<{ ids: string[]; }>; export interface ReorderEvent { oldIndex: number; newIndex: number; } export type ReorderAction = (event: ReorderEvent) => void; export interface FetchMoreProps { loading: boolean; hasMore: boolean; totalCount?: number; onFetchMore: () => void; } export type TabActionDialog = "save-search" | "delete-search"; export interface UserPermissionProps { userPermissions: UserPermissionFragment[]; } export interface MutationResultAdditionalProps { status: ConfirmButtonTransitionState; } export interface KeyValue { key: string; value?: string; } export type MinMax = Record<"min" | "max", string>; export interface FilterOpts { active: boolean; value: T; } export interface AutocompleteFilterOpts extends Partial, Partial { choices: MultiAutocompleteChoiceType[]; displayValues: MultiAutocompleteChoiceType[]; } export type Ids = string[]; export enum StatusType { INFO = "info", ERROR = "error", WARNING = "warning", SUCCESS = "success", } export type RelayToFlat }> = Array< T["edges"][0]["node"] >;