{"version":3,"sources":["../src/utils/error.ts","../src/types/constants.ts","../src/types/IFilter.ts","../src/utils/serialization.ts","../src/utils/filterutils.ts","../src/utils/orderutils.ts","../src/utils/params.ts","../src/list/GenericList.ts","../src/list/GenericListSettings.ts","../src/list/GenericCudList.ts","../src/list/GenericListHook.tsx","../src/list/GenericListCacheProvider.tsx","../src/list/GenericListCache.ts","../src/list/GenericListSettingsProvider.tsx","../src/list/SimpleListHook.tsx","../src/index.ts"],"sourcesContent":["/** Returns error message display when calling usePROVIDER at location outside PROVIDER context. */\r\nexport const providerErrorMessage = (provider: string) => `use${provider} must be used within a ${provider}Provider.`","export const PARAM_PAGE = \"page\";\r\nexport const PARAM_ORDER = \"order\";\r\nexport const PARAM_DELETED = \"deleted\";","export enum FilterOperator { eq = 'eq', ne = 'ne', contains = 'contains', gt = 'gt', ge = 'ge', lt = 'lt', le = 'le' }\r\n\r\nexport const FILTEROPERATORSSTRING = [FilterOperator.contains, FilterOperator.eq, FilterOperator.ne];\r\nexport const FILTEROPERATORSNUMBER = [FilterOperator.eq, FilterOperator.ne, FilterOperator.gt, FilterOperator.ge, FilterOperator.lt, FilterOperator.le];\r\nexport const FILTEROPERATORSDATE = [FilterOperator.eq, FilterOperator.ne, FilterOperator.gt, FilterOperator.ge, FilterOperator.lt, FilterOperator.le];\r\n\r\nexport enum FilterValueType { string, number, date, boolean }\r\n\r\n/** Call back method, called from within custom OnRenderCustomType */\r\nexport type OnSelectCustomValue = (value?: string, listId?: string) => void;\r\n\r\n/** Type for rendering custom filter */\r\nexport type OnRenderCustomType = (filter: IFilter, value?: string, onChange?: OnSelectCustomValue, listId?: string) => JSX.Element;\r\n\r\n/** Type for custom handling of deserialization of filter from given params. Should return filter to add to all filter and-wise. */\r\nexport type OnDeserializeCustom = (filter: IFilter, params: URLSearchParams, listId?: string) => string[] | undefined;\r\n\r\nexport interface IFilter {\r\n  /** Friendly display name fo filter. */\r\n  name: string;\r\n\r\n  /** Id used to represent selection in url. */\r\n  id: string;\r\n\r\n  /** Optional name of field for query in case it differs from @see id. */\r\n  field?: string;\r\n\r\n  /** Array of options for closed domain filters. If set filter will be presented as a closed domain, otherwise an open input value. */\r\n  options?: IFilterOption[];\r\n\r\n  /** Text to show as placeholder in input value. */\r\n  placeholderText?: string;\r\n\r\n  /** Selected operator to use for comparison. Defaults to eq. */\r\n  operator?: FilterOperator;\r\n\r\n  /** Available operators for comparison. */\r\n  operators?: FilterOperator[];\r\n\r\n  /** Optional value type. Needed for proper serialization to server and to determine type of input control to render. Defaults to string. */\r\n  valueType?: FilterValueType;\r\n\r\n  /** Hidden filter will be deserialized from params but are not visible. */\r\n  hidden?: boolean;\r\n\r\n  /** Set to true to make sure filter is initially collapsed (currently only supported for filters with @see options set and no value selected) */\r\n  collapsed?: boolean;\r\n\r\n  /** Set to true if this filter is to be used as search field in request to server. Only for fields that render as open input value. */\r\n  isSearch?: boolean;\r\n\r\n  /** Callback method to determine if filter is available. */\r\n  isAvailable?: (filter: IFilter, params: URLSearchParams, listId?: string) => boolean;\r\n\r\n  /** Callback method to handle filter in a custom way including rendering. */\r\n  renderCustom?: OnRenderCustomType;\r\n\r\n  /** Callback method to handle custom filter deserialization. */\r\n  deserializeCustom?: OnDeserializeCustom;\r\n}\r\n\r\nexport interface IFilterOption {\r\n  /** Unique identification. */\r\n  id: string;\r\n\r\n  /** Friendly name. */\r\n  name?: string;\r\n\r\n  /** Value associated with option. Used in combination with @see operator. */\r\n  value?: string | number | boolean;\r\n\r\n  /** Operator to be used with @see value. Defaults to equal (eq). */\r\n  operator?: FilterOperator;\r\n\r\n  /** Expression to override @see value and @see operator. */\r\n  expression?: string;\r\n}","import { PARAM_PAGE, PARAM_ORDER, PARAM_DELETED, IFilter, FilterOperator, FilterValueType } from \"../types\"\r\nimport { GenericList } from \"../list\"\r\nimport { serializeFilterValue, serializeFilterOperator, parseOrderExpression, fieldIdForOperator, getParamId } from \".\"\r\n\r\n/** Deserialize GenericList settings from given URLSearchParams. \r\n * @returns true if params have been updated. Caller is reposible to update params in state.\r\n */\r\nexport const deserializeListState = (list: GenericList, params: URLSearchParams): boolean => {\r\n  const initialstate = listState(list);\r\n  let paramsupdated = false;\r\n\r\n  deserializeDeleted(list, params);\r\n\r\n  if (deserializeFilters(list, params)) {\r\n    paramsupdated = true;\r\n  }\r\n\r\n  if (deserializeOrder(list, params)) {\r\n    paramsupdated = true;\r\n  }\r\n\r\n  if (deserializePage(list, params, initialstate)) {\r\n    paramsupdated = true;\r\n  }\r\n\r\n  return paramsupdated;\r\n}\r\n\r\n/** Current state of list used for state change detection */\r\nconst listState = (list: GenericList) => `f=${list.filter ?? ''}&o=${list.orderExpression}&s=${list.search ?? ''}&d=${list.deleted}`;\r\n\r\nconst deserializeOrder = (list: GenericList<unknown>, params: URLSearchParams) => {\r\n  const orderparamid = getParamId(PARAM_ORDER, list.id);\r\n  const ordervalue = params.get(orderparamid);\r\n\r\n  if (ordervalue) {\r\n    const [field, descending] = parseOrderExpression(ordervalue);\r\n\r\n    const order = list.orderList.find((order) => order.field === field && (order.descending === descending || (order.descending === undefined && descending === false)));\r\n\r\n    if (order && (!order.isAvailable || order.isAvailable(order, params, list.id))) {\r\n      list.setOrder(order);\r\n    } else {\r\n      // reset to default\r\n      params.delete(orderparamid);\r\n      list.setOrder(list.orderList?.find(o => o.default === true));\r\n      return true;\r\n    }\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nconst deserializeFilters = (list: GenericList<unknown>, params: URLSearchParams) => {\r\n  let paramsupdated = false;\r\n  let hassearch = false;\r\n\r\n  const filters: string[] = [];\r\n\r\n  list.filterList.forEach((filter: IFilter) => {\r\n    if (filter.deserializeCustom) {\r\n      const customfilters = filter.deserializeCustom(filter, params, list.id);\r\n\r\n      if (customfilters) {\r\n        filters.push(...customfilters);\r\n      }\r\n    } else {\r\n      const paramid = getParamId(filter.id, list.id);\r\n      const value = params.get(paramid);\r\n\r\n      if (value && value !== '') {\r\n        if (filter.isAvailable && !filter.isAvailable(filter, params, list.id)) {\r\n          params.delete(paramid);\r\n          params.delete(fieldIdForOperator(paramid));\r\n          paramsupdated = true;\r\n        } else if (filter.options) {\r\n          const option = filter.options.find((o) => o.id === value);\r\n\r\n          if (option) {\r\n            if (option.expression !== undefined && option.expression !== '') {\r\n              filters.push(option.expression);\r\n            } else if (option.value !== undefined && (typeof option.value === 'number' || typeof option.value === 'boolean' || option.value !== '')) {\r\n              filters.push(`${filter.field ?? filter.id} ${serializeFilterOperator(option.operator)} ${serializeFilterValue(option.value, filter.valueType)}`);\r\n            }\r\n          }\r\n        } else if (filter.isSearch === true) {\r\n          list.setSearch(value);\r\n          hassearch = true;\r\n        } else {\r\n          filters.push(`${filter.field ?? filter.id} ${serializeFilterOperator(operatorForFilter(filter, params, list.id))} ${serializeFilterValue(value, filter.valueType)}`);\r\n        }\r\n      }\r\n    }\r\n  });\r\n  list.setFilter(filters.length > 0 ? filters.join(' and ') : undefined/*list.filter*/);\r\n\r\n  if (!hassearch) {\r\n    list.setSearch(undefined);\r\n  }\r\n\r\n  return paramsupdated;\r\n}\r\n\r\nconst deserializePage = (list: GenericList, params: URLSearchParams, initialState: string) => {\r\n  const pageparamid = getParamId(PARAM_PAGE, list.id);\r\n  const page = params.get(pageparamid);\r\n\r\n  if (page && initialState === listState(list)) {\r\n    const p = parseInt(page, 10);\r\n\r\n    if (isNaN(p) || p === 1) {\r\n      if (list.page !== 1) {\r\n        list.setPage(1);\r\n\r\n        params.delete(pageparamid);\r\n        return true;\r\n      }\r\n    } else {\r\n      list.setPage(p);\r\n    }\r\n  } else if (list.page !== 1) {\r\n    list.setPage(1);\r\n\r\n    params.delete(pageparamid);\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n}\r\n\r\nconst deserializeDeleted = (list: GenericList<unknown>, params: URLSearchParams) => {\r\n  const paramid = getParamId(PARAM_DELETED, list.id);\r\n  const value = params.get(paramid);\r\n\r\n  list.setDeleted(params.has(paramid) && value !== 'false');\r\n}\r\n\r\nexport const operatorForFilter = (filter: IFilter, params: URLSearchParams, listId?: string) => {\r\n  if (filter.valueType === FilterValueType.boolean) {\r\n    return FilterOperator.eq;\r\n  } else {\r\n    const operatorvalue = params.get(fieldIdForOperator(getParamId(filter.id, listId)));\r\n\r\n    if (operatorvalue) {\r\n      const o = FilterOperator[operatorvalue as keyof typeof FilterOperator];\r\n\r\n      if (filter.operators && filter.operators.indexOf(o) !== -1) {\r\n        return o;\r\n      }\r\n    }\r\n\r\n    return filter.operator;\r\n  }\r\n}","import { FilterValueType, FilterOperator } from \"../types\"\r\n\r\n/** Serialize value for filter by adding quotes in case value type is string and value contains spaces. */\r\nexport const serializeFilterValue = (value: string | boolean | number, valueType?: FilterValueType) => {\r\n  if (typeof value === 'boolean' || typeof value === 'number') {\r\n    return value.toString()\r\n  } else if ((valueType === FilterValueType.string || valueType === undefined) && value.indexOf(' ') !== -1) {\r\n    return `\"${value}\"`\r\n  } else {\r\n    return value\r\n  }\r\n}\r\n\r\n/** Serialize operator for filter, default to eq. */\r\nexport const serializeFilterOperator = (operator?: FilterOperator) => FilterOperator[operator ?? FilterOperator.eq]\r\n\r\n/** Determine name for field to store operator for field with given id in (url) state. */\r\nexport const fieldIdForOperator = (id: string) => `${id}-o`","/** Parse order expression by splitting order field name and optional sort indicator. */\r\nexport const parseOrderExpression = (expression: string): [string, boolean] => {\r\n  const parts = expression.trim().split(/\\s+/);\r\n\r\n  if (parts.length > 0) {\r\n    return [parts[0].trim(), parts.length === 2 && parts[1].trim() === 'desc'];\r\n  } else {\r\n    return [expression.trim(), false];\r\n  }\r\n}","/** Returns given param id optionally prefixed with id of given list. */\r\nexport const getParamId = (id: string, listId?: string) => {\r\n  if (listId !== undefined && listId !== '') {\r\n    return `${listId}.${id}`\r\n  } else {\r\n    return id;\r\n  }\r\n}\r\n\r\n/** Get value for param with id optionally prefixed with id of given list. */\r\nexport const getParamValue = (id: string, params: URLSearchParams, listId?: string) => {\r\n  return params.get(getParamId(id, listId));\r\n}\r\n\r\n/** Returns true if given id starts with given listId, false otherwise. */\r\nexport const hasListPrefix = (id: string, listId: string) => {\r\n  return id.startsWith(`${listId}.`);\r\n}","import { action, computed, makeObservable, observable } from \"mobx\"\r\nimport type { IListResponse, FetchOptions, FetchSearchParams, IOrder, IFilter } from \"../types\"\r\nimport { GenericListSettings } from \"./GenericListSettings\"\r\n\r\nexport interface IGenericListConfiguration {\r\n  /** Optional unique id for this list. */\r\n  id?: string;\r\n\r\n  /** Endpoint to use for loading list of data. */\r\n  endpoint: string;\r\n\r\n  /** Endpoint to use for loading a single item. */\r\n  endpointGetSingle?: string;\r\n\r\n  /** Set in case this list required configuration for endpoint postfix. */\r\n  requiredEndpointPostfix?: boolean;\r\n\r\n  /** List with order options. */\r\n  orderList?: IOrder[];\r\n  \r\n  /** List with filter options. */\r\n  filterList?: IFilter[];\r\n\r\n  /** Page number for pagination. */\r\n  page?: number;\r\n\r\n  /** Page size for pagination. */\r\n  pageSize?: number;\r\n}\r\n\r\n/** Generic implementation to support lists from different endpoints supporting Knowmax LinqUtility ListRequest.\r\n *  Can be inherited or used in combination with GenericListHook, @see useList. */\r\nexport class GenericList<T = unknown> {\r\n\r\n  configuration: IGenericListConfiguration;\r\n\r\n  private _settingsUpdated: boolean = false;\r\n  private _loadOptions?: FetchOptions;\r\n\r\n  constructor(configuration: IGenericListConfiguration) {\r\n\r\n    makeObservable(this, {\r\n      ready: computed,\r\n      id: observable,\r\n      setId: action,\r\n      settings: observable,\r\n      setSettings: action,\r\n      loadingSingle: observable,\r\n      setLoadingSingle: action,\r\n      loaded: observable,\r\n      setLoaded: action,\r\n      loading: observable,\r\n      setLoading: action,\r\n      error: observable,\r\n      setError: action,\r\n      orderList: observable,\r\n      setOrderList: action,\r\n      order: observable,\r\n      setOrder: action,\r\n      orderExpression: computed,\r\n      deleted: observable,\r\n      setDeleted: action,\r\n      filterList: observable,\r\n      setFilterList: action,\r\n      filter: observable,\r\n      setFilter: action,\r\n      search: observable,\r\n      setSearch: action,\r\n      page: observable,\r\n      setPage: action,\r\n      pageSize: observable,\r\n      setPageSize: action,\r\n      list: observable,\r\n      setList: action,\r\n      totalCount: observable,\r\n      setTotalCount: action,\r\n      endpointPostFix: observable,\r\n      setEndpointPostFix: action,\r\n      hash: computed,\r\n      currentHash: observable,\r\n      setCurrentHash: action,\r\n      selectedItem: observable,\r\n      selectedItemTag: observable,\r\n      setSelectedItem: action,\r\n      load: action,\r\n      loadSingle: action\r\n    });\r\n\r\n    this.configuration = configuration;\r\n\r\n    this.id = configuration.id;\r\n    this.orderList = configuration.orderList ?? [];\r\n    this.order = configuration.orderList?.find(o => o.default === true);\r\n    this.filterList = configuration.filterList ?? [];\r\n\r\n    this.list = [];\r\n    this.page = configuration.page ?? 1;\r\n    this.pageSize = configuration.pageSize ?? 10;\r\n    this.totalCount = 0;\r\n  }\r\n\r\n  /** Set when this generic list is ready for use. Essentially this means settings configuration is ready. */\r\n  get ready() {\r\n    return this.settings.ready;\r\n  }\r\n\r\n  /** Unique id representing this list. Will be provided to methods from settings when called to determine active list. Optional due to backward compatibility. */\r\n  id: string | undefined;\r\n  setId(value?: string) {\r\n    this.id = value;\r\n  }\r\n\r\n  /** Settings for all generic lists. */\r\n  settings: GenericListSettings = new GenericListSettings();\r\n  /** Usually set from value provided GenericListSettinsProvider. */\r\n  setSettings(value: GenericListSettings) {\r\n    this._settingsUpdated = true;\r\n    this.settings = value;\r\n  }\r\n\r\n  /** Set while loading a single item */\r\n  loadingSingle: boolean = false;\r\n  setLoadingSingle(value: boolean) {\r\n    this.loadingSingle = value;\r\n  }\r\n\r\n  /** Set after initially loading data. */\r\n  loaded: boolean = false;\r\n  setLoaded(value: boolean) {\r\n    this.loaded = value;\r\n  }\r\n\r\n  /** Set while loading data. */\r\n  loading: boolean = false;\r\n  setLoading(value: boolean) {\r\n    this.loading = value;\r\n  }\r\n\r\n  error?: Error | string;\r\n  setError(value?: Error | string) {\r\n    this.error = value;\r\n  }\r\n\r\n  /** Available options for order. */\r\n  orderList: IOrder[];\r\n  setOrderList(value: IOrder[]) {\r\n    this.orderList = value;\r\n  }\r\n\r\n  /** Selected order expression. Set to IOrder from orderList or string order expression. */\r\n  order?: IOrder | string;\r\n  setOrder(value?: IOrder | string) {\r\n    this.order = value;\r\n  }\r\n\r\n  /** Server expression based on current order setting. */\r\n  get orderExpression() {\r\n    return this.order ? typeof this.order !== 'string' ? `${this.order.field}${this.order.descending === true ? ' desc' : ''}` : this.order : '';\r\n  }\r\n\r\n  deleted: boolean = false;\r\n  setDeleted(value: boolean) {\r\n    this.deleted = value;\r\n  }\r\n\r\n  /** List with all filter definitions available for this list. */\r\n  filterList: IFilter[];\r\n  setFilterList(value: IFilter[]) {\r\n    this.filterList = value;\r\n  }\r\n\r\n  /** Filter to use while loading data. */\r\n  filter?: string;\r\n  setFilter(value?: string) {\r\n    this.filter = value;\r\n  }\r\n\r\n  /** Query to be used while loading data. */\r\n  search?: string;\r\n  setSearch(value?: string) {\r\n    this.search = value;\r\n  }\r\n\r\n  /** Current selected page. 1-based. */\r\n  page: number;\r\n  setPage(value: number) {\r\n    this.page = value;\r\n  }\r\n\r\n  /** Number of items per page. */\r\n  pageSize: number;\r\n  setPageSize(value: number) {\r\n    this.pageSize = value;\r\n  }\r\n\r\n  /** List containing actual page of data. */\r\n  list: T[];\r\n  setList(value: T[]) {\r\n    this.list = value;\r\n  }\r\n\r\n  /** Total number of items available. */\r\n  totalCount: number;\r\n  setTotalCount(value: number) {\r\n    this.totalCount = value;\r\n  }\r\n\r\n  /** Will be used as post fix for currently configured endpoint. */\r\n  endpointPostFix?: string;\r\n  /** Set to postfix for current endpoint. For example the value \"abc\" will result in \"/abc\" postfix after currently configured endpoint.  */\r\n  setEndpointPostFix(value?: string) {\r\n    this.endpointPostFix = value;\r\n  }\r\n\r\n  /** Dynamic hash representing current state of component. Use as dependecy to trigger effects */\r\n  get hash() {\r\n    return `id=${this.id}&p=${this.page}&ps=${this.pageSize}&o=${this.orderExpression}&f=${this.filter}&s=${this.search}${this.deleted ? '&d=true' : ''}&t=${this.settings.token}&epf=${this.endpointPostFix}`;\r\n  }\r\n\r\n  /** Hash at the moment of last update of list with server data. */\r\n  currentHash?: string;\r\n  setCurrentHash(value: string) {\r\n    this.currentHash = value;\r\n  }\r\n\r\n  /** Set when hash was updated. Rather use hash as dependecy to trigger effects. */\r\n  get hashUpdated() {\r\n    return this.hash !== this.currentHash;\r\n  }\r\n\r\n  /** Set to selected item for specific purpose. */\r\n  selectedItem?: T;\r\n  /** Tag to identify purpose of selected item.. */\r\n  selectedItemTag?: string;\r\n  /** Selects item for specific purpose (not edit or delete). */\r\n  setSelectedItem(value?: T, tag?: string) {\r\n    this.selectedItem = value;\r\n    this.selectedItemTag = value ? tag : undefined;\r\n  }\r\n\r\n  /** Load current page of items.\r\n   * @param reload If true, will reload current page of items using original options used on inital load.\r\n   * @param options Options to use while loading data. If not provided, will use options used on inital load only in case of reload.\r\n   */\r\n  async load(reload: boolean = false, options?: FetchOptions) {\r\n    if (!this.settings.token || (this.configuration.requiredEndpointPostfix === true && (!this.endpointPostFix || this.endpointPostFix.trim() === ''))) {\r\n      this.setList([]);\r\n      this.setTotalCount(0);\r\n      this.setLoaded(false);\r\n    } else if (this.hashUpdated || reload) {\r\n      try {\r\n        try {\r\n          this.checkSettings();\r\n          this.setCurrentHash(this.hash);\r\n          this.setError(undefined);\r\n          this.setLoading(true);\r\n\r\n          // On reload use options from initial load in case no new options are provided.\r\n          if (reload && !options && this._loadOptions) {\r\n            options = this._loadOptions;\r\n          } else if (!reload) {\r\n            this._loadOptions = options;\r\n          }\r\n\r\n          const endpoint = (this.configuration.requiredEndpointPostfix === true && this.endpointPostFix && this.endpointPostFix.trim() !== '') ?\r\n            `${this.configuration.endpoint}/${this.endpointPostFix}` :\r\n            this.configuration.endpoint; const method = options?.method ?? 'post';\r\n\r\n          const searchparams: FetchSearchParams = Array.isArray(options?.searchParams)\r\n            ? [...options.searchParams]\r\n            : { ...(options?.searchParams as Record<string, string | number | boolean>) };\r\n\r\n          // Dynamically add deleted parameter if this.deleted is true\r\n          if (this.deleted) {\r\n            if (Array.isArray(searchparams)) {\r\n              (searchparams as Array<Array<string | number | boolean>>).push(['deleted', 'true']);\r\n            } else {\r\n              (searchparams as Record<string, string | number | boolean>).deleted = 'true';\r\n            }\r\n          }\r\n\r\n          const response = await this.settings.onFetch<IListResponse<T>>(endpoint, {\r\n            searchParams: searchparams,//options?.searchParams,\r\n            method: method,\r\n            headers: options?.headers ?? this.settings.onGetHeaders(this.settings.token, this.settings.language, undefined, this.id),\r\n            // Make sure we never post json when not post was specified as method\r\n            json: method === 'post' ? options?.json ?? {\r\n              count: true,\r\n              take: this.pageSize,\r\n              skip: (this.page - 1) * this.pageSize,\r\n              orderBy: this.orderExpression,\r\n              filter: this.filter,\r\n              search: this.search\r\n            } : undefined\r\n          }, this.id);\r\n\r\n          this.setList(response.value ?? []);\r\n          this.setTotalCount(response.count ?? 0);\r\n          this.setLoaded(true);\r\n        } catch (e) {\r\n          if (e instanceof Error) {\r\n            this.setError(e);\r\n          }\r\n          this.setLoaded(false);\r\n        }\r\n      } finally {\r\n        this.setLoading(false);\r\n      }\r\n    }\r\n  }\r\n\r\n  /** Load single item identified by id. \r\n   * @param id Id of item to load.\r\n   * @param options Options to use while loading data.\r\n   * @param endpoint Endpoint to use while loading data. If not provided, will use endpointGetSingle or endpoint from configuration.\r\n  */\r\n  async loadSingle(id: string | number, options?: FetchOptions, endpoint?: string) {\r\n    this.setError(undefined);\r\n\r\n    if (this.settings.token) {\r\n      try {\r\n        this.checkSettings();\r\n        this.setLoadingSingle(true);\r\n\r\n        try {\r\n          return await this.settings.onFetch<T>(`${endpoint ?? this.configuration.endpointGetSingle ?? this.configuration.endpoint}/${id}`, {\r\n            searchParams: options?.searchParams,\r\n            method: options?.method ?? 'get',\r\n            headers: options?.headers ?? this.settings.onGetHeaders(this.settings.token, this.settings.language, undefined, this.id)\r\n          }, this.id);\r\n        } catch (e) {\r\n          if (e instanceof Error) {\r\n            this.setError(e);\r\n          }\r\n        }\r\n      } finally {\r\n        this.setLoadingSingle(false);\r\n      }\r\n    }\r\n  }\r\n\r\n  private checkSettings() {\r\n    if (!this._settingsUpdated) {\r\n      console.warn(`Settings not set for generic list with endpoint ${this.configuration.endpoint}`)\r\n    }\r\n  }\r\n}","import { makeObservable, observable, action } from \"mobx\"\r\nimport type { FetchOptions } from \"../types\"\r\n\r\nexport type TranslationValues = Record<string, string | number>;\r\n\r\nexport type OnGetHeadersType = (token?: string, language?: string, headers?: any, listId?: string) => any;\r\nexport type OnFetchType = <T>(url: string, options?: FetchOptions, listId?: string) => Promise<T>;\r\nexport type OnErrorMessageType = (error: Error) => Promise<string>;\r\nexport type OnSerializeType = (params: URLSearchParams, settings: GenericListSettings, listId?: string) => void;\r\nexport type OnTranslateType = (key: string, values?: TranslationValues, listId?: string) => string;\r\n\r\n/** Responsible for all system settings in use for all generic lists. Allows system specific implementation of generic list components. */\r\nexport class GenericListSettings {\r\n\r\n  /** Never use directly. Always use getter. */\r\n  private _onFetch: OnFetchType = defaultFetch;\r\n  private _onFetchSet = false;\r\n\r\n  /** Never use directly. Always use getter. */\r\n  private _onTranslate: OnTranslateType = defaultTranslate;\r\n  private _onTranslateSet = false;\r\n\r\n  constructor() {\r\n    makeObservable(this, {\r\n      ready: observable,\r\n      setReady: action,\r\n      token: observable,\r\n      setToken: action,\r\n      language: observable,\r\n      setLanguage: action,\r\n      params: observable,\r\n      setParams: action\r\n    })\r\n  }\r\n\r\n  /** Set after required configuration of onFetch and onTranslate were made. */\r\n  ready: boolean = false;\r\n\r\n  /** Internally called after configuration of required settings was done. No need to call it externally. */\r\n  setReady(value: boolean) {\r\n    this.ready = value;\r\n  }\r\n\r\n  /** Set to required bearer token for use in authentication of fetch requests. */\r\n  token?: string;\r\n  setToken(value?: string) {\r\n    this.token = value;\r\n  }\r\n\r\n  /** Set to required language of user for use in fetch requests to get localized data from server. */\r\n  language?: string;\r\n  setLanguage(value?: string) {\r\n    this.language = value;\r\n  }\r\n\r\n  /** Contains current set of values components user for state. */\r\n  params: URLSearchParams = new URLSearchParams();\r\n  /** Set to current set of values for components to use for state. */\r\n  setParams(value: URLSearchParams) {\r\n    this.params = value;\r\n  }\r\n\r\n  /** Internally used to serialize params. By default set to internally maintained params. Override for custom onSerialize for custom serialization. */\r\n  serialize(params: URLSearchParams) {\r\n    this.onSerialize(params, this);\r\n  }\r\n\r\n  /** Used for fetching data from server. */\r\n  get onFetch() {\r\n    return this._onFetch;\r\n  }\r\n  set onFetch(value: OnFetchType) {\r\n    this._onFetch = value;\r\n    this._onFetchSet = true;\r\n    this.setReady(this._onFetchSet && this._onTranslateSet);\r\n  }\r\n\r\n  /** Used for translation of all language sensitive contents. */\r\n  get onTranslate() {\r\n    return this._onTranslate;\r\n  }\r\n  set onTranslate(value: OnTranslateType) {\r\n    this._onTranslate = value;\r\n    this._onTranslateSet = true;\r\n    this.setReady(this._onFetchSet && this._onTranslateSet);\r\n  }\r\n\r\n  /** Override to handle custom serialization of user settings like sorting, filtering and paging. */\r\n  onSerialize: OnSerializeType = defaultSerialize;\r\n\r\n  /** Override for custom implementation of header generation for fetch requests. */\r\n  onGetHeaders: OnGetHeadersType = defaultOnGetHeaders;\r\n\r\n  /** Override for custom implementation of error message extraction after for example fetch requests. */\r\n  onErrorMessage: OnErrorMessageType = defaultErrorMessage;\r\n}\r\n\r\n/** Default implementation for making fetch requests to server. Always needs to be overrriden with a custom implementation. */\r\nconst defaultFetch: OnFetchType = <T>(url: string, options?: FetchOptions): Promise<T> => {\r\n  return new Promise<T>((resolve, reject) => {\r\n    console.warn('onFetch not configured');\r\n    reject('not implemented');\r\n  });\r\n}\r\n\r\n/** Default implementation for handling translations. Always need to be overriden with a custom implementation. */\r\nconst defaultTranslate: OnTranslateType = (key: string, options?: TranslationValues) => {\r\n  console.warn('onTranslate not configured');\r\n  return key;\r\n}\r\n\r\n/** Default imnplementation of serialization of settings like sorting, filtering and paging made by user */\r\nconst defaultSerialize: OnSerializeType = (params: URLSearchParams, settings: GenericListSettings) => {\r\n  settings.setParams(params);\r\n}\r\n\r\n/** Default implementation to get headers for requests to server. */\r\nconst defaultOnGetHeaders: OnGetHeadersType = (token?: string, language?: string, headers?: any) => {\r\n  const h: any = headers ?? {};\r\n\r\n  if (token) {\r\n    h[\"Authorization\"] = \"Bearer \" + token;\r\n  }\r\n\r\n  if (language) {\r\n    h[\"Accept-Language\"] = language;\r\n  }\r\n\r\n  return h;\r\n}\r\n\r\n/** Default implementation to extract human readible error message from given Error object. */\r\nconst defaultErrorMessage: OnErrorMessageType = (error: Error) => {\r\n  return new Promise((resolve) => {\r\n    resolve(error.message)\r\n  });\r\n}","import { action, computed, observable, makeObservable } from 'mobx'\r\nimport { GenericList } from '.'\r\nimport type { IGenericListConfiguration } from '.'\r\n\r\nexport interface IGenericCudListConfiguration<ET> extends IGenericListConfiguration {\r\n  idField?: string;\r\n  nameField?: string;\r\n\r\n  /** Returns default item to use for new entries. */\r\n  defaultItem: () => ET;\r\n\r\n  /** Validate given item. Return boolean true for valid item or string error. */\r\n  validateItem?: (item: ET) => boolean | string;\r\n\r\n  /** Transform given item into item suitable for serialization to server. */\r\n  serverItem?: (item: ET) => unknown;\r\n\r\n  endpointPost?: string;\r\n  endpointPut?: string;\r\n  endpointDelete?: string;\r\n  endpointRestore?: string;\r\n}\r\n\r\nexport class GenericCudList<T, ET> extends GenericList<T> {\r\n\r\n  cudConfiguration: IGenericCudListConfiguration<ET>;\r\n\r\n  constructor(cudConfiguration: IGenericCudListConfiguration<ET>) {\r\n    super(cudConfiguration);\r\n\r\n    makeObservable(this, {\r\n      cudError: observable,\r\n      setCudError: action,\r\n      validationError: observable,\r\n      setValidationError: action,\r\n      hasCudOrValidationError: computed,\r\n      createError: computed,\r\n      updateError: computed,\r\n      deleteError: computed,\r\n      restoreError: computed,\r\n\r\n      editableItem: observable,\r\n      setEditableItem: action,\r\n      editableItemUnmodified: observable,\r\n      setEditableItemUnmodified: action,\r\n      deleteItem: observable,\r\n      setDeleteItem: action,\r\n      deletedItem: observable,\r\n      setDeletedItem: action,\r\n      createdItem: observable,\r\n      setCreatedItem: action,\r\n      restoreItem: observable,\r\n      setRestoreItem: action,\r\n      restoredItem: observable,\r\n      setRestoredItem: action,\r\n\r\n      create: action,\r\n      update: action,\r\n      delete: action,\r\n      restore: action,\r\n      cancel: action,\r\n      isCreate: computed,\r\n      isUpdate: computed,\r\n      isDelete: computed,\r\n      isRestore: computed,\r\n      isModified: computed,\r\n      isValidated: computed,\r\n\r\n      save: action,\r\n      deleteConfirmed: action,\r\n      restoreConfirmed: action,\r\n    });\r\n\r\n    this.cudConfiguration = cudConfiguration;\r\n  }\r\n\r\n  /** Set in case of Create Update Delete error. Prefer using specialized error fields per mode. */\r\n  cudError?: Error | string;\r\n  setCudError(value?: Error | string) {\r\n    this.cudError = value;\r\n  }\r\n\r\n  /** Might be set in case custom validation method returned error message. */\r\n  validationError?: string;\r\n  setValidationError(value?: string) {\r\n    this.validationError = value;\r\n  }\r\n\r\n  /** Set in case of CUD error or validation error (latter only when in update mode). */\r\n  get hasCudOrValidationError() {\r\n    return ((this.isCreate || this.isUpdate) && (this.cudError !== undefined)) ||\r\n      (this.isUpdate && this.validationError !== undefined)\r\n  }\r\n\r\n  /** Set after error in create mode. */\r\n  get createError() {\r\n    return (this.isCreate && this.cudError !== undefined) ? this.cudError : undefined;\r\n  }\r\n\r\n  /** Set after error in update mode. */\r\n  get updateError() {\r\n    return (this.isUpdate && this.cudError !== undefined) ? this.cudError : undefined;\r\n  }\r\n\r\n  /** Set after error in delete mode. */\r\n  get deleteError() {\r\n    return (this.isDelete && this.cudError !== undefined) ? this.cudError : undefined;\r\n  }\r\n\r\n  /** Set after error in restore mode. */\r\n  get restoreError() {\r\n    return (this.isRestore && this.cudError !== undefined) ? this.cudError : undefined;\r\n  }\r\n\r\n  /** Set to editable item when in create or update mode. */\r\n  editableItem?: ET;\r\n  setEditableItem(value?: ET) {\r\n    this.editableItem = value;\r\n\r\n    const validationerror = value !== undefined && this.cudConfiguration.validateItem && this.cudConfiguration.validateItem(value);\r\n    if (typeof validationerror === 'string') {\r\n      this.setValidationError(validationerror);\r\n    } else {\r\n      this.setValidationError(undefined);\r\n    }\r\n  }\r\n\r\n  /** Set to original editable item when starting update mode. */\r\n  editableItemUnmodified?: ET;\r\n  setEditableItemUnmodified(value?: ET) {\r\n    this.editableItemUnmodified = value;\r\n  }\r\n\r\n  /** Set to item when in delete mode. */\r\n  deleteItem?: T;\r\n  setDeleteItem(value?: T) {\r\n    this.deleteItem = value;\r\n  }\r\n\r\n  /** Set with data of just deleted item. */\r\n  deletedItem?: T;\r\n  setDeletedItem(value?: T) {\r\n    this.deletedItem = value;\r\n  }\r\n\r\n  /** Set with data of newly created item. */\r\n  createdItem?: T;\r\n  setCreatedItem(value?: T) {\r\n    this.createdItem = value;\r\n  }\r\n\r\n  /** Set to item when in restore mode. */\r\n  restoreItem?: T;\r\n  setRestoreItem(value?: T) {\r\n    this.restoreItem = value;\r\n  }\r\n\r\n  /** Set with data of just restored item. */\r\n  restoredItem?: T;\r\n  setRestoredItem(value?: T) {\r\n    this.restoredItem = value;\r\n  }\r\n  /** Start create mode for item. */\r\n  create = (template?: ET) => {\r\n    this.deleteItem = undefined;\r\n    this.restoreItem = undefined;\r\n    this.editableItem = template ?? this.cudConfiguration.defaultItem();\r\n    this.editableItemUnmodified = undefined;\r\n    this.cudError = undefined;\r\n    this.validationError = undefined;\r\n  }\r\n  /** Start update mode for given item. */\r\n  update(entity: ET | T) {\r\n    this.deleteItem = undefined;\r\n    this.restoreItem = undefined;\r\n    this.editableItem = { ...entity as ET };\r\n    this.editableItemUnmodified = { ...entity as ET };\r\n    this.cudError = undefined;\r\n    this.validationError = undefined;\r\n  }\r\n\r\n  /** Start delete mode for given item. */\r\n  delete(entity: T) {\r\n    this.editableItem = undefined;\r\n    this.editableItemUnmodified = undefined;\r\n    this.deleteItem = entity;\r\n    this.restoreItem = undefined;\r\n    this.cudError = undefined;\r\n    this.validationError = undefined;\r\n  }\r\n\r\n  /** Start restore mode for given item. */\r\n  restore(entity: T) {\r\n    this.editableItem = undefined;\r\n    this.editableItemUnmodified = undefined;\r\n    this.deleteItem = undefined;\r\n    this.restoreItem = entity;\r\n    this.cudError = undefined;\r\n    this.validationError = undefined;\r\n  }\r\n\r\n  /** Cancel any mode we are currently in (create, update, delete, restore). Using lambda syntax here so we can directly hook this method to onClick/onChange like events of user interface. */\r\n  cancel = () => {\r\n    this.editableItem = undefined;\r\n    this.editableItemUnmodified = undefined;\r\n    this.deleteItem = undefined;\r\n    this.restoreItem = undefined;\r\n    this.cudError = undefined;\r\n    this.validationError = undefined;\r\n  }\r\n\r\n  /** True if in create mode. */\r\n  get isCreate() {\r\n    return this.editableItem !== undefined && this.idForItem(this.editableItem) === undefined;\r\n  }\r\n\r\n  /** True if in update mode. */\r\n  get isUpdate() {\r\n    return this.editableItem !== undefined && this.idForItem(this.editableItem) !== undefined;\r\n  }\r\n\r\n  /** True if in delete mode. */\r\n  get isDelete() {\r\n    return this.deleteItem !== undefined;\r\n  }\r\n\r\n  /** True if in restore mode. */\r\n  get isRestore() {\r\n    return this.restoreItem !== undefined;\r\n  }\r\n\r\n  /** True is editable data was changed while in update mode. */\r\n  get isModified() {\r\n    return this.editableItemUnmodified === undefined || JSON.stringify(this.editableItemUnmodified) !== JSON.stringify(this.editableItem);\r\n  }\r\n\r\n  /** True if editable data contains valid data while in create or update mode. */\r\n  get isValidated() {\r\n    return this.editableItem && (!this.cudConfiguration.validateItem || this.cudConfiguration.validateItem(this.editableItem) === true);\r\n  }\r\n\r\n  /** Perform actual create or update operation of item set in create or update mode. */\r\n  async save() {\r\n    this.setCudError(undefined);\r\n    this.setCreatedItem(undefined);\r\n\r\n    if (this.settings.token && this.editableItem) {\r\n      try {\r\n        // Construct item specifically for server to prevent overposting of data not used by server\r\n        const serveritem = this.cudConfiguration.serverItem ?\r\n          this.cudConfiguration.serverItem(this.editableItem) :\r\n          { ...this.editableItem };\r\n\r\n        if (this.isCreate) {\r\n          const created = await this.settings.onFetch<T>(this.cudConfiguration.endpointPost ?? this.configuration.endpoint, {\r\n            method: 'post',\r\n            headers: this.settings.onGetHeaders(this.settings.token, this.settings.language, undefined, this.id),\r\n            json: serveritem\r\n          }, this.id);\r\n\r\n          this.cancel();\r\n          this.setCreatedItem(created);\r\n\r\n          return true;\r\n        } else if (this.isUpdate && this.idForItem(this.editableItem) !== undefined) {\r\n          await this.settings.onFetch(`${this.cudConfiguration.endpointPut ?? this.configuration.endpoint}/${this.idForItem(this.editableItem)}`, {\r\n            method: 'put',\r\n            headers: this.settings.onGetHeaders(this.settings.token, this.settings.language, undefined, this.id),\r\n            json: serveritem\r\n          }, this.id);\r\n\r\n          this.setEditableItemUnmodified({ ...this.editableItem });\r\n          return true;\r\n        }\r\n      } catch (e) {\r\n        if (e instanceof Error) {\r\n          this.setCudError(e);\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /** Perform actual delete operation of item previously set in delete mode. */\r\n  async deleteConfirmed() {\r\n    this.setCudError(undefined);\r\n\r\n    if (this.isDelete && this.deleteItem && this.settings.token) {\r\n      try {\r\n        await this.settings.onFetch(`${this.cudConfiguration.endpointDelete ?? this.configuration.endpoint}/${this.idForItem(this.deleteItem)}`, {\r\n          method: 'delete',\r\n          headers: this.settings.onGetHeaders(this.settings.token, this.settings.language, undefined, this.id),\r\n          // TODO: reintroduce retry\r\n          //retry: 0\r\n        }, this.id);\r\n\r\n        this.setDeletedItem(this.deleteItem);\r\n        this.cancel();\r\n        return true;\r\n      } catch (e) {\r\n        if (e instanceof Error) {\r\n          this.setCudError(e);\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /** Perform actual restore operation of item previously set in restore mode. */\r\n  async restoreConfirmed() {\r\n    this.setCudError(undefined);\r\n\r\n    if (this.isRestore && this.restoreItem && this.settings.token) {\r\n      try {\r\n        await this.settings.onFetch(`${this.cudConfiguration.endpointRestore ?? this.configuration.endpoint}/restore/${this.idForItem(this.restoreItem)}`, {\r\n          method: 'post',\r\n          headers: this.settings.onGetHeaders(this.settings.token, this.settings.language, undefined, this.id),\r\n          // TODO: reintroduce retry\r\n          //retry: 0\r\n        }, this.id);\r\n\r\n        this.setRestoredItem(this.restoreItem);\r\n        this.cancel();\r\n        return true;\r\n      } catch (e) {\r\n        if (e instanceof Error) {\r\n          this.setCudError(e);\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /** Return id of given item using settings provided in provided @see IGenericCudListConfiguration. */\r\n  idForItem(item: T | ET): string | number | undefined {\r\n    const idField = this.cudConfiguration.idField ?? 'id';\r\n    return this.getNestedProperty(item, idField);\r\n  }\r\n\r\n  /** Return name of given item using settings provided in provided @see IGenericCudListConfiguration. */\r\n  nameForItem(item: T | ET): string | number | undefined {\r\n    const nameField = this.cudConfiguration.nameField ?? 'name';\r\n    return this.getNestedProperty(item, nameField);\r\n  }\r\n\r\n  /** Helper function to get nested property values using dot notation (e.g., \"user.name.surname\"). */\r\n  private getNestedProperty(obj: any, path: string): string | number | undefined {\r\n    if (!obj || !path) {\r\n      return undefined;\r\n    }\r\n\r\n    // Split the path by dots and traverse the object\r\n    const keys = path.split('.');\r\n    let current = obj;\r\n\r\n    for (const key of keys) {\r\n      if (current === null || current === undefined || typeof current !== 'object') {\r\n        return undefined;\r\n      }\r\n      current = current[key];\r\n    }\r\n\r\n    // Return the final value if it's a string or number, otherwise undefined\r\n    return (typeof current === 'string' || typeof current === 'number') ? current : undefined;\r\n  }\r\n}","import { useEffect, useMemo } from \"react\"\r\nimport type { DependencyList } from \"react\"\r\nimport { deserializeListState } from \"../utils\"\r\nimport { useGenericListCache } from \"./GenericListCacheProvider\"\r\nimport { GenericList, useGenericListSettings } from '.'\r\nimport type { IGenericListConfiguration } from '.'\r\n\r\n/** \r\n * Generic hook for specified type and configuration. Attempts to cache lists using endpoint as key. \r\n * Automatically loads data, updates token and selected application.\r\n * \r\n * @param configuration - List configuration including endpoint and other settings\r\n * @param autoLoad - Whether to automatically load data when the list is created or dependencies change\r\n * @param cache - Whether to use caching. When true, lists are cached by endpoint/id key\r\n * @param dependencies - Optional custom dependencies. When any of these change, the cached list (if any) \r\n *                      will be removed and a fresh list instance will be created\r\n */\r\nexport const useList = <T extends object>(\r\n  configuration: IGenericListConfiguration,\r\n  autoLoad: boolean = true,\r\n  cache: boolean = true,\r\n  dependencies?: DependencyList\r\n): GenericList<T> => {\r\n  const listsettings = useGenericListSettings()\r\n  const listcache = useGenericListCache()\r\n\r\n  const list = useMemo(() => {\r\n    if (cache) {\r\n      const key = configuration.id ? `${configuration.id}:${configuration.endpoint}` : configuration.endpoint;\r\n\r\n      // If custom dependencies are provided, remove the existing cached list first\r\n      // to ensure we get a fresh instance when dependencies change\r\n      if (dependencies) {\r\n        listcache.remove(key);\r\n      }\r\n\r\n      return listcache.getOrCreate<T>(key, () => new GenericList<T>(configuration))\r\n    } else {\r\n      return new GenericList<T>(configuration)\r\n    }\r\n  }, [cache, configuration.endpoint, configuration.id, listcache, ...(dependencies || [])])\r\n\r\n  useEffect(() => {\r\n    list.setSettings(listsettings)\r\n  }, [list, listsettings])\r\n\r\n  useEffect(() => {\r\n    const params = new URLSearchParams(listsettings.params)\r\n    if (deserializeListState(list, params)) {\r\n      listsettings.serialize(params)\r\n    }\r\n  }, [list, listsettings.params])\r\n\r\n  useEffect(() => {\r\n    if (autoLoad) {\r\n      list.load()\r\n    }\r\n  }, [list.hash, list, autoLoad])\r\n\r\n  return list\r\n}","import { FunctionComponent, createContext, useContext, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { providerErrorMessage } from '../utils'\r\nimport { GenericListCache } from './GenericListCache'\r\n\r\nconst GenericListCacheContext = createContext<GenericListCache | null>(null)\r\n\r\nexport const useGenericListCache = (): GenericListCache => {\r\n  const store = useContext(GenericListCacheContext)\r\n\r\n  if (!store) {\r\n    throw new Error(providerErrorMessage('GenericListCache'))\r\n  }\r\n\r\n  return store\r\n}\r\n\r\nexport const GenericListCacheProvider: FunctionComponent<{ children?: React.ReactNode }> = observer(({ children }) => {\r\n  const genericlistcache = useMemo(() => new GenericListCache(10), [])\r\n\r\n  return (\r\n    <GenericListCacheContext.Provider value={genericlistcache}>\r\n      {children}\r\n    </GenericListCacheContext.Provider>\r\n  )\r\n})","import { GenericList } from '.'\r\n\r\ninterface ICacheItem {\r\n  key: string;\r\n  value: GenericList\r\n}\r\n\r\nexport class GenericListCache {\r\n  list: ICacheItem[] = [];\r\n  maxSize: number;\r\n\r\n  constructor(maxSize: number) {\r\n    this.maxSize = maxSize;\r\n  }\r\n\r\n  get<T>(key: string) {\r\n    const list = this.list.find((item) => item.key === key)?.value;\r\n\r\n    return list ? list as GenericList<T> : undefined;\r\n  }\r\n\r\n  getOrCreate<T>(key: string, creator: () => GenericList<T>) {\r\n    return (this.list.find((item) => item.key === key)?.value ?? this.set(key, creator)) as GenericList<T>;\r\n  }\r\n\r\n  set(key: string, creator: () => GenericList) {\r\n    const list = creator();\r\n    const index = this.list.findIndex((item) => item.key === key);\r\n\r\n    if (index !== -1) {\r\n      this.list[index].value = list;\r\n    } else {\r\n      if (this.list.length === this.maxSize) {\r\n        this.list.shift();\r\n      }\r\n      this.list.push({ key: key, value: list });\r\n    }\r\n\r\n    return list;\r\n  }\r\n\r\n  remove(key: string) {\r\n    const index = this.list.findIndex((item) => item.key === key);\r\n\r\n    if (index !== -1) {\r\n      this.list.splice(index, 1);\r\n    }\r\n  }\r\n}","import { FunctionComponent, createContext, useContext, useMemo } from 'react'\r\nimport { observer } from 'mobx-react-lite'\r\nimport { providerErrorMessage } from '../utils'\r\nimport { GenericListSettings } from './GenericListSettings'\r\nimport { GenericListCacheProvider } from './GenericListCacheProvider'\r\n\r\nconst GenericListSettingsContext = createContext<GenericListSettings | null>(null);\r\n\r\nexport const useGenericListSettings = (): GenericListSettings => {\r\n  const genericlistsettings = useContext(GenericListSettingsContext);\r\n\r\n  if (!genericlistsettings) {\r\n    throw new Error(providerErrorMessage('GenericListSettings'));\r\n  }\r\n\r\n  return genericlistsettings;\r\n}\r\n\r\n/** Wrap this around your application to be able to configure and use generic lists. \r\n * Also includes GenericListCacheProvider, so no need to wrap that around your application. */\r\nexport const GenericListSettingsProvider: FunctionComponent<{ children?: React.ReactNode }> = observer(({ children }) => {\r\n  const genericlistsettings = useMemo(() => new GenericListSettings(), []);\r\n\r\n  return (\r\n    <GenericListSettingsContext.Provider value={genericlistsettings}>\r\n      <GenericListCacheProvider>\r\n        {children}\r\n      </GenericListCacheProvider>\r\n    </GenericListSettingsContext.Provider>\r\n  )\r\n})","import { useEffect, useMemo, useState, useCallback } from \"react\"\r\nimport type { DependencyList } from \"react\"\r\nimport { headers, FetchError } from \"@knowmax/http-utils\"\r\nimport type { IListRequest, IListResponse } from \"../types\"\r\n\r\n/**\r\n * Configuration object for the useSimpleList hook.\r\n */\r\ntype TSimpleListConfiguration = {\r\n  /** The API endpoint URL to fetch data from */\r\n  endpoint: string\r\n  /** Bearer token for authentication */\r\n  token: string\r\n  /** Optional ordering specification (e.g., \"name ASC\", \"date DESC\") */\r\n  order?: string\r\n  /** Optional filter criteria for the query */\r\n  filter?: string\r\n  /** Whether to include total count in the response */\r\n  count?: boolean\r\n  /** Current page number (1-based, defaults to 1) */\r\n  page?: number\r\n  /** Number of items per page (defaults to 10) */\r\n  pageSize?: number\r\n  /** Optional search string for full-text search */\r\n  search?: string\r\n}\r\n\r\n/**\r\n * Return type for the useSimpleList hook.\r\n */\r\nexport interface ISimpleListHookResult<T> {\r\n  /** The fetched list response containing data and metadata */\r\n  result?: IListResponse<T>\r\n  /** Loading state indicator */\r\n  isLoading: boolean\r\n  /** Error object if the request failed */\r\n  error?: FetchError | Error\r\n  /** Http status code */\r\n  status?: number\r\n  /** Function to manually refetch the data */\r\n  refetch: () => Promise<void>\r\n}\r\n\r\n/**\r\n * A simplified React hook for fetching paginated list data from an API endpoint.\r\n * \r\n * This hook is designed as a lightweight alternative to the more complex `useList` hook,\r\n * providing essential list functionality without advanced features like caching, \r\n * state management, or CRUD operations.\r\n * \r\n * **Key Features:**\r\n * - Simple pagination support\r\n * - Automatic request abortion on unmount/dependency changes\r\n * - Built-in loading and error states\r\n * - TypeScript support with generic type parameter\r\n * - Manual refetch capability\r\n * \r\n * **Use Cases:**\r\n * - Read-only data lists\r\n * - Simple pagination scenarios\r\n * - When you don't need advanced caching or state management\r\n * - Lightweight components with minimal list requirements\r\n * \r\n * @template T - The type of objects in the list\r\n * @param configuration - Configuration object containing endpoint, authentication, and query parameters\r\n * @param dependencies - Optional React dependencies array to trigger refetch when values change\r\n * @returns An object containing the list result, loading state, error state, and refetch function\r\n * \r\n * @example\r\n * ```tsx\r\n * // Basic usage\r\n * const { result, isLoading, error, refetch } = useSimpleList<User>({\r\n *   endpoint: '/api/users',\r\n *   token: 'your-auth-token',\r\n *   pageSize: 20,\r\n *   page: 1\r\n * });\r\n * \r\n * // With filtering and ordering\r\n * const { result, isLoading, error } = useSimpleList<Product>({\r\n *   endpoint: '/api/products',\r\n *   token: authToken,\r\n *   filter: 'category eq \"electronics\"',\r\n *   order: 'name ASC',\r\n *   count: true\r\n * });\r\n * \r\n * // With dependencies\r\n * const [searchTerm, setSearchTerm] = useState('');\r\n * const { result, isLoading } = useSimpleList<Article>({\r\n *   endpoint: '/api/articles',\r\n *   token: authToken,\r\n *   filter: searchTerm ? `title contains \"${searchTerm}\"` : undefined\r\n * }, [searchTerm]);\r\n * ```\r\n * \r\n * @see {@link useList} for the full-featured alternative with caching and CRUD operations\r\n */\r\nexport const useSimpleList = <T extends Record<string, any>>(\r\n  configuration: TSimpleListConfiguration,\r\n  dependencies?: DependencyList\r\n): ISimpleListHookResult<T> => {\r\n  const [result, setResult] = useState<IListResponse<T> | undefined>(undefined)\r\n  const [isLoading, setIsLoading] = useState(false)\r\n  const [error, setError] = useState<FetchError | Error | undefined>(undefined)\r\n  const [status, setStatus] = useState<number | undefined>(undefined)\r\n\r\n  /**\r\n   * Internal function to fetch data from the API endpoint.\r\n   * Handles request building, authentication, error handling, and abort signals.\r\n   * \r\n   * @param abortSignal - Optional AbortSignal to cancel the request\r\n   */\r\n  const fetchData = useCallback(async (abortSignal?: AbortSignal) => {\r\n    if (configuration.token) {\r\n      try {\r\n        setIsLoading(true)\r\n        setError(undefined)\r\n\r\n        // Build request body with all parameters using strongly typed IListRequest\r\n        const requestBody: IListRequest = {\r\n          take: configuration.pageSize ?? 10,\r\n          skip: ((configuration.page ?? 1) - 1) * (configuration.pageSize ?? 10),\r\n          orderBy: configuration.order || '',\r\n          filter: configuration.filter,\r\n          search: configuration.search,\r\n          count: configuration.count ?? false\r\n        }\r\n\r\n        // Build headers with optional bearer token and JSON content type\r\n        const requestHeaders = headers().withContentTypeJson().withBearer(configuration.token)\r\n\r\n        const response = await fetch(configuration.endpoint, {\r\n          method: 'post',\r\n          headers: requestHeaders.export(),\r\n          body: JSON.stringify(requestBody),\r\n          signal: abortSignal\r\n        })\r\n\r\n        setStatus(response.status)\r\n\r\n        if (!response.ok) {\r\n          const errorData = await response.json().catch(() => undefined)\r\n          throw new FetchError(response, errorData)\r\n        }\r\n\r\n        const fetchedResult = await response.json() as IListResponse<T>\r\n\r\n        // Only update state if the request wasn't aborted\r\n        if (!abortSignal?.aborted) {\r\n          setResult(fetchedResult)\r\n        }\r\n      } catch (err) {\r\n        // Don't set error state if the request was aborted\r\n        if (err instanceof Error && err.name === 'AbortError') {\r\n          return\r\n        }\r\n\r\n        const errorInstance = err instanceof Error ? err : new Error('An unknown error occurred')\r\n        if (!abortSignal?.aborted) {\r\n          setError(errorInstance)\r\n          setResult(undefined)\r\n        }\r\n      } finally {\r\n        if (!abortSignal?.aborted) {\r\n          setIsLoading(false)\r\n        }\r\n      }\r\n    }\r\n  }, [configuration.endpoint, configuration.token, configuration.order, configuration.filter, configuration.page, configuration.pageSize])\r\n\r\n  /**\r\n   * Public function to manually trigger a data refetch.\r\n   * Useful for refreshing data after external changes or user actions.\r\n   */\r\n  const refetch = useCallback(async () => {\r\n    await fetchData()\r\n  }, [fetchData])\r\n\r\n  useEffect(() => {\r\n    const abortController = new AbortController()\r\n\r\n    fetchData(abortController.signal)\r\n\r\n    // Cleanup function to abort the request if component unmounts or dependencies change\r\n    return () => {\r\n      abortController.abort()\r\n    }\r\n  }, dependencies ? [fetchData, configuration.token, ...dependencies] : [fetchData])\r\n\r\n  return useMemo(() => ({\r\n    result,\r\n    isLoading,\r\n    error,\r\n    status,\r\n    refetch\r\n  }), [result, isLoading, error, status, refetch])\r\n}","// From MobX documentation. useDefineForClassFields in tsconfig must be set in order to allow MobX to work with class fields.\r\nif (!new class { x: any }().hasOwnProperty('x')) throw new Error('Transpiler is not configured correctly - required for MobX support');\r\n\r\nexport * from './utils'\r\nexport * from './list'\r\nexport * from './types'"],"mappings":"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","names":["FilterOperator","FilterValueType","order","action","makeObservable","observable","headers","makeObservable","observable","action","action","computed","observable","makeObservable","makeObservable","observable","action","computed","useMemo","useMemo","createContext","useContext","useMemo","observer","jsx","createContext","useContext","observer","useMemo","useEffect","useMemo"]}