{"version":3,"file":"webresto-ng-gql.mjs","sources":["../../projects/webresto/ng-gql/src/lib/models/captcha/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/customer/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/dish/dish-modal-form-validators.ts","../../projects/webresto/ng-gql/src/lib/models/image/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/modifier/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/group-modifier/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/dish/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/event-message/event-message.ts","../../projects/webresto/ng-gql/src/lib/models/event-message/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/generate-query-string.ts","../../projects/webresto/ng-gql/src/lib/models/get-uuid.ts","../../projects/webresto/ng-gql/src/lib/models/group/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/http-link-factory.ts","../../projects/webresto/ng-gql/src/lib/models/maintenance/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/navigation/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/ng-gql-config/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/order/order-form-validators.ts","../../projects/webresto/ng-gql/src/lib/models/order-dish/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/pickupPoint/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/order/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/payment-method/tokens.ts","../../projects/webresto/ng-gql/src/lib/models/user/tokens.ts","../../projects/webresto/ng-gql/src/lib/services/apollo.service.ts","../../projects/webresto/ng-gql/src/lib/services/ng-gql-storage.service.ts","../../projects/webresto/ng-gql/src/lib/services/request.service.ts","../../projects/webresto/ng-gql/src/lib/services/ng-gql-user-bus.service.ts","../../projects/webresto/ng-gql/src/lib/services/ng-gql-user.service.ts","../../projects/webresto/ng-gql/src/lib/services/ng-gql.service.ts","../../projects/webresto/ng-gql/src/lib/services/storage-wrapper.ts","../../projects/webresto/ng-gql/src/lib/services/ng-order.service.ts","../../projects/webresto/ng-gql/src/lib/interceptors/auth.interceptor.ts","../../projects/webresto/ng-gql/src/lib/interceptors/memory.interceptor.ts","../../projects/webresto/ng-gql/src/lib/interceptors/x-device-id.interceptor.ts","../../projects/webresto/ng-gql/src/lib/ng-gql.module.ts","../../projects/webresto/ng-gql/src/public-api.ts","../../projects/webresto/ng-gql/src/webresto-ng-gql.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {CaptchaJob} from './captcha';\n/**\n * InjectionToken с объектом ValuesOrBoolean<CaptchaJob>.\n */\nexport const CAPTCHA_GET_JOB_FRAGMENTS = new InjectionToken<ValuesOrBoolean<CaptchaJob>>(\n  'CAPTCHA_GET_JOB_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<CaptchaJob> => {\n      return {\n        id: true,\n        task: true,\n      };\n    },\n  },\n);\n","import {InjectionToken} from '@angular/core';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Phone} from './customer';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Phone>.\n */\nexport const PHONE_FRAGMENT = new InjectionToken<ValuesOrBoolean<Phone>>('PHONE_FRAGMENTS', {\n  factory: (): ValuesOrBoolean<Phone> => ({\n    number: true,\n    code: true,\n    additionalNumber: true,\n  }),\n});\n","import {AbstractControl, ValidationErrors} from '@angular/forms';\nimport {isValue} from '@axrl/common';\nimport {GroupModifier} from '../group-modifier';\nimport {Modifier} from '../modifier';\nimport {Dish} from './dish';\n\n/**\n * Checks that the number of selected child modifiers is within the allowed\n * range of the group modifier. Returns an error keyed by the group name if the\n * selected amount is invalid.\n */\n\nexport function groupModifierFormValidator(control: AbstractControl): ValidationErrors | null {\n  const value = <Partial<GroupModifier<Dish>>>control.value;\n  const groupAmount = value.childModifiers?.reduce(\n    (total, current) => total + (current.amount || 0),\n    0,\n  );\n  if (value.minAmount == 0 && value.maxAmount == 0) {\n    return null;\n  } else {\n    if (\n      isValue(value.group) &&\n      isValue(value.minAmount) &&\n      isValue(groupAmount) &&\n      isValue(value.group?.name) &&\n      groupAmount < value.minAmount\n    ) {\n      return {\n        [value.group.name]: `Нужно выбрать не менее ${value.minAmount} для этой опции.`,\n      };\n    } else {\n      if (\n        isValue(value.group) &&\n        isValue(value.group?.name) &&\n        isValue(groupAmount) &&\n        isValue(value.maxAmount) &&\n        groupAmount > value.maxAmount\n      ) {\n        return {\n          [value.group.name]:\n            `Можно добавить не более ${value.maxAmount} доп. опций. в этой группе опций.`,\n        };\n      } else {\n        return null;\n      }\n    }\n  }\n}\n\n/**\n * Validates a single modifier ensuring its amount is within the configured\n * minimum and maximum. Returns an error keyed by the dish name when the amount\n * is out of range.\n */\nexport function modifierFormValidator(control: AbstractControl): ValidationErrors | null {\n  const value = <Partial<Modifier<Dish>>>control.value;\n  const amount = value.amount || value.defaultAmount || 0;\n  if (value.minAmount == 0 && value.maxAmount == 0) {\n    return null;\n  } else {\n    if (\n      isValue(value.dish) &&\n      isValue(value.dish.name) &&\n      isValue(value.minAmount) &&\n      amount < value.minAmount\n    ) {\n      return {\n        [value.dish.name]: `Нужно выбрать не менее ${value.minAmount} для этой опции.`,\n      };\n    } else {\n      if (\n        isValue(value.dish) &&\n        isValue(value.dish.name) &&\n        isValue(value.maxAmount) &&\n        amount > value.maxAmount\n      ) {\n        return {\n          [value.dish.name]: `Можно добавить не более ${value.maxAmount} таких доп. опций.`,\n        };\n      } else {\n        return null;\n      }\n    }\n  }\n}\n","import {InjectionToken} from '@angular/core';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Image} from './image';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Image>, используемым в запросе Image с сервера.\n */\n\nexport const IMAGE_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Image>>('IMAGE_FRAGMENTS', {\n  factory: () => ({id: true, uploadDate: true, variant: true}),\n});\n","import {inject, InjectionToken} from '@angular/core';\nimport {IMAGE_FRAGMENTS} from '../image';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Modifier} from './modifier';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Modifier>, используемым в запросе Modifier с сервера.\n */\n\nexport const MODIFIER_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Modifier>>(\n  'MODIFIER_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<Modifier> => {\n      const imageFragments = inject(IMAGE_FRAGMENTS);\n      return {\n        maxAmount: true,\n        minAmount: true,\n        defaultAmount: true,\n        dish: {\n          id: true,\n          rmsId: true,\n          name: true,\n          description: true,\n          price: true,\n          weight: true,\n          balance: true,\n          tags: true,\n          groupId: true,\n          parentGroup: {\n            id: true,\n            slug: true,\n            dishesPlaceholder: imageFragments,\n          },\n          images: imageFragments,\n        },\n      };\n    },\n  },\n);\n","import {InjectionToken, inject} from '@angular/core';\nimport {MODIFIER_FRAGMENTS} from '../modifier';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {GroupModifier} from './group-modifier';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<GroupModifier>, используемым в запросе GroupModifier с сервера.\n */\nexport const GROUP_MODIFIER_FRAGMENTS = new InjectionToken<ValuesOrBoolean<GroupModifier>>(\n  'GROUP_MODIFIER_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<GroupModifier> => {\n      const modifierFragments = inject(MODIFIER_FRAGMENTS);\n      return {\n        maxAmount: true,\n        minAmount: true,\n        required: true,\n        childModifiers: modifierFragments,\n        group: {\n          id: true,\n          name: true,\n        },\n      };\n    },\n  },\n);\n","import {InjectionToken, inject} from '@angular/core';\nimport {GROUP_MODIFIER_FRAGMENTS} from '../group-modifier';\nimport {IMAGE_FRAGMENTS} from '../image';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Dish} from './dish';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Dish>, используемым в запросе блюд.\n */\nexport const DISH_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Dish>>('DISH_FRAGMENTS', {\n  factory: (): ValuesOrBoolean<Dish> => {\n    const imageFragments = inject(IMAGE_FRAGMENTS);\n    const groupModifierFragments = inject(GROUP_MODIFIER_FRAGMENTS);\n    return {\n      customData: true,\n      id: true,\n      rmsId: true,\n      name: true,\n      slug: true,\n      description: true,\n      price: true,\n      weight: true,\n      balance: true,\n      sortOrder: true,\n      tags: true,\n      additionalInfo: true,\n      carbohydrateAmount: true,\n      carbohydrateFullAmount: true,\n      energyAmount: true,\n      discountAmount: true,\n      discountType: true,\n      energyFullAmount: true,\n      fatAmount: true,\n      fatFullAmount: true,\n      fiberAmount: true,\n      fiberFullAmount: true,\n      measureUnit: true,\n      images: imageFragments,\n      modifiers: groupModifierFragments,\n      groupId: true,\n      parentGroup: {\n        id: true,\n        slug: true,\n        dishesPlaceholder: imageFragments,\n      },\n      salePrice: true,\n      seoDescription: true,\n      seoKeywords: true,\n      seoText: true,\n      seoTitle: true,\n      notForSale: true,\n    };\n  },\n});\n","import {DialogBoxConfig} from './dialog-box';\n\nexport class EventMessage {\n  type: string;\n  title: string;\n  body: string;\n\n  constructor(type: string, title: string, body: string) {\n    this.type = type;\n    this.title = title;\n    this.body = body;\n  }\n}\n\nexport interface Message {\n  id: string;\n  title: string;\n  type: 'info' | 'error' | 'warn';\n  message: string;\n}\n\nexport type Action =\n  | {\n      id: string;\n      type: string;\n      data: any;\n    }\n  | {\n      id: string;\n      type: 'Redirect';\n      data: {\n        link: string;\n      };\n    }\n  | {\n      id: string;\n      type: 'dialog-box';\n      data: {\n        askId: string;\n        answerId: string | null;\n        deviceId: string;\n        config: DialogBoxConfig;\n      };\n    };\n","import {InjectionToken} from '@angular/core';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Action, Message} from './event-message';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Message>, используемым в запросе Message с сервера.\n */\nexport const MESSAGE_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Message>>('MESSAGE_FRAGMENTS', {\n  factory: (): ValuesOrBoolean<Message> => ({id: true, type: true, title: true, message: true}),\n});\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Action>, используемым в запросе Action с сервера.\n */\nexport const ACTION_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Action>>('ACTION_FRAGMENTS', {\n  factory: (): ValuesOrBoolean<Action> => ({id: true, data: true, type: true}),\n});\n","import {isValue, objectEntries, objectKeys} from '@axrl/common';\n\n/**\n * @alias VCriteria\n * Обобщенный тип для объекта criteria, передаваемого в качестве параметра для некоторых запросов к серверу GraphQL.\n * Формируется по правилам Waterline query language.\n * Подробнее: https://docs.webresto.org/docs/data/criteria/\n */\nexport type VCriteria = {\n  /** Объект Waterline query language*/\n  criteria: Record<string, any>;\n};\n\n/**\n * @alias GQLRequestVariables\n * Тип, описывающий необязательный обьект переменных-параметров запроса к серверу GraphQL API, ключи которого , описаны для запроса в схеме GraphQL сервера, с соответствующими им значениями.\n * В качестве ключей выступают строки, соответствующие названиям параметров.\n * Значения - соответствующие им значения, при этом значения должны принадлежать типам number, string, object или boolean\n *\n */\nexport type GQLRequestVariables =\n  | Record<string, number | string | Object | boolean | null | undefined>\n  | VCriteria;\n\nfunction makeFieldList<T extends {} | string | boolean | number | bigint | Symbol | null, V>(\n  source: T,\n  name: string,\n  indent: number = 1,\n  variables?: V,\n): string {\n  const indentString = new Array<string>(indent * 2).fill(' ').join('');\n  const isObjectWithProperties =\n    typeof source === 'object' && isValue(source) && objectKeys(source).length > 0;\n\n  return `${name}${\n    indent === 1 && variables\n      ? `(${objectKeys(variables)\n          .filter(key => isValue(variables[key]))\n          .map(key => `${String(key)}:$${String(key)}`)\n          .join(',')})`\n      : ''\n  } ${isObjectWithProperties ? '  {\\n' : ''} ${indentString}${\n    isObjectWithProperties\n      ? objectEntries(source)\n          .filter(entry => typeof entry[1] !== 'function' && entry[0] !== '__typename')\n          .map(([entry0, entry1]) =>\n            typeof entry1 === 'object' && entry1 !== undefined && entry1 !== null\n              ? makeFieldList(\n                  Array.isArray(entry1) && entry1[0] ? entry1[0] : entry1,\n                  String(entry0),\n                  indent + 1,\n                )\n              : typeof entry1 === 'string' && entry1.includes('Fragment')\n              ? `${String(entry0)} : {...${entry1}}`\n              : String(entry0),\n          )\n          .join(`,\\n  ${indentString}`)\n      : ''\n  }\\n${indentString} ${isObjectWithProperties ? '}' : ''}      `;\n}\n\n/**\n * @function generateQueryString()\n * Функция - генератор строки запроса к серверу GraphQL.\n * @param options - объект с данными, необходимыми для формирования запроса, где:\n * @param options.name - название операции, объвленное в схеме сервера GraphQL.\n * @param options.queryObject - объект-источник информации о структуре запрашиваемых данных\n * @param options.variables - необязательный объект с переменными, передаваемыми в качестве параметров запроса. В качестве типа\n *    параметров допустимо использовать типы - number, string, object или boolean.\n * @param options.requiredFields - необязательный массив названий ключей параметров запроса, для которых в схеме был установлен обязательный тип\n * КРОМЕ ключей, для которых названия типов передаются в `options.fieldsTypeMap`.\n *    (например у параметра указан тип String!, а не String).\n * @param options.fieldsTypeMap - необязательный объект Map, в качестве ключей содержащий названия параметров запроса,\n * а в качестве значения - строку с названием его типа, определенного в схеме сервера GraphQL.\n * ВАЖНО! - строка также должна включать символ \"!\", если в схеме параметр определен как обязательный.\n * @returns часть строки запроса к серверу GraphQL для переданной операции N с параметрами? перечисленными в V.\n *  НЕ ВКЛЮЧАЕТ начало, содержащее ключевое слово query, mutation или subscription\n */\nexport function generateQueryString<\n  T extends {} | string | boolean | number | bigint | Symbol | null,\n  N extends `${string}`,\n  GQLRequestVariables,\n>(options: {\n  name: N;\n  queryObject: T;\n  variables?: GQLRequestVariables;\n  requiredFields?: Array<keyof GQLRequestVariables>;\n  fieldsTypeMap?: Map<keyof GQLRequestVariables, string>;\n}): string {\n  const {name, queryObject, variables} = options;\n\n  const getGqlType = <K extends keyof GQLRequestVariables>(\n    key: K,\n    value: GQLRequestVariables[K],\n    optionalField: boolean = false,\n    fieldsTypeMap?: Map<keyof GQLRequestVariables, string>,\n  ): string => {\n    switch (true) {\n      case isValue(fieldsTypeMap) && fieldsTypeMap.has(key):\n        return fieldsTypeMap?.get(key)!;\n      case typeof value === 'number':\n        return optionalField ? 'Int!' : 'Int';\n      case typeof value === 'string':\n        return optionalField ? 'String!' : 'String';\n      case typeof value === 'boolean':\n        return optionalField ? 'Boolean!' : 'Boolean';\n      case typeof value === 'object':\n        return optionalField ? 'Json!' : 'Json';\n      default:\n        throw new Error('Параметр должен принадлежать типам number, string, object или boolean');\n    }\n  };\n\n  return ` load${name[0].toUpperCase() + name.slice(1)} ${\n    isValue(variables)\n      ? `(${objectKeys(variables)\n          .filter(key => isValue(variables[key]))\n          .map(k => {\n            const key = <keyof GQLRequestVariables>k;\n\n            return `$${String(key)}:${getGqlType(\n              key,\n              variables[key],\n              options.requiredFields && options.requiredFields.includes(key),\n              options.fieldsTypeMap,\n            )}`;\n          })\n          .join(',')})`\n      : ''\n  } {\\n${makeFieldList(queryObject, name, 1, variables)}\\n}`;\n}\n","import {DOCUMENT} from '@angular/common';\nimport {inject, Injectable} from '@angular/core';\nimport {isValue} from '@axrl/common';\n\nexport function generateUUID(win: (Window & typeof globalThis) | null): string {\n  if (isValue(win) && isValue(win.crypto) && isValue(win.crypto.randomUUID)) {\n    return win.crypto.randomUUID();\n  } else {\n    return `${Date.now()}${String(Math.random()).slice(3)}`;\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class GenerateUUIDHelper {\n  _win: (Window & typeof globalThis) | null;\n  constructor() {\n    this._win = inject(DOCUMENT).defaultView;\n  }\n\n  getGUID(): string {\n    return generateUUID(this._win);\n  }\n}\n","import {InjectionToken, inject} from '@angular/core';\nimport {IMAGE_FRAGMENTS} from '../image';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Group} from './group';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Group>, используемым в запросе Group с сервера.\n */\nexport const GROUP_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Group>>('GROUP_FRAGMENTS', {\n  factory: (): ValuesOrBoolean<Group> => {\n    const imageFragments = inject(IMAGE_FRAGMENTS);\n    const groupFragment: ValuesOrBoolean<Group> = {\n      id: true,\n      description: true,\n      name: true,\n      sortOrder: true,\n      visible: true,\n      slug: true,\n      concept: true,\n      discount: true,\n      dishesPlaceholder: imageFragments,\n      dishes: {\n        id: true,\n      },\n      parentGroup: {\n        id: true,\n        dishesPlaceholder: imageFragments,\n      },\n    };\n    return {\n      ...groupFragment,\n      childGroups: groupFragment,\n    };\n  },\n});\n","import type {ApolloLink, InMemoryCacheConfig} from '@apollo/client/core';\nimport {InMemoryCache, split} from '@apollo/client/core';\nimport {onError} from '@apollo/client/link/error';\nimport {WebSocketLink} from '@apollo/client/link/ws';\nimport {getMainDefinition} from '@apollo/client/utilities';\nimport {isValue} from '@axrl/common';\nimport {HttpLink} from 'apollo-angular/http';\nimport {LocalStorageWrapper, persistCacheSync} from 'apollo3-cache-persist';\nimport type {OperationDefinitionNode} from 'graphql';\nimport {ConnectionParamsOptions, SubscriptionClient} from 'subscriptions-transport-ws';\nimport {generateUUID} from './get-uuid';\nimport {NgGqlConfig} from './ng-gql-config';\n\nimport {NgGqlUserService} from '../services';\n\nexport function httpLinkFactory(\n  httpLink: HttpLink,\n  document: Document,\n  config: NgGqlConfig,\n  userService: NgGqlUserService,\n): {\n  link: ApolloLink;\n  cache: InMemoryCache;\n} {\n  const win = document.defaultView;\n  const savedDeviceId = localStorage.getItem('restocore-deviceId');\n  const deviceId = savedDeviceId ?? generateUUID(win);\n\n  // Create a WebSocket link:\n  const ws = new WebSocketLink(\n    new SubscriptionClient(config.url.replace('http', 'ws'), {\n      reconnect: true,\n      connectionParams: (): ConnectionParamsOptions => {\n        const token = localStorage.getItem('restocore-token');\n        return isValue(token)\n          ? {\n              'X-Device-Id': deviceId,\n              authorization: localStorage.getItem('restocore-token'),\n            }\n          : {\n              'X-Device-Id': deviceId,\n            };\n      },\n    }),\n  );\n\n  // Error link to handle logout on specific errors\n  const errorLink = onError(({ graphQLErrors, networkError }) => {\n    if (graphQLErrors) {\n      graphQLErrors.forEach(({ message }) => {\n        if (message.includes('Logged in device not found')) {\n          userService.logout();\n        }\n      });\n    }\n  });\n\n  // using the ability to split links, you can send data to each link\n  // depending on what kind of operation is being sent\n  const link = errorLink.concat(\n    split(\n      // split based on operation type\n      ({query}) => {\n        const {kind, operation} = <OperationDefinitionNode>getMainDefinition(query);\n        return kind === 'OperationDefinition' && operation === 'subscription';\n      },\n      ws,\n      httpLink.create({\n        uri: config.url,\n      }),\n    ),\n  );\n\n  const defaultCacheConfig: InMemoryCacheConfig = {\n    addTypename: true,\n    resultCaching: true,\n    typePolicies: {\n      GroupModifier: {\n        keyFields: ['maxAmount', 'minAmount', 'required', 'group', ['id']],\n        fields: {\n          childModifiers: {\n            merge(existing, incoming) {\n              return [...incoming];\n            },\n          },\n        },\n      },\n      Modifier: {\n        keyFields: ['maxAmount', 'minAmount', 'defaultAmount', 'dish', ['id']],\n      },\n      Order: {\n        fields: {\n          dishes: {\n            merge(existing, incoming) {\n              return [...incoming];\n            },\n          },\n        },\n      },\n    },\n  };\n\n  const cache = new InMemoryCache(\n    isValue(config.apolloCacheConfig)\n      ? {...defaultCacheConfig, ...config.apolloCacheConfig}\n      : {...defaultCacheConfig},\n  );\n  if (!isValue(config.usePersistCache) || config.usePersistCache) {\n    persistCacheSync({\n      cache,\n      serialize: true,\n      storage: new LocalStorageWrapper(window.localStorage),\n    });\n  }\n\n  return {\n    link,\n    cache,\n  };\n}\n","import { InjectionToken } from '@angular/core';\nimport { ValuesOrBoolean } from '../values-or-boolean';\nimport { Maintenance } from './maintenance';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Maintenance>, используемым в запросе Maintenance с сервера.\n */\n\nexport const MAINTENANCE_FRAGMENTS = new InjectionToken<\n  ValuesOrBoolean<Maintenance>\n>('MAINTENANCE_FRAGMENTS', {\n  factory: () => ({\n    id: true,\n    title: true,\n    description: true,\n    enable: true,\n    startDate: true,\n    stopDate: true,\n    customData: true,\n  }),\n});\n","import {InjectionToken} from '@angular/core';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Navigation} from './navigation';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Navigation>, используемым в запросе Navigation с сервера.\n */\nexport const NAVIGATION_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Navigation>>(\n  'NAVIGATION_FRAGMENTS',\n  {\n    factory: () => ({\n      mnemonicId: true,\n      description: true,\n      options: true,\n      id: true,\n      navigation_menu: true,\n    }),\n  },\n);\n","import { InjectionToken } from '@angular/core';\nimport { NgGqlConfig } from './ng-gql-config';\n\n/**\n * InjectionToken с объектом NG_GQL_CONFIG\n */\nexport const NG_GQL_CONFIG = new InjectionToken<NgGqlConfig>('NG_GQL_CONFIG');\n","import {formatDate} from '@angular/common';\nimport {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport {isValue} from '@axrl/common';\nimport {ScanFormType} from '@axrl/ngx-extended-form-builder';\nimport {\n  RestrictionsOrder,\n  WorkTime,\n  WorkTimeValidator,\n  ScheduleValidator,\n  TimeZoneIdentifier,\n} from '@webresto/worktime';\nimport {OrderForm} from './order';\n\nfunction setErrorsToControl(\n  errors: ValidationErrors | null,\n  control: AbstractControl | undefined,\n): ValidationErrors | null {\n  if (!isValue(control)) {\n    return null;\n  }\n\n  if (isValue(errors)) {\n    control.setErrors(errors);\n  } else {\n    if (isValue(control.errors)) {\n      control.updateValueAndValidity({\n        onlySelf: true,\n      });\n    }\n  }\n\n  return null;\n}\n\n/**\n * Creates a validator that checks if the order date falls within the allowed\n * schedule.\n *\n * @param restrictionsData Data describing ordering restrictions.\n * @param scheduleValidator Schedule validator used to verify working intervals.\n */\nexport function orderDateValidator(\n  restrictionsData: RestrictionsOrder | null | undefined,\n  scheduleValidator: ScheduleValidator,\n): ValidatorFn {\n  return (control: AbstractControl<string | null>) => {\n    const controlValue: string | null = control.value;\n    if (isValue(controlValue)) {\n      if (!isValue(restrictionsData)) {\n        // eslint-disable-next-line no-console\n        return {['Error']: 'restrictions not defined'};\n      } else {\n        const tzOffset: string = TimeZoneIdentifier.getTimeZoneGMTOffsetfromNameZone(\n          restrictionsData.timezone,\n        );\n\n        // Если интервал не задан то валидатор пропустит это, в дальнейщем планируется что время работы будет только определятся через интервалы.\n        if (!scheduleValidator.schedule || !scheduleValidator.schedule.length) {\n          return null;\n        }\n\n        if (scheduleValidator.doesTimeFallWithin(new Date(`${controlValue} ${tzOffset}`))) {\n          return null;\n        } else {\n          return {['Order date']: 'Orders are not possible at this time'};\n        }\n      }\n    } else {\n      return {['Error']: 'order date is corupted'};\n    }\n  };\n}\n\n/**\n * Builds a validator that verifies whether a chosen delivery date is within\n * the range allowed by the restrictions data and work time settings.\n *\n * @param restrictionsData Ordering restrictions with timezone information.\n * @param workTimeValidator Helper providing work time calculations.\n */\nexport function deliveryDateValidator(\n  restrictionsData: RestrictionsOrder | null | undefined,\n  workTimeValidator: WorkTimeValidator,\n): ValidatorFn {\n  return (control: AbstractControl<string | null>) => {\n    const controlValue: string | null = control.value;\n\n    if (isValue(controlValue)) {\n      const [deliveryDate, deliveryTime] = controlValue.split(' ');\n      if (!isValue(restrictionsData)) {\n        return {['Дата доставки']: 'Не удалось проверить дату доставки'};\n      } else {\n        const dateMin = workTimeValidator\n          .getPossibleDelieveryOrderDateTime(restrictionsData, new Date())\n          .split(' ')[0];\n\n        if (deliveryDate && dateMin) {\n          const timeNow = new Date(\n            formatDate(deliveryDate, `yyyy-MM-dd ${deliveryTime}`, 'en'),\n          ).getTime();\n          const timeFrom = new Date(dateMin).getTime();\n          const timeTo = new Date(\n            formatDate(\n              Date.now() + 60 * 1000 * restrictionsData.possibleToOrderInMinutes,\n              'yyyy-MM-dd 00:00',\n              'en',\n            ),\n          ).getTime();\n\n          if (timeNow < timeFrom || timeNow > timeTo) {\n            return {['Дата доставки']: 'Доставка в эту дату невозможна'};\n          } else {\n            return null;\n          }\n        } else {\n          return {\n            ['Дата доставки']: 'Доставка не указана или указана не верно',\n          };\n        }\n      }\n    } else {\n      return null;\n    }\n  };\n}\n\n/**\n * Creates a validator ensuring the selected delivery time fits within the\n * allowed working hours and respects the minimum delivery interval.\n *\n * @param restrictionsData Ordering restrictions for the restaurant.\n * @param workTimeValidator Utility used for work time calculations.\n */\nexport function deliveryTimeValidator(\n  restrictionsData: RestrictionsOrder | null | undefined,\n  workTimeValidator: WorkTimeValidator,\n): ValidatorFn {\n  return control => {\n    const controlValue: string | null = control.value;\n\n    if (isValue(controlValue)) {\n      const [deliveryDate, deliveryTime] = controlValue.split(' ');\n\n      if (!isValue(restrictionsData)) {\n        return {['Время доставки']: 'Не удалось проверить время доставки'};\n      } else {\n        if (isValue(deliveryDate)) {\n          const formSelectedDate = new Date(controlValue);\n          const time = workTimeValidator.getTimeFromString(deliveryTime);\n          let currentDayWorkTime = workTimeValidator.getCurrentWorkTime(\n            restrictionsData,\n            formSelectedDate,\n          );\n          if (\n            control.parent?.parent?.value.selfService &&\n            isValue(currentDayWorkTime.selfService)\n          ) {\n            currentDayWorkTime = currentDayWorkTime.selfService as WorkTime;\n          }\n          if (\n            time <\n              workTimeValidator.getTimeFromString(currentDayWorkTime.start) +\n                (+restrictionsData.minDeliveryTimeInMinutes || 0) ||\n            time > workTimeValidator.getTimeFromString(currentDayWorkTime.stop)\n          ) {\n            return {\n              ['Время доставки']: `Доставка в это время невозможна. Время работы ${formatDate(\n                deliveryDate ?? Date.now(),\n                'dd.MM.yyyy',\n                'ru',\n              )} с ${currentDayWorkTime.start} до ${\n                currentDayWorkTime.stop\n              } (минимальное время доставки - ${restrictionsData.minDeliveryTimeInMinutes} минут)`,\n            };\n          } else {\n            const minTimeString = workTimeValidator\n              .getPossibleDelieveryOrderDateTime(restrictionsData, new Date(deliveryDate))\n              .split(' ')[1];\n            const minTime = workTimeValidator.getTimeFromString(minTimeString);\n            const today = formatDate(Date.now(), 'yyyy-MM-dd', 'ru');\n\n            if (deliveryDate == today && time < minTime) {\n              return {\n                ['Время доставки']: `Время доставки не может быть раньше ближайшего. Ближайшее время доставки = ${minTimeString}.`,\n              };\n            } else {\n              return null;\n            }\n          }\n        } else {\n          return {\n            ['Время доставки']: 'Время доставки не указано, или указано не верно',\n          };\n        }\n      }\n    } else {\n      return null;\n    }\n  };\n}\n\n/**\n * Validates that the street field is filled when delivery to an address is\n * selected.\n */\nexport function addressStreetValidator(form: AbstractControl): ValidationErrors | null {\n  const formValue = form.value;\n  const control = (<ScanFormType<OrderForm>>form).controls?.address?.controls?.street;\n  const controlValue = control?.value;\n  const isDelieveryToAddress = !formValue.selfService && !isValue(formValue.locationId);\n\n  const errors =\n    isDelieveryToAddress && (!isValue(controlValue) || controlValue === '')\n      ? {['Street']: 'Required'}\n      : null;\n  return setErrorsToControl(errors, control);\n}\n\n/**\n * Validates that the street value is selected from the provided list when\n * delivery to an address is chosen.\n */\nexport function addressStreetIdValidator(form: AbstractControl): ValidationErrors | null {\n  const formValue = form.value;\n  const controlStreetId = (<ScanFormType<OrderForm>>form).controls?.address?.controls?.streetId;\n  const controlStreet = (<ScanFormType<OrderForm>>form).controls?.address?.controls?.street;\n  const controlValue = controlStreetId?.value;\n  const isDelieveryToAddress = !formValue.selfService && !isValue(formValue.locationId);\n\n  const errors =\n    isDelieveryToAddress && (!isValue(controlValue) || controlValue === '')\n      ? {['Street']: 'You need to select from the list'}\n      : null;\n  return setErrorsToControl(errors, controlStreet);\n}\n\n/**\n * Ensures that the house number is provided when delivery to an address is\n * required.\n */\nexport function addressHomeValidator(form: AbstractControl): ValidationErrors | null {\n  const formValue = form.value;\n  const control = (<ScanFormType<OrderForm>>form).controls?.address?.controls?.home;\n  const controlValue = control?.value;\n  const isDelieveryToAddress = !formValue.selfService && !isValue(formValue.locationId);\n\n  const errors =\n    isDelieveryToAddress && (!isValue(controlValue) || controlValue === '')\n      ? {['Home']: 'Required'}\n      : null;\n  return setErrorsToControl(errors, control);\n}\n\n/**\n * Validates that at least one contact method is provided by the user.\n */\nexport function contactMethodValidator(form: AbstractControl): ValidationErrors | null {\n  const control = (<ScanFormType<OrderForm>>form).controls.contactMethods;\n  const controlValues = control?.value;\n\n  const errors =\n    Array.isArray(controlValues) &&\n    controlValues?.length > 0 &&\n    (isValue(controlValues?.[0]) || controlValues?.[0] !== '')\n      ? null\n      : {['Contact method']: 'Required'};\n\n  return setErrorsToControl(errors, control);\n}\n\n/**\n * Checks that a pickup point is selected when the order is marked for\n * self-service pickup.\n */\nexport function pickupPointIdValidator(form: AbstractControl): ValidationErrors | null {\n  const selfService: boolean = form.value?.selfService;\n  const control = <AbstractControl<string> | undefined>(\n    (<ScanFormType<OrderForm>>form).controls?.pickupPoint?.controls?.id\n  );\n  const controlValue = control?.value;\n\n  const errors =\n    selfService && (!isValue(controlValue) || controlValue === '')\n      ? {\n          ['Pickup address']: 'Pickup address not selected.',\n        }\n      : null;\n  return setErrorsToControl(errors, control);\n}\n\n/**\n * Returns a simple validator that checks a control for a non-empty value.\n */\nexport function isReqiredFieldValidator(controlName: string): ValidatorFn {\n  return control =>\n    !isValue(control.value) || control.value === '' ? {[controlName]: 'Required'} : null;\n}\n","import {inject, InjectionToken} from '@angular/core';\nimport {DISH_FRAGMENTS} from '../dish';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {OrderDish} from './order-dish';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<OrderDish>, используемым в запросе OrderDish с сервера.\n */\n\nexport const ORDER_DISH_FRAGMENTS = new InjectionToken<ValuesOrBoolean<OrderDish>>(\n  'ORDER_DISH_FRAGMENTS',\n  {\n    factory: () => {\n      const dishFragments = inject(DISH_FRAGMENTS);\n      return {\n        id: true,\n        amount: true,\n        dish: {\n          id: true,\n        },\n        modifiers: {\n          id: true,\n          dish: dishFragments,\n          amount: true,\n          groupId: true,\n        },\n        discountTotal: true,\n        discountType: true,\n        discountAmount: true,\n        discountMessage: true,\n        comment: true,\n        totalWeight: true,\n        itemTotal: true,\n      };\n    },\n  },\n);\n","import {InjectionToken} from '@angular/core';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {PickupPoint} from './pickupPoint';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<PickupPoint>, используемым в запросе PickupPoint с сервера.\n */\nexport const PICKUP_POINT_FRAGMENTS = new InjectionToken<ValuesOrBoolean<PickupPoint>>(\n  'PICKUP_POINT_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<PickupPoint> => {\n      return {\n        id: true,\n        address: true,\n        title: true,\n        order: true,\n        enable: true,\n        phone: true,\n      };\n    },\n  },\n);\n","import {DOCUMENT} from '@angular/common';\nimport {InjectionToken, inject} from '@angular/core';\nimport {generateUUID} from '../get-uuid';\nimport {ORDER_DISH_FRAGMENTS} from '../order-dish';\nimport {PICKUP_POINT_FRAGMENTS} from '../pickupPoint';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {Order} from './order';\n\n/**\n * Метод для генерации orderId\n */\nexport const ORDERID_FACTORY_FN = new InjectionToken<() => string>('ORDERID_FACTORY_FN', {\n  factory: (): (() => string) => {\n    const win = inject(DOCUMENT).defaultView;\n    return () => generateUUID(win);\n  },\n});\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<Order>, используемым в запросе Order с сервера.\n */\nexport const ORDER_FRAGMENTS = new InjectionToken<ValuesOrBoolean<Order>>('ORDER_FRAGMENTS', {\n  factory: (): ValuesOrBoolean<Order> => {\n    const orderDishFragments = inject(ORDER_DISH_FRAGMENTS);\n    const pickupPoint = inject(PICKUP_POINT_FRAGMENTS);\n    return {\n      id: true,\n      shortId: true,\n      dishesCount: true,\n      comment: true,\n      deliveryDescription: true,\n      message: true,\n      deliveryCost: true,\n      totalWeight: true,\n      total: true,\n      orderTotal: true,\n      discountTotal: true,\n      state: true,\n      trifleFrom: true,\n      customData: true,\n      customer: true,\n      address: true,\n      rmsId: true,\n      rmsOrderNumber: true,\n      rmsDeliveryDate: true,\n      dishes: orderDishFragments,\n      rmsDelivered: true,\n      selfService: true,\n      date: true,\n      pickupPoint,\n      spendBonus: true,\n      bonusesTotal: true,\n      promotionState: {\n        type: true,\n        message: true,\n        state: true,\n      },\n      delivery: {\n        deliveryTimeMinutes: true,\n        allowed: true,\n        cost: true,\n        message: true\n      },\n      promotionUnorderable: true,\n      promotionCodeString: true,\n      orderDate: true,\n      rmsOrderStatus: true,\n      personsCount: true,\n      paymentMethod: {\n        id: true,\n        title: true,\n      },\n    };\n  },\n});\n","import {InjectionToken} from '@angular/core';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {PaymentMethod} from './payment-method';\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<PaymentMethod>, используемым в запросе PaymentMethod с сервера.\n */\nexport const PAYMENT_METHOD_FRAGMENTS = new InjectionToken<ValuesOrBoolean<PaymentMethod>>(\n  'PAYMENT_METHOD_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<PaymentMethod> => ({\n      ...{\n        id: true,\n        type: true,\n        title: true,\n        description: true,\n        isCash: true,\n        adapter: true,\n        sortOrder: true,\n        enable: true,\n        customData: true,\n      },\n    }),\n  },\n);\n","import {inject, InjectionToken} from '@angular/core';\nimport {PHONE_FRAGMENT} from '../customer';\nimport {DISH_FRAGMENTS} from '../dish';\nimport {ACTION_FRAGMENTS, MESSAGE_FRAGMENTS} from '../event-message';\nimport {ValuesOrBoolean} from '../values-or-boolean';\nimport {OTPResponse} from './methods';\nimport {\n  BonusProgram,\n  User,\n  UserBonusProgram,\n  UserDevice,\n  UserLocation,\n  UserOrderHystory,\n} from './user';\n/**\n * InjectionToken с объектом ValuesOrBoolean<OTPResponse>.\n */\nexport const OTP_RESPONSE_FRAGMENTS = new InjectionToken<ValuesOrBoolean<OTPResponse>>(\n  'OTP_RESPONSE_FRAGMENT',\n  {\n    factory: (): ValuesOrBoolean<OTPResponse> => {\n      const defaultMessageFragments = inject(MESSAGE_FRAGMENTS);\n      const defaultActionFragments = inject(ACTION_FRAGMENTS);\n      return {\n        id: true,\n        nextOTPAfterSeconds: true,\n        message: defaultMessageFragments,\n        action: defaultActionFragments,\n      };\n    },\n  },\n);\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<UserDevice>.\n */\nexport const USER_DEVICES_FRAGMENTS = new InjectionToken<ValuesOrBoolean<UserDevice>>(\n  'USER_DEVICES_FRAGMENT',\n  {\n    factory: (): ValuesOrBoolean<UserDevice> => ({\n      id: true,\n      name: true,\n      userAgent: true,\n      isLoggedIn: true,\n      userId: true,\n      lastIP: true,\n      loginTime: true,\n      lastActivity: true,\n      sessionId: true,\n    }),\n  },\n);\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<UserLocation>.\n */\nexport const USER_LOCATION_FRAGMENTS = new InjectionToken<ValuesOrBoolean<UserLocation>>(\n  'USER_LOCATION_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<UserLocation> => ({\n      id: true,\n      isDefault: true,\n      name: true,\n      city: true,\n      home: true,\n      housing: true,\n      index: true,\n      entrance: true,\n      floor: true,\n      apartment: true,\n      doorphone: true,\n      streetId: true,\n      street: {\n        name: true,\n        externalId: true,\n        id: true,\n      },\n      userId: true,\n      comment: true,\n    }),\n  },\n);\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<BonusProgram>.\n */\nexport const BONUS_PROGRAM_FRAGMENTS = new InjectionToken<ValuesOrBoolean<BonusProgram>>(\n  'BONUS_PROGRAM_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<BonusProgram> => ({\n      id: true,\n      name: true,\n      coveragePercentage: true,\n      detailInfoLink: true,\n      adapter: true,\n      sortOrder: true,\n      description: true,\n      enable: true,\n    }),\n  },\n);\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<UserBonusProgram>.\n */\nexport const USER_BONUS_PROGRAM_FRAGMENTS = new InjectionToken<ValuesOrBoolean<UserBonusProgram>>(\n  'USER_BONUS_PROGRAM_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<UserBonusProgram> => {\n      const bonusProgramFragments = inject(BONUS_PROGRAM_FRAGMENTS);\n      return {\n        id: true,\n        isActive: true,\n        balance: true,\n        userId: true,\n        bonusProgram: bonusProgramFragments,\n        bonusProgramId: true,\n        syncedToTime: true,\n      };\n    },\n  },\n);\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<User>.\n */\nexport const USER_FRAGMENTS = new InjectionToken<ValuesOrBoolean<User>>('USER_FRAGMENTS', {\n  factory: (): ValuesOrBoolean<User> => {\n    const dishFragments = inject(DISH_FRAGMENTS);\n    const phoneFragments = inject(PHONE_FRAGMENT);\n    const ueserDevicesFragments = inject(USER_DEVICES_FRAGMENTS);\n    const userBonusProgramFragments = inject(USER_BONUS_PROGRAM_FRAGMENTS);\n    const fragments: ValuesOrBoolean<User> = {\n      id: true,\n      login: true,\n      firstName: true,\n      lastName: true,\n      email: true,\n      phone: phoneFragments,\n      birthday: true,\n      favorites: dishFragments,\n      bonusProgram: userBonusProgramFragments,\n      orderCount: true,\n      devices: ueserDevicesFragments,\n      lastPasswordChange: true,\n      temporaryCode: true,\n    };\n    return fragments;\n  },\n});\n\n/**\n * InjectionToken с объектом ValuesOrBoolean<UserOrderHystory>.\n */\nexport const USER_ORDER_HYSTORY_FRAGMENTS = new InjectionToken<ValuesOrBoolean<UserOrderHystory>>(\n  'USER_ORDER_HYSTORY_FRAGMENTS',\n  {\n    factory: (): ValuesOrBoolean<UserOrderHystory> => {\n      const fragments: ValuesOrBoolean<UserOrderHystory> = {\n        id: true,\n        uniqueItems: true,\n        orderTotal: true,\n        total: true,\n        order: true,\n        discountTotal: true,\n        comment: true,\n        totalWeight: true,\n        userId: true,\n      };\n      return fragments;\n    },\n  },\n);\n","import {Inject, Injectable} from '@angular/core';\nimport type {\n  ApolloQueryResult,\n  FetchResult,\n  OperationVariables,\n  QueryOptions,\n  SubscriptionOptions,\n} from '@apollo/client/core';\nimport {isValue} from '@axrl/common';\nimport {Apollo} from 'apollo-angular';\nimport type {\n  EmptyObject,\n  ExtraSubscriptionOptions,\n  MutationOptions,\n  MutationResult,\n  WatchQueryOptions,\n} from 'apollo-angular/types';\nimport {Observable, catchError, map, throwError} from 'rxjs';\nimport {NG_GQL_CONFIG, NgGqlConfig} from '../models';\n\n@Injectable()\nexport class ApolloService {\n  constructor(\n    private _apollo: Apollo,\n    @Inject(NG_GQL_CONFIG) private _config: NgGqlConfig,\n  ) {}\n\n  watchQuery<TData, TVariables extends OperationVariables = EmptyObject>(\n    options: WatchQueryOptions<TVariables, TData>,\n  ): Observable<ApolloQueryResult<TData>> {\n    return this._apollo.watchQuery<TData, TVariables>(options).valueChanges.pipe(\n      map(data => {\n        if (isValue(data.error) || isValue(data.errors)) {\n          throw new Error(JSON.stringify(data.error || data.errors));\n        } else {\n          return data;\n        }\n      }),\n      catchError(error => {\n        console.log(error);\n        if (this._config.debugMode) {\n          alert(error);\n        }\n        return throwError(() => error);\n      }),\n    );\n  }\n\n  query<T, V = EmptyObject>(options: QueryOptions<V, T>): Observable<ApolloQueryResult<T>> {\n    return this._apollo.query<T, V>(options).pipe(\n      map(data => {\n        if (isValue(data.error) || isValue(data.errors)) {\n          throw new Error(JSON.stringify(data.error || data.errors));\n        } else {\n          return data;\n        }\n      }),\n      catchError(error => {\n        console.log(error);\n        if (this._config.debugMode) {\n          alert(error);\n        }\n        return throwError(() => error);\n      }),\n    );\n  }\n\n  mutate<T, V = EmptyObject>(options: MutationOptions<T, V>): Observable<MutationResult<T>> {\n    return this._apollo.mutate<T, V>(options).pipe(\n      catchError(error => {\n        console.log(error);\n        if (this._config.debugMode) {\n          alert(error);\n        }\n        return throwError(() => error);\n      }),\n    );\n  }\n\n  subscribe<T, V = EmptyObject>(\n    options: SubscriptionOptions<V, T>,\n    extra?: ExtraSubscriptionOptions,\n  ): Observable<FetchResult<T>> {\n    return this._apollo.subscribe<T, V>(options, extra).pipe(\n      map(data => {\n        if (isValue(data.errors)) {\n          throw new Error(JSON.stringify(data.errors));\n        } else {\n          return data;\n        }\n      }),\n      catchError(error => {\n        console.log(error);\n        if (this._config.debugMode) {\n          alert(error);\n        }\n        return throwError(() => error);\n      }),\n    );\n  }\n}\n","/* eslint-disable rxjs/no-subject-value */\nimport {Injectable} from '@angular/core';\nimport {createSubject, getFilteredData, isValue} from '@axrl/common';\nimport {\n  Dish,\n  Group,\n  NavBarMenu,\n  NavigationBase,\n  Order,\n  PaymentMethod,\n  PickupPoint,\n  User,\n  UserLocationResponse,\n  UserOrderHystory,\n} from '../models';\n\n@Injectable()\nexport class NgGqlStoreService {\n  private _groups = createSubject<Group[]>([]);\n  private _order = createSubject<Order<Dish> | null>(null);\n  private _dishes = createSubject<Dish[]>([]);\n  private _navBarMenus = createSubject<NavBarMenu[]>([]);\n  private _userLocations = createSubject<UserLocationResponse>(null);\n  private _orderHystory = createSubject<UserOrderHystory[]>([]);\n  private _navigation = createSubject<NavigationBase[] | null>(null);\n  private _token = createSubject<string | null>(localStorage.getItem('restocore-token'));\n  private _user = createSubject<User | null>(null);\n  private _paymentMethods = createSubject<PaymentMethod[] | null>(null);\n  private _pickupPoints = createSubject<PickupPoint[] | null>(null);\n\n  readonly paymentMethods = getFilteredData(this._paymentMethods);\n  readonly user = this._user;\n  readonly token = this._token.asObservable();\n  readonly isAuthenticated$ = getFilteredData(this.token);\n  readonly orderHystory = this._orderHystory.asObservable();\n  readonly userLocations = this._userLocations.asObservable();\n  readonly navBarMenus = this._navBarMenus.asObservable();\n  readonly groups = this._groups.asObservable();\n  readonly navigation = this._navigation;\n  readonly order = getFilteredData(this._order);\n  readonly dishes = this._dishes.asObservable();\n  readonly pickupPoints$ = this._pickupPoints.asObservable();\n\n  constructor() {}\n\n  updateOrder<T extends Order<Dish>>(order: T): void {\n    this._order.next(order);\n  }\n\n  updateDishes<T extends Dish>(dishes: T[]): void {\n    this._dishes.next(dishes);\n  }\n\n  updateMenuGroups<T extends Group>(menuGroups: T[]): void {\n    this._groups.next(menuGroups);\n  }\n\n  updateNavigation<T extends NavigationBase>(navigation: T[]): void {\n    this._navigation.next(navigation);\n  }\n\n  updatePaymentMethods<T extends PaymentMethod>(methods: T[]): void {\n    this._paymentMethods.next(methods);\n  }\n\n  updateUser<T extends User>(user: T | null): void {\n    this._user.next(user);\n  }\n\n  updateToken(newToken: string | null): void {\n    if (isValue(newToken)) {\n      localStorage.setItem('restocore-token', newToken);\n    } else {\n      localStorage.removeItem('restocore-token');\n    }\n    this._token.next(newToken);\n  }\n\n  updateOrderHystory(newPart: UserOrderHystory[]): void {\n    const hystory = [...this._orderHystory.value];\n    hystory.push(...newPart);\n    this._orderHystory.next(hystory);\n  }\n\n  updateUserLocations(newValue: UserLocationResponse): void {\n    const current = this._userLocations.value;\n    if (current) {\n      const userLocations = [...current.userLocation];\n      userLocations.push(...newValue.userLocation);\n      this._userLocations.next({\n        userLocationCount: newValue.userLocationCount,\n        userLocation: userLocations,\n      });\n    }\n  }\n\n  updateNavBarMenus(items: NavBarMenu[]): void {\n    this._navBarMenus.next(items);\n  }\n\n  updatePickupPoints(newPoints: PickupPoint[]): void {\n    this._pickupPoints.next(newPoints);\n  }\n}\n","import {EventEmitter, Inject, Injectable} from '@angular/core';\nimport {OperationVariables} from '@apollo/client';\nimport {deepClone, isValue} from '@axrl/common';\nimport type {ExtraSubscriptionOptions} from 'apollo-angular';\nimport {gql} from 'apollo-angular';\nimport type {Observable} from 'rxjs';\nimport {\n  distinctUntilKeyChanged,\n  filter,\n  map,\n  mergeWith,\n  shareReplay,\n  startWith,\n  switchMap,\n} from 'rxjs';\nimport type {Action, GQLRequestVariables, Message, ValuesOrBoolean} from '../models';\nimport {ACTION_FRAGMENTS, MESSAGE_FRAGMENTS, generateQueryString} from '../models';\nimport {ApolloService} from './apollo.service';\n\n/**\n * Объект настройки генерации части строки запроса с описанием типов параметров операции.\n */\nexport interface QueryGenerationParam<V> {\n  /**\n   * Необязательный массив названий ключей параметров запроса, для которых в схеме был установлен обязательный тип\n   * (например у параметра указан тип String!, а не String).\n   * ВАЖНО! КРОМЕ ключей, для которых названия типов передаются в `fieldsTypeMap`.\n   */\n  requiredFields?: Array<keyof V>;\n\n  /**\n   * Необязательный объект Map, в качестве ключей содержащий названия параметров запроса,\n   * а в качестве значения - строки-названия соответствующих им типов, определенных в схеме сервера GraphQL.\n   * ВАЖНО! Строка также должна включать символ \"!\", если в схеме параметр определен как обязательный.\n   */\n  fieldsTypeMap?: Map<keyof V, string>;\n}\n\n@Injectable()\nexport class RequestService {\n  private _eventMessage: EventEmitter<Partial<Message>> = new EventEmitter();\n  private _eventAction: EventEmitter<Partial<Action>> = new EventEmitter();\n\n  /**\n   * Поток Observable, в который будут поступать события по текущему заказу в процессе оформления, подразумевающие совершение каких-либо действий на стороне фронта и выполняемых пользователем\n   * (переход на страницу оплаты или, к примеру, открытие диалогового окна с предложением блюда по акции, акции и т.п. )\n   * Для получения потока используется метод @method this.getActionEmitter()\n   * Для отправки в поток кастомных сообщений испльзуется @method this.emitActionEvent()\n   */\n  private readonly _actions$ = this.customSubscribe$<Action, 'action'>(\n    'action',\n    this._defaultActionFragments,\n  ).pipe(\n    mergeWith(this._eventAction.asObservable()),\n    distinctUntilKeyChanged('id'),\n    shareReplay(1),\n  );\n\n  /**\n   * Поток Observable, в который будут поступать информационные сообщения по текущему заказу (блюдо добавлено/удалено/заказ оформлен).\n   * Для получения потока используется метод @method this.getMessageEmitter()\n   * Для отправки в поток кастомных сообщений испльзуется @method this.emitMessageEvent()\n   */\n  private readonly _messages$ = this.customSubscribe$<Message, 'message'>(\n    'message',\n    this._defaultMessageFragments,\n  ).pipe(\n    mergeWith(this._eventMessage.asObservable()),\n    distinctUntilKeyChanged('id'),\n    shareReplay(1),\n  );\n\n  constructor(\n    private _apollo: ApolloService,\n    @Inject(ACTION_FRAGMENTS)\n    private _defaultActionFragments: ValuesOrBoolean<Action>,\n    @Inject(MESSAGE_FRAGMENTS)\n    private _defaultMessageFragments: ValuesOrBoolean<Message>,\n  ) {}\n\n  emitMessageEvent(message: Partial<Message>): void {\n    this._eventMessage.emit(message);\n  }\n  emitActionEvent(action: Partial<Action>): void {\n    this._eventAction.emit(action);\n  }\n\n  getMessageEmitter(): Observable<Partial<Message>> {\n    return this._messages$;\n  }\n\n  getActionEmitter(): Observable<Partial<Action>> {\n    return this._actions$;\n  }\n\n  /**\n   * @method customQuery$() для выполнения запросов типа \"query\" к серверу API GraphQL\n   * @typeParam T Тип запрашиваемых данных, по которому построен объект @param queryObject.\n   * @typeParam N Строка-название операции из схемы сервера GraphQL.\n   * @typeParam V = GQLRequestVariables Описание типа объекта с переменными для выполнения операции, описанными в схеме сервера GraphQL.\n   * @param name - название операции, объвленное в схеме сервера GraphQL.\n   * @param queryObject - объект-источник информации о структуре запрашиваемых данных в виде обьекта, реализующего интерфейс ValuesOrBoolean<T>.\n   * @see @alias ValuesOrBoolean<T>\n   *\n   * @param variables - необязательный - объект с переменными, которые будут использованы в качестве параметров запроса.\n   *  Названия ключей в объекте должны соответствовать названиям параметров, объявленным в GrapQL-схеме сервера.\n   *  В качестве типа значений у параметров допустимо использовать типы - number, string, object или boolean.\n   *  Если в GrapQL-схеме на сервере какие-то из параметров отмечены как необязательные, то названия этих ключей требуется дополнительно передать в requiredFields,\n   *  чтобы генератор строки запроса сделал соответствующие отметки о типе в результирующей строке запроса.\n   * @param paramOptions - необязательный - Обект настройки генерации части строки запроса с описанием типов параметров операции.\n   * @param options.requiredFields - необязательный массив названий ключей параметров запроса, для которых в схеме был установлен обязательный тип\n   * КРОМЕ ключей, для которых названия типов передаются в `options.fieldsTypeMap`.\n   *    (например у параметра указан тип String!, а не String).\n   * @param options.fieldsTypeMap - необязательный объект Map, в качестве ключей содержащий названия параметров запроса,\n   * а в качестве значения - строку с названием его типа, определенного в схеме сервера GraphQL.\n   * ВАЖНО! - строка также должна включать символ \"!\", если в схеме параметр определен как обязательный.\n   *\n   * @returns - Observable поток с результатом получения данных от сервера в формате объекта с одним ключом N (название операции), значение которого - непосредственно запрошенные данные\n   *  в виде одиночного объекта либо массива.\n   **/\n  customQuery$<\n    T extends {},\n    N extends `${string}`,\n    V extends OperationVariables = GQLRequestVariables,\n  >(\n    name: N,\n    queryObject: ValuesOrBoolean<T>,\n    variables?: V,\n    paramOptions?: QueryGenerationParam<V> & {\n      fetchPolicy?: import('@apollo/client/core').WatchQueryFetchPolicy;\n      errorPolicy?: import('@apollo/client/core').ErrorPolicy;\n      context?: any;\n    },\n  ): Observable<Record<N, T | T[]>> {\n    return this._apollo\n      .watchQuery<Record<N, T | T[]>, V>({\n        query: gql`query ${generateQueryString({\n          name,\n          queryObject,\n          variables,\n          requiredFields: paramOptions?.requiredFields,\n          fieldsTypeMap: paramOptions?.fieldsTypeMap,\n        })}`,\n        variables,\n        fetchPolicy: paramOptions?.fetchPolicy ?? 'cache-first',\n        errorPolicy: paramOptions?.errorPolicy,\n        context: paramOptions?.context,\n      })\n      .pipe(\n        map(res => (res.error || res.errors ? null : res.data)),\n        filter((data): data is Record<N, T | T[]> => !!data),\n      );\n  }\n\n  /**\n   * @method customMutation$() для выполнения запросов типа \"mutation\" к серверу API GraphQL\n   * @typeParam T Тип мутируемых данных, по которому построен объект @param queryObject\n   * @typeParam N Строка-название операции из схемы сервера GraphQL.\n   * @typeParam V = GQLRequestVariables Описание типа объекта с переменными для выполнения операции, описанными в схеме сервера GraphQL.\n   * @param name - название операции, объвленное в схеме сервера GraphQL.\n   * @param queryObject - объект-источник информации о структуре запрашиваемых данных в виде обьекта, реализующего интерфейс ValuesOrBoolean<T>.\n   * @see @alias ValuesOrBoolean<T>\n   * @param variables - обязательный - объект с переменными, которые будут использованы в качестве параметров запроса.\n   *  Названия ключей в объекте должны соответствовать названиям параметров, объявленным в GrapQL-схеме сервера.\n   *  В качестве типа значений у параметров допустимо использовать типы - number, string, object или boolean.\n   *  Если в GrapQL-схеме на сервере какие-то из параметров отмечены как обязательные, то названия этих ключей требуется дополнительно передать в requiredFields,\n   *  чтобы генератор строки запроса сделал соответствующие отметки о типе в результирующей строке запроса.\n   * @param paramOptions - необязательный - Обект настройки генерации части строки запроса с описанием типов параметров операции.\n   * @param options.requiredFields - необязательный массив названий ключей параметров запроса, для которых в схеме был установлен обязательный тип\n   * КРОМЕ ключей, для которых названия типов передаются в `options.fieldsTypeMap`.\n   *    (например у параметра указан тип String!, а не String).\n   * @param options.fieldsTypeMap - необязательный объект Map, в качестве ключей содержащий названия параметров запроса,\n   * а в качестве значения - строку с названием его типа, определенного в схеме сервера GraphQL.\n   * ВАЖНО! - строка также должна включать символ \"!\", если в схеме параметр определен как обязательный.\n   *\n   * @returns - Observable поток с результатом выполнения операции в формате объекта с одним ключом N (название операции), значение которого - непосредственно результат операции.\n   **/\n  customMutation$<T extends {}, N extends `${string}`, V = GQLRequestVariables>(\n    name: N,\n    queryObject: ValuesOrBoolean<T>,\n    variables: V,\n    paramOptions?: QueryGenerationParam<V>,\n  ): Observable<Record<N, T>> {\n    return this._apollo\n      .mutate<Record<N, T>, V>({\n        mutation: gql`mutation ${generateQueryString({\n          name,\n          queryObject,\n          variables,\n          requiredFields: paramOptions?.requiredFields,\n          fieldsTypeMap: paramOptions?.fieldsTypeMap,\n        })}`,\n        variables,\n      })\n      .pipe(\n        map(result => (isValue(result) ? result.data : null)),\n        filter((res): res is Record<N, T> => !!res),\n      );\n  }\n\n  /**\n   * @method customSubscribe$() для выполнения запросов типа \"subscription\" к серверу API GraphQL\n   * @typeParam T Тип данных, на обновление которых производится подписка и по которому построен объект @param queryObject\n   * @typeParam N Строка-название операции из схемы сервера GraphQL.\n   * @typeParam V = GQLRequestVariables Описание типа объекта с переменными для выполнения операции, описанными в схеме сервера GraphQL.\n   * @param name - название операции, объвленное в схеме сервера GraphQL.\n   * @param queryObject - объект-источник информации о структуре данных, на которые происходит подписка, реализующий интерфейс ValuesOrBoolean<T>.\n   * @see @alias ValuesOrBoolean<T>\n   * @param variables - необязательный - объект с переменными, которые будут использованы в качестве параметров запроса.\n   *  Названия ключей в объекте должны соответствовать названиям параметров, объявленным в GrapQL-схеме сервера.\n   *  В качестве типа значений у параметров допустимо использовать типы - number, string, object или boolean.\n   *  Если в GrapQL-схеме на сервере какие-то из параметров отмечены как обязательные, то названия этих ключей требуется дополнительно передать в requiredFields,\n   *  чтобы генератор строки запроса сделал соответствующие отметки о типе в результирующей строке запроса.\n   * @param paramOptions - необязательный - Обект настройки генерации части строки запроса с описанием типов параметров операции.\n   * @param options.requiredFields - необязательный массив названий ключей параметров запроса, для которых в схеме был установлен обязательный тип\n   * КРОМЕ ключей, для которых названия типов передаются в `options.fieldsTypeMap`.\n   *    (например у параметра указан тип String!, а не String).\n   * @param options.fieldsTypeMap - необязательный объект Map, в качестве ключей содержащий названия параметров запроса,\n   * а в качестве значения - строку с названием его типа, определенного в схеме сервера GraphQL.\n   * ВАЖНО! - строка также должна включать символ \"!\", если в схеме параметр определен как обязательный.\n   *\n   * @returns - Observable поток с данными типа T, которые будут поступать в рамках сделанной подписки.\n   * ВАЖНО! В потоке будут поступать только обновления для данных, на которые сделана подписка.\n   * Начальные данные в этом потоке не поступают - их требуется получать отдельно (например, используя метод customQuery$).\n   * В ситуациях, где требуется получить некие данные и подписаться на обновления для них, также можно для удобства использовать метод queryAndSubscribe.\n   * @see this.queryAndSubscribe\n   **/\n  customSubscribe$<T extends {}, N extends `${string}`, V = GQLRequestVariables>(\n    name: N,\n    queryObject: ValuesOrBoolean<T>,\n    variables?: V,\n    paramOptions?: QueryGenerationParam<V>,\n    extra?: ExtraSubscriptionOptions,\n  ): Observable<Record<N, T>[N]> {\n    const q = generateQueryString({\n      name,\n      queryObject,\n      variables,\n      requiredFields: paramOptions?.requiredFields,\n      fieldsTypeMap: paramOptions?.fieldsTypeMap,\n    });\n    return this._apollo\n      .subscribe<Record<N, T>, V>({query: gql`subscription ${q}`, variables}, extra)\n      .pipe(\n        map(result => result.data),\n        filter((res): res is Record<N, T> => !!res),\n        map(res => res[name]),\n      );\n  }\n\n  /**\n   * @method queryAndSubscribe()\n   * Метод, объединяющий получение неких первоначальных данных и подписку на их обновление.\n   * @param nameQuery - название операции типа \"query\" - запроса данных, объвленное в схеме сервера GraphQL.\n   * @param nameSubscribe - название операции типа \"subscription\", объвленное в схеме сервера GraphQL  для запрашиваемых данных.\n   * @param queryObject - объект-источник информации о структуре запрашиваемых данных, на которые происходит подписка, реализующий интерфейс ValuesOrBoolean<T>.\n   * @see @alias ValuesOrBoolean<T>\n   * @param uniqueKeyForCompareItem - наименование ключа, значение которого является уникальным для запрашиваемых данных (например,'id').\n   * Необходим для работы внутренней вспомогательной функции обновления изначального набора данных актуальными данными, поступившими в рамках подписки.\n   * @param variables - необязательный - объект с переменными, которые будут использованы в качестве параметров запроса.\n   *  Названия ключей в объекте должны соответствовать названиям параметров, объявленным в GrapQL-схеме сервера.\n   *  В качестве типа значений у параметров допустимо использовать типы - number, string, object или boolean.\n   *  Если в GrapQL-схеме на сервере какие-то из параметров отмечены как обязательные, то названия этих ключей требуется дополнительно передать в requiredFields,\n   *  чтобы генератор строки запроса сделал соответствующие отметки о типе в результирующей строке запроса.\n   * @param paramOptions - необязательный - Обект настройки генерации части строки запроса с описанием типов параметров операции.\n   * @param paramOptions.requiredFields - необязательный массив названий ключей параметров запроса, для которых в схеме был установлен обязательный тип\n   * КРОМЕ ключей, для которых названия типов передаются в `options.fieldsTypeMap`.\n   *    (например у параметра указан тип String!, а не String).\n   * @param paramOptions.fieldsTypeMap - необязательный объект Map, в качестве ключей содержащий названия параметров запроса,\n   * а в качестве значения - строку с названием его типа, определенного в схеме сервера GraphQL.\n   * ВАЖНО! - строка также должна включать символ \"!\", если в схеме параметр определен как обязательный.\n   * @returns - Observable поток с данными, которые будут поступать в рамках сделанной подписки.\n   * Важно! В потоке будут поступать только обновления для данных, на которые сделана подписка.\n   * Начальные данные в этом потоке не поступают - их требуется получать отдельно (например, используя метод customQuery$).\n   **/\n  queryAndSubscribe<\n    T extends {},\n    NQuery extends `${string}`,\n    NSubscribe extends `${string}`,\n    VQ extends OperationVariables = Exclude<GQLRequestVariables, 'query' | 'subscribe'>,\n    VS = Exclude<GQLRequestVariables, 'query' | 'subscribe'>,\n  >(\n    nameQuery: NQuery,\n    nameSubscribe: NSubscribe,\n    queryObject: ValuesOrBoolean<T>,\n    uniqueKeyForCompareItem: keyof T,\n    variables?: {\n      query?: VQ;\n      subscribe?: VS;\n    },\n    paramOptions?: {\n      query?: QueryGenerationParam<VQ>;\n      subscribe?: QueryGenerationParam<VS>;\n    },\n  ): Observable<T[]> {\n    const updateFn: (store: T | T[], subscribeValue: T) => T[] = (store, newValue) => {\n      const array = Array.isArray(store) ? store : [store];\n      const findItem = array.find(\n        item => newValue[uniqueKeyForCompareItem] === item[uniqueKeyForCompareItem],\n      );\n      if (findItem) {\n        Object.assign(findItem, newValue);\n        return array;\n      } else {\n        return [...array, newValue];\n      }\n    };\n\n    const apolloQueryOptions = {\n      query: gql`query ${generateQueryString<ValuesOrBoolean<T>, NQuery, VQ>({\n        name: nameQuery,\n        queryObject,\n        variables: variables?.query,\n        requiredFields: paramOptions?.query?.requiredFields,\n        fieldsTypeMap: paramOptions?.query?.fieldsTypeMap,\n      })}`,\n      variables: variables?.query,\n    };\n\n    return this._apollo.watchQuery<Record<NQuery, T | T[]>, VQ>(apolloQueryOptions).pipe(\n      map(res => {\n        return res.error ?? res.data;\n      }),\n      filter((data): data is Record<NQuery, T | T[]> => !!data),\n      switchMap(result =>\n        this.customSubscribe$<T, NSubscribe, VS>(\n          nameSubscribe,\n          queryObject,\n          variables?.subscribe,\n          paramOptions?.subscribe,\n        ).pipe(\n          startWith(null),\n          map(updatedValue => {\n            const store: T | T[] = deepClone(result[nameQuery]);\n            const final = isValue(updatedValue)\n              ? updateFn(store, deepClone(updatedValue))\n              : Array.isArray(store)\n                ? store\n                : <T[]>[store];\n\n            return final;\n          }),\n        ),\n      ),\n    );\n  }\n}\n","import {EventEmitter, Inject, Injectable, Injector} from '@angular/core';\nimport {deepClone, isValue} from '@axrl/common';\nimport {BehaviorSubject, Observable, catchError, concatMap, map, of, switchMap} from 'rxjs';\nimport {\n  ACTION_FRAGMENTS,\n  Action,\n  CAPTCHA_GET_JOB_FRAGMENTS,\n  CaptchaJob,\n  CaptchaJobPayload,\n  CaptchaTask,\n  InputLocation,\n  LoginPayload,\n  MESSAGE_FRAGMENTS,\n  Message,\n  OTPRequestPayload,\n  OTPResponse,\n  OTP_RESPONSE_FRAGMENTS,\n  RegistrationPayload,\n  Response,\n  RestorePasswordPayload,\n  USER_FRAGMENTS,\n  UpdateUserDataPayload,\n  User,\n  UserResponse,\n  ValuesOrBoolean,\n} from '../models';\nimport {NgGqlStoreService} from './ng-gql-storage.service';\nimport {RequestService} from './request.service';\n\nexport type UserBusEventType =\n  | 'OTPRequest'\n  | 'login'\n  | 'UpdateUserData'\n  | 'RestorePassword'\n  | 'AddDishFavor'\n  | 'captchaGetJob'\n  | 'registrationApp'\n  | 'logout'\n  | 'userDelete'\n  | 'locationCreate'\n  | 'locationDelete'\n  | 'locationSetIsDefault';\n\n/** @private */\ntype UserBusEventMixin<\n  T extends UserBusEventType = UserBusEventType,\n  P extends unknown = unknown,\n  R extends unknown = unknown,\n> = {\n  type: T;\n  payload: P;\n  successCb: (result: R) => void;\n};\n\nexport type UserBusEvent = {\n  /** Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции */\n  errorCb: (err: unknown) => void;\n  /** BehaviorSubject, отслеживающий состояние выполняемого действия. */\n  loading?: BehaviorSubject<boolean>;\n} & (\n  | UserBusEventMixin<'captchaGetJob', CaptchaJobPayload, CaptchaJob<any>>\n  | UserBusEventMixin<'registrationApp', RegistrationPayload, UserResponse>\n  | UserBusEventMixin<'OTPRequest', OTPRequestPayload, OTPResponse>\n  | UserBusEventMixin<'login', LoginPayload, UserResponse>\n  | UserBusEventMixin<'UpdateUserData', UpdateUserDataPayload, UserResponse>\n  | UserBusEventMixin<'RestorePassword', RestorePasswordPayload, UserResponse>\n  | UserBusEventMixin<'AddDishFavor', string, boolean>\n  | UserBusEventMixin<'logout', null, Response>\n  | UserBusEventMixin<'userDelete', string, Response>\n  | UserBusEventMixin<'locationCreate', InputLocation, boolean>\n  | UserBusEventMixin<'locationDelete', string, boolean>\n  | UserBusEventMixin<'locationSetIsDefault', string, boolean>\n);\n\n/**\n * Отсюда выполняются запросы к API через шину событий.\n * Сервис NgGqlUserService содержит методы для отправки событий каждого вида в отдельности,\n * используя для этого единственный универсальный метод сервиса NgGqlUserBusService.\n */\n\n@Injectable()\nexport class NgGqlUserBusService {\n  private _userBus = new EventEmitter<UserBusEvent>();\n\n  readonly userBus$ = this._userBus.asObservable().pipe(\n    switchMap(event => {\n      return this._userServiceReducer(event).pipe(\n        concatMap(result => {\n          setTimeout(() => {\n            const successCb = <\n              (result: CaptchaJob<any> | Response | UserResponse | OTPResponse | boolean) => void\n            >event.successCb;\n            successCb(result);\n\n            if (isValue(event.loading)) {\n              event.loading.next(false);\n            }\n          }, 1);\n          return of(() => {});\n        }),\n        catchError((err: unknown) => {\n          if (isValue(event.loading)) {\n            event.loading.next(false);\n          }\n          event.errorCb(err);\n          console.log(err);\n          return of(() => {});\n        }),\n      );\n    }),\n  );\n\n  constructor(\n    private _injector: Injector,\n    private _storage: NgGqlStoreService,\n    @Inject(ACTION_FRAGMENTS)\n    private _defaultActionFragments: ValuesOrBoolean<Action>,\n    @Inject(MESSAGE_FRAGMENTS)\n    private _defaultMessageFragments: ValuesOrBoolean<Message>,\n    @Inject(CAPTCHA_GET_JOB_FRAGMENTS)\n    private _defaultCaptchaGetJobFragments: ValuesOrBoolean<User>,\n    @Inject(USER_FRAGMENTS)\n    private _defaultUserFragments: ValuesOrBoolean<User>,\n    @Inject(OTP_RESPONSE_FRAGMENTS)\n    private _defaultOTPResponceFragments: ValuesOrBoolean<OTPResponse>,\n  ) {}\n\n  private get _requestService(): RequestService {\n    return this._injector.get(RequestService);\n  }\n\n  emitToBus<T extends UserBusEventType, P extends UserBusEvent['payload'], R>(data: {\n    type: T;\n    payload: P;\n    loading?: BehaviorSubject<boolean>;\n  }): Promise<R> {\n    if (isValue(data.loading)) {\n      data.loading.next(true);\n    }\n    return new Promise<R>((resolve, reject) => {\n      this._userBus.emit(<UserBusEvent>{\n        type: data.type,\n        payload: data.payload,\n        loading: data.loading,\n        successCb: (res: R) => resolve(res),\n        errorCb: (err: unknown) => reject(err),\n      });\n    });\n  }\n\n  private _userServiceReducer(\n    busEvent: UserBusEvent,\n  ): Observable<Parameters<UserBusEvent['successCb']>[0]> {\n    switch (busEvent.type) {\n      case 'OTPRequest':\n        return this._otpRequest$(busEvent.payload);\n      case 'login':\n        return this._login$(busEvent.payload);\n      case 'captchaGetJob':\n        return this._captchaGetJob$(busEvent.payload);\n      case 'registrationApp':\n        return this._registrationApp$(busEvent.payload);\n      case 'RestorePassword':\n        return this._restorePassword$(busEvent.payload);\n      case 'AddDishFavor':\n        return this._addDishFavor$(busEvent.payload);\n      case 'UpdateUserData':\n        return this._updateUserData$(busEvent.payload);\n      case 'logout':\n        return this._logout$();\n      case 'userDelete':\n        return this._userDelete$(busEvent.payload);\n      case 'locationCreate':\n        return this._locationCreate$(busEvent.payload);\n      case 'locationDelete':\n        return this._locationDelete$(busEvent.payload);\n      case 'locationSetIsDefault':\n        return this._locationSetIsDefault$(busEvent.payload);\n    }\n  }\n\n  private _captchaGetJob$<T extends CaptchaTask>(\n    data: CaptchaJobPayload,\n  ): Observable<CaptchaJob<T>> {\n    return this._requestService\n      .customQuery$<\n        CaptchaJob<T>,\n        'captchaGetJob',\n        CaptchaJobPayload\n      >('captchaGetJob', this._defaultCaptchaGetJobFragments, data)\n      .pipe(\n        map(data => {\n          const job: CaptchaJob<T> = deepClone(\n            Array.isArray(data.captchaGetJob) ? data.captchaGetJob[0] : data.captchaGetJob,\n          );\n          if (typeof job.task === 'string') {\n            try {\n              job.task = JSON.parse(job.task);\n              const difficulty = job.task.difficulty;\n              job.task.difficulty = BigInt(String(difficulty).replace('n', ''));\n            } catch (err) {\n              console.log(err);\n              return job;\n            }\n          }\n          return job;\n        }),\n      );\n  }\n\n  /** Обновление данных пользователя (профиль) */\n  private _updateUserData$(data: UpdateUserDataPayload): Observable<UserResponse> {\n    return this._requestService\n      .customMutation$<UserResponse, 'userUpdate', {user: UpdateUserDataPayload}>(\n        'userUpdate',\n        {\n          user: this._defaultUserFragments,\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        {\n          user: data,\n        },\n        {\n          fieldsTypeMap: new Map([['user', 'InputUser!']]),\n        },\n      )\n      .pipe(\n        map(record => {\n          const userResponse = record.userUpdate;\n          if (isValue(userResponse.action)) {\n            const token = userResponse.action.data?.token;\n            setTimeout(() => {\n              this._storage.updateToken(token ?? null);\n            }, 100);\n          }\n          if (isValue(userResponse.user)) {\n            this._storage.updateUser(record.userUpdate.user);\n          }\n          return record.userUpdate;\n        }),\n      );\n  }\n\n  /** Добавляет блюдо в избранное */\n  private _addDishFavor$(dishId: string): Observable<boolean> {\n    return this._requestService\n      .customMutation$<boolean, 'favoriteDish'>('favoriteDish', true, {\n        dishId,\n      })\n      .pipe(map(record => record.favoriteDish));\n  }\n\n  private _restorePassword$(data: RestorePasswordPayload): Observable<UserResponse> {\n    return this._requestService\n      .customMutation$<UserResponse, 'restorePassword', RestorePasswordPayload>(\n        'restorePassword',\n        {\n          user: this._defaultUserFragments,\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        data,\n        {\n          requiredFields: ['login', 'otp', 'password'],\n          fieldsTypeMap: new Map([['captcha', 'Captcha!']]),\n        },\n      )\n      .pipe(map(record => record.restorePassword));\n  }\n\n  private _login$(data: LoginPayload): Observable<UserResponse> {\n    return this._requestService\n      .customMutation$<UserResponse, 'login', LoginPayload>(\n        'login',\n        {\n          user: this._defaultUserFragments,\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        data,\n        {\n          requiredFields: ['login', 'otp'],\n          fieldsTypeMap: new Map([\n            ['phone', 'InputPhone'],\n            ['captcha', 'Captcha!'],\n          ]),\n        },\n      )\n      .pipe(\n        map(record => {\n          const userResponse = record.login;\n          if (isValue(userResponse.action)) {\n            const token = userResponse.action.data?.token;\n            setTimeout(() => {\n              this._storage.updateToken(token ?? null);\n            }, 100);\n          }\n          if (isValue(userResponse.user)) {\n            this._storage.updateUser(record.login.user);\n          }\n          return record.login;\n        }),\n      );\n  }\n\n  private _otpRequest$(data: OTPRequestPayload): Observable<OTPResponse> {\n    return this._requestService\n      .customMutation$<OTPResponse, 'OTPRequest', OTPRequestPayload>(\n        'OTPRequest',\n        this._defaultOTPResponceFragments,\n        data,\n        {\n          requiredFields: ['login'],\n          fieldsTypeMap: new Map([['captcha', 'Captcha!']]),\n        },\n      )\n      .pipe(map(record => record.OTPRequest));\n  }\n\n  private _registrationApp$(data: RegistrationPayload): Observable<UserResponse> {\n    return this._requestService\n      .customMutation$<UserResponse, 'registration', RegistrationPayload>(\n        'registration',\n        {\n          user: this._defaultUserFragments,\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        data,\n        {\n          requiredFields: ['login', 'otp'],\n          fieldsTypeMap: new Map([\n            ['phone', 'InputPhone'],\n            ['captcha', 'Captcha!'],\n          ]),\n        },\n      )\n      .pipe(map(record => record.registration));\n  }\n\n  private _logout$(): Observable<Response> {\n    return this._requestService\n      .customMutation$(\n        'logout',\n        {\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        {},\n      )\n      .pipe(map(record => record.logout));\n  }\n\n  private _userDelete$(otp: string): Observable<Response> {\n    return this._requestService\n      .customMutation$(\n        'userDelete',\n        {\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        {otp},\n        {requiredFields: ['otp']},\n      )\n      .pipe(map(record => record.userDelete));\n  }\n\n  private _locationCreate$(location: InputLocation): Observable<boolean> {\n    return this._requestService\n      .customMutation$<boolean, 'locationCreate', {location: InputLocation}>(\n        'locationCreate',\n        true,\n        {location},\n        {\n          fieldsTypeMap: new Map([['location', 'InputLocation!']]),\n        },\n      )\n      .pipe(map(record => record.locationCreate));\n  }\n\n  private _locationDelete$(locationId: string): Observable<boolean> {\n    return this._requestService\n      .customMutation$<boolean, 'locationDelete', {locationId: string}>(\n        'locationDelete',\n        true,\n        {\n          locationId,\n        },\n        {\n          requiredFields: ['locationId'],\n        },\n      )\n      .pipe(map(record => record.locationDelete));\n  }\n\n  private _locationSetIsDefault$(locationId: string): Observable<boolean> {\n    return this._requestService\n      .customMutation$<boolean, 'locationSetIsDefault', {locationId: string}>(\n        'locationSetIsDefault',\n        true,\n        {\n          locationId,\n        },\n        {\n          requiredFields: ['locationId'],\n        },\n      )\n      .pipe(map(record => record.locationSetIsDefault));\n  }\n}\n","import {Inject, Injectable, Injector} from '@angular/core';\nimport {isValue} from '@axrl/common';\nimport Puzzle from 'crypto-puzzle';\nimport {\n  BehaviorSubject,\n  Observable,\n  catchError,\n  exhaustMap,\n  map,\n  of,\n  shareReplay,\n  switchMap,\n} from 'rxjs';\nimport {\n  CaptchaJob,\n  CaptchaTask,\n  InputLocation,\n  LoginPayload,\n  OTPRequestPayload,\n  OTPResponse,\n  RegistrationPayload,\n  RestorePasswordPayload,\n  USER_FRAGMENTS,\n  USER_LOCATION_FRAGMENTS,\n  USER_ORDER_HYSTORY_FRAGMENTS,\n  UpdateUserDataPayload,\n  User,\n  UserLocation,\n  UserLocationResponse,\n  UserOrderHystory,\n  UserResponse,\n  ValuesOrBoolean,\n} from '../models';\nimport {NgGqlStoreService} from './ng-gql-storage.service';\nimport {NgGqlUserBusService} from './ng-gql-user-bus.service';\nimport {RequestService} from './request.service';\n\n@Injectable()\nexport class NgGqlUserService {\n  private readonly _user$ = this._storage.user.pipe(\n    exhaustMap(user =>\n      isValue(user)\n        ? this._storage.user\n        : this.getToken$().pipe(\n            switchMap(token =>\n              isValue(token)\n                ? this._loadUser$().pipe(\n                    switchMap(user => {\n                      this.updateStorageUser(user);\n                      return this._storage.user;\n                    }),\n                  )\n                : this._storage.user,\n            ),\n          ),\n    ),\n    catchError(err => this._storage.user),\n    shareReplay(1),\n  );\n\n  constructor(\n    private _injector: Injector,\n    private _storage: NgGqlStoreService,\n    private _userBus: NgGqlUserBusService,\n    @Inject(USER_ORDER_HYSTORY_FRAGMENTS)\n    private _defaultUserOrderHystoryFragments: ValuesOrBoolean<UserOrderHystory>,\n    @Inject(USER_FRAGMENTS)\n    private _defaultUserFragments: ValuesOrBoolean<User>,\n    @Inject(USER_LOCATION_FRAGMENTS)\n    private _defaultuserLocationFragments: ValuesOrBoolean<UserLocation>,\n  ) {}\n\n  private get _requestService(): RequestService {\n    return this._injector.get(RequestService);\n  }\n\n  updateStorageUser(newUser: User | null): void {\n    this._storage.updateUser(newUser);\n  }\n\n  loadUserOrderHistory$(options: {skip: number; limit: number}): Observable<UserOrderHystory[]> {\n    return this._storage.token.pipe(\n      switchMap(token =>\n        this._storage.orderHystory.pipe(\n          exhaustMap(hystory => {\n            if (isValue(token)) {\n              if (hystory.length >= options.skip + options.limit) {\n                return of(hystory.slice(0, options.skip + options.limit));\n              } else {\n                return this._requestService\n                  .customQuery$<\n                    UserOrderHystory,\n                    'userOrderHistory',\n                    {\n                      skip: number;\n                      limit: number;\n                    }\n                  >('userOrderHistory', this._defaultUserOrderHystoryFragments, {\n                    skip: options.skip,\n                    limit: options.limit,\n                  })\n                  .pipe(\n                    switchMap(data => {\n                      const result = Array.isArray(data.userOrderHistory)\n                        ? data.userOrderHistory\n                        : [data.userOrderHistory];\n                      this._storage.updateOrderHystory(result);\n                      return this._storage.orderHystory;\n                    }),\n                  );\n              }\n            } else {\n              return of([]);\n            }\n          }),\n        ),\n      ),\n    );\n  }\n\n  getUserLocations$(\n    options: {\n      skip: number;\n      limit: number;\n    },\n    update: boolean = false,\n  ): Observable<UserLocationResponse> {\n    return this._storage.token.pipe(\n      switchMap(token =>\n        this._storage.userLocations.pipe(\n          exhaustMap(data => {\n            if (isValue(token)) {\n              if (\n                !update &&\n                isValue(data) &&\n                data.userLocation.length >= options.skip + options.limit\n              ) {\n                return of({\n                  userLocationCount: data.userLocationCount,\n                  userLocation: data.userLocation.slice(0, options.skip + options.limit),\n                });\n              } else {\n                return this._getUserLocations(options);\n              }\n            } else {\n              return of({\n                userLocationCount: 0,\n                userLocation: [],\n              });\n            }\n          }),\n        ),\n      ),\n    );\n  }\n\n  getUser$(): Observable<User | null> {\n    return this._user$;\n  }\n\n  getToken$(): Observable<string | null> {\n    return this._storage.token;\n  }\n\n  /** Добавляет блюдо в избранное */\n  addDishFavor(dishId: string, loading?: BehaviorSubject<boolean>): Promise<boolean> {\n    return this._userBus.emitToBus({\n      type: 'AddDishFavor',\n      payload: dishId,\n      loading,\n    });\n  }\n\n  /** Обновление данных о пользователе */\n  updateUserData(\n    data: UpdateUserDataPayload,\n    loading?: BehaviorSubject<boolean>,\n  ): Promise<UserResponse> {\n    return this._userBus.emitToBus({\n      type: 'UpdateUserData',\n      payload: data,\n      loading,\n    });\n  }\n\n  captchaGetJob<T extends CaptchaTask>(\n    label: string,\n    loading?: BehaviorSubject<boolean>,\n  ): Promise<CaptchaJob<T>> {\n    return this._userBus.emitToBus({\n      type: 'captchaGetJob',\n      payload: {label},\n      loading,\n    });\n  }\n\n  async getCaptchaSolution(task: CaptchaTask): Promise<bigint> {\n    return await Puzzle.solve(task);\n  }\n\n  registrationApp(\n    data: RegistrationPayload,\n    loading?: BehaviorSubject<boolean>,\n  ): Promise<UserResponse> {\n    return this._userBus.emitToBus({\n      type: 'registrationApp',\n      payload: data,\n      loading,\n    });\n  }\n\n  otpRequest(data: OTPRequestPayload, loading?: BehaviorSubject<boolean>): Promise<OTPResponse> {\n    return this._userBus.emitToBus({\n      type: 'OTPRequest',\n      payload: data,\n      loading,\n    });\n  }\n\n  login(data: LoginPayload, loading?: BehaviorSubject<boolean>): Promise<UserResponse> {\n    return this._userBus.emitToBus({\n      type: 'login',\n      payload: data,\n      loading,\n    });\n  }\n\n  restorePassword(\n    data: RestorePasswordPayload,\n    loading?: BehaviorSubject<boolean>,\n  ): Promise<UserResponse> {\n    return this._userBus.emitToBus({\n      type: 'RestorePassword',\n      payload: data,\n      loading,\n    });\n  }\n\n  async logout(loading?: BehaviorSubject<boolean>): Promise<Response> {\n    this._storage.updateToken(null);\n    this._storage.updateUser(null);\n\n    const reloadTimeout = setTimeout(() => {\n      console.warn('Logout timeout exceeded, reloading page...');\n      window.location.reload();\n    }, 5000);\n\n    try {\n      const res = await this._userBus.emitToBus<'logout', null, Response>({\n        type: 'logout',\n        payload: null,\n        loading,\n      });\n      clearTimeout(reloadTimeout);\n      return res;\n    } catch (error) {\n      window.location.reload();\n      throw error;\n    }\n  }\n\n  async userDelete(otp: string, loading?: BehaviorSubject<boolean>): Promise<Response> {\n    this._storage.updateToken(null);\n    this._storage.updateUser(null);\n\n    const res = await this._userBus.emitToBus<'userDelete', string, Response>({\n      type: 'userDelete',\n      payload: otp,\n      loading,\n    });\n    return res;\n  }\n\n  /** Добавить адрес у пользователя */\n  locationCreate(location: InputLocation, loading?: BehaviorSubject<boolean>): Promise<boolean> {\n    return this._userBus.emitToBus<'locationCreate', InputLocation, boolean>({\n      type: 'locationCreate',\n      payload: location,\n      loading,\n    });\n  }\n\n  /** Удалить сохраненный у пользователя адрес */\n  locationDelete(locationId: string, loading?: BehaviorSubject<boolean>): Promise<boolean> {\n    return this._userBus.emitToBus<'locationDelete', string, boolean>({\n      type: 'locationDelete',\n      payload: locationId,\n      loading,\n    });\n  }\n\n  /** Установить адрес в качестве адреса по-умолчанию */\n  locationSetIsDefault(locationId: string, loading?: BehaviorSubject<boolean>): Promise<boolean> {\n    return this._userBus.emitToBus<'locationSetIsDefault', string, boolean>({\n      type: 'locationSetIsDefault',\n      payload: locationId,\n      loading,\n    });\n  }\n\n  private _loadUser$(): Observable<User | null> {\n    return this._requestService\n      .queryAndSubscribe('user', 'user', this._defaultUserFragments, 'id')\n      .pipe(\n        map(result => {\n          console.log(result);\n          return result[0] ?? null;\n        }),\n      );\n  }\n\n  private _getUserLocations(options: {\n    skip: number;\n    limit: number;\n  }): Observable<UserLocationResponse> {\n    return this._requestService\n      .customQuery$<number, 'userLocationCount', {criteria: {}}>('userLocationCount', 1, {\n        criteria: {},\n      })\n      .pipe(\n        switchMap(data => {\n          const userLocationCount = Array.isArray(data.userLocationCount)\n            ? data.userLocationCount[0]\n            : data.userLocationCount;\n          return this._requestService\n            .customQuery$('userLocation', this._defaultuserLocationFragments, options)\n            .pipe(\n              map(data => {\n                const userLocation = Array.isArray(data.userLocation)\n                  ? data.userLocation\n                  : [data.userLocation];\n                const result = {\n                  userLocationCount,\n                  userLocation,\n                };\n                this._storage.updateUserLocations(result);\n                return result;\n              }),\n            );\n        }),\n      );\n  }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {\n  createObservable,\n  createSubject,\n  deepClone,\n  distinctUntilObjectChanged,\n  isValue,\n} from '@axrl/common';\nimport {BehaviorSubject, Observable, exhaustMap, filter, map, tap} from 'rxjs';\nimport type {\n  CheckPhoneCodeInput,\n  CheckPhoneResponse,\n  Dish,\n  Group,\n  Maintenance,\n  NavBarLinkItem,\n  NavbarMenuLink,\n  Navigation,\n  NavigationBase,\n  NavigationLoader,\n  NavigationsMenuItem,\n  NgGqlConfig,\n  Phone,\n  PhoneKnowledge,\n  VCriteria,\n  ValuesOrBoolean,\n} from '../models';\nimport {\n  DISH_FRAGMENTS,\n  GROUP_FRAGMENTS,\n  MAINTENANCE_FRAGMENTS,\n  NAVIGATION_FRAGMENTS,\n  NG_GQL_CONFIG,\n} from '../models';\nimport {NgGqlStoreService} from './ng-gql-storage.service';\nimport {RequestService} from './request.service';\n\n@Injectable()\n/** Основной сервис для работы с библиотекой. Содержит все необходимые методы для управления сайтом. */\nexport class NgGqlService {\n  private _pendingLoadNavBar = createSubject<boolean>(false);\n  private _pendingLoadNavigation = createSubject<boolean>(false);\n\n  constructor(\n    private _requestService: RequestService,\n    private _storage: NgGqlStoreService,\n    @Inject(NG_GQL_CONFIG) private _config: NgGqlConfig,\n    @Inject(NAVIGATION_FRAGMENTS)\n    private _defaultNavigationFragments: ValuesOrBoolean<Navigation>,\n    @Inject(MAINTENANCE_FRAGMENTS)\n    private _defaultMaintenanceFragments: ValuesOrBoolean<Maintenance>,\n    @Inject(GROUP_FRAGMENTS)\n    private _defaultGroupFragments: ValuesOrBoolean<Group>,\n    @Inject(DISH_FRAGMENTS) private _defaultDishFragments: ValuesOrBoolean<Dish>,\n  ) {}\n\n  getNgGqlConfig(): NgGqlConfig {\n    return deepClone(this._config);\n  }\n\n  /**\n   * @method getNavigation$()\n   * Используется для получения массива обьектов навигации для различных компонентов приложения.\n   * @param options - объект NavigationLoader. Обязателен, при использовании нестандартной схемы навигации в приложении.\n   * @see @interface NavigationLoader<T>\n   */\n  getNavigation$<T extends NavigationBase>(options: NavigationLoader<T>): Observable<T[]>;\n  /**\n   * @method getNavigation$()\n   * Используется для получения массива обьектов навигации для различных компонентов приложения.\n   * Если приложение использует стандартную механику навигации, параметр `options` - не требуется.\n   */\n  getNavigation$(): Observable<Navigation[]>;\n  /**\n   * @method getNavigation$()\n   * Используется для получения массива обьектов навигации для различных компонентов приложения.\n   * Если приложение использует стандартную механику навигации, параметр `options` - не требуется.\n   * Если приложение использует нестандартную механику навигации, параметр `options` - обязательный.\n   * @param options - объект NavigationLoader.\n   * Обязателен, при использовании нестандартной схемы навигации в приложении.\n   * @see @interface NavigationLoader<T>\n   */\n  getNavigation$<T extends NavigationBase = Navigation>(\n    options?: NavigationLoader<T>,\n  ): Observable<T[]> {\n    return this._pendingLoadNavigation.asObservable().pipe(\n      filter(pending => !pending),\n      exhaustMap(() => this._loadNavigation(options)),\n    );\n  }\n\n  /** Список ссылок для необходимого раздела навигации */\n  getNavigationPoints(\n    slug: 'header' | 'footer' | 'social' | string,\n  ): Observable<NavigationsMenuItem[]> {\n    return this.getNavigation$().pipe(\n      map(data =>\n        (data.find(item => item.mnemonicId == slug)?.navigation_menu || [])\n          .filter(\n            item =>\n              isValue(item.link) && item.active && (!isValue(item.visible) || item.visible == true),\n          )\n          .map(\n            item =>\n              <NavigationsMenuItem>{\n                label: item.label,\n                link:\n                  item.link[0] == '/' || item.link.includes('http') ? item.link : `/${item.link}`,\n                active: item.active ?? true,\n                visible: item.visible ?? true,\n                icon: item.icon ? `app-${item.icon.replace('app-', '')}` : undefined,\n                groupSlug: item.groupSlug,\n              },\n          ),\n      ),\n    );\n  }\n\n  /** Возвращает ссылку на страницу, которая будет стартовой для меню */\n  getStartMenuSlug(): Observable<[string[], string | undefined]> {\n    return this.getNavBarMenu().pipe(\n      map(menu => {\n        const navbarmenu: NavBarLinkItem[] = menu.map(group => ({\n          id: group.id,\n          name: group.name,\n          icon: group.icon,\n          slug: group.slug,\n          link: [[`/menu/${group.slug}`], undefined],\n        }));\n\n        return navbarmenu[0].link;\n      }),\n    );\n  }\n\n  getMaintenance$(): Observable<Maintenance> {\n    return this._requestService\n      .queryAndSubscribe('maintenance', 'maintenance', this._defaultMaintenanceFragments, 'id')\n      .pipe(\n        filter(result => result.length > 0),\n        map(res => res[0]),\n      );\n  }\n\n  /**\n   * Внутренний метод, используемый для загрузки основного - \"корневого\" списка групп.\n   * @param slug - init- slug.\n   * Либо принимается извне через внутренний поток `initGroupSlug$`, либо формируется на основании данных в массиве Navigation[], загруженном на старте приложения.\n   * Чтобы обновлять значение в `initGroupSlug$` используется метод `updateInitGroupSlug`\n   * @returns\n   */\n  getGroup(slug: string, concept: string = 'origin'): Observable<Group | null> {\n    const getIdsFromPartialDish = (dishes?: Array<Partial<Group>>): string[] =>\n      dishes?.map(dish => dish.id).filter((id): id is string => isValue(id)) ?? [];\n\n    return this._storage.groups.pipe(\n      exhaustMap(groups => {\n        const group = groups.find(g => g.slug === slug && g.concept === concept);\n        if (isValue(group)) {\n          return createObservable(group);\n        } else {\n          return this._requestService\n            .customQuery$<Group, 'group', VCriteria>('group', this._defaultGroupFragments, {\n              criteria: {\n                slug,\n                concept,\n              },\n            })\n            .pipe(\n              map(data => {\n                const group = deepClone(Array.isArray(data.group) ? data.group[0] : data.group);\n\n                if (isValue(group)) {\n                  group.dishesIds = getIdsFromPartialDish(group.dishes);\n                  group.childGroups.forEach(childGroup => {\n                    childGroup.dishesIds = getIdsFromPartialDish(childGroup.dishes);\n                  });\n                  groups.push(group);\n                  this._storage.updateMenuGroups(groups);\n                  return group;\n                } else {\n                  return null;\n                }\n              }),\n            );\n        }\n      }),\n    );\n  }\n\n  /**\n   * @method addAmountToDish()\n   * Метод-хелпер, используемый для добавления модификаторам блюда параметра amount и установки ему значения, в случае, если они у него имеются.\n   * @param sourceDish - объект с исходными данными блюда.\n   * @returns новый, дополненный объект с данными блюда.\n   */\n  addAmountToDish(sourceDish: Dish): Dish {\n    return {\n      ...sourceDish,\n      additionalInfo: this._getAdditionalInfo(sourceDish),\n      isLoading: sourceDish.isLoading ?? createSubject<boolean>(false),\n      modifiers: sourceDish.modifiers\n        ? sourceDish.modifiers.map((groupModifier, groupIndex) => ({\n            ...groupModifier,\n            childModifiers: groupModifier.childModifiers\n              ?.filter(childModifier => isValue(childModifier.dish))\n              .map((childModifier, childIndex) => ({\n                ...childModifier,\n                amount:\n                  groupIndex === 0 &&\n                  childIndex === 0 &&\n                  groupModifier.childModifiers?.length === 2 &&\n                  groupModifier.minAmount === 1 &&\n                  groupModifier.maxAmount === 1\n                    ? 1\n                    : childModifier.defaultAmount ?? 0,\n              })),\n          }))\n        : [],\n    };\n  }\n\n  getDishes$(ids: string[]): Observable<Dish[]> {\n    return this._getDishes(ids).pipe(distinctUntilObjectChanged());\n  }\n\n  getDishBySlug(slug: string): Observable<Dish> {\n    return this._getDishes([slug], false).pipe(\n      map(dishes => dishes[0]),\n      filter((dish): dish is Dish => isValue(dish)),\n      distinctUntilObjectChanged(),\n    );\n  }\n\n  getNavBarMenu(concept?: string, topLevelGroupId?: string): Observable<NavbarMenuLink[]> {\n    return this._pendingLoadNavBar.asObservable().pipe(\n      filter(pending => !pending),\n      exhaustMap(() => this._loadNavBarMenu(concept, topLevelGroupId)),\n    );\n  }\n\n  /**\n   * @method isKnownPhone$\n   * Проверяет переданный номер телефона на \"знакомость\".\n   * @param phone - Объект с данными номера телефона.\n   * @returns\n   */\n  isKnownPhone$(\n    phone: Phone,\n    customvOb?: ValuesOrBoolean<PhoneKnowledge>,\n  ): Observable<PhoneKnowledge[]> {\n    const phonevOb: ValuesOrBoolean<PhoneKnowledge> = {\n      id: true,\n      phone: true,\n      isFirst: true,\n      isConfirm: true,\n      codeTime: true,\n      confirmCode: true,\n    };\n    const vOb = customvOb ? {...phonevOb, ...customvOb} : phonevOb;\n    return this._requestService\n      .customQuery$<\n        PhoneKnowledge,\n        'isKnownPhone',\n        {phone: Phone}\n      >('isKnownPhone', vOb, {phone}, {fieldsTypeMap: new Map([['phone', 'InputPhone!']])})\n      .pipe(\n        map(data => (Array.isArray(data.isKnownPhone) ? data.isKnownPhone : [data.isKnownPhone])),\n      );\n  }\n\n  phoneKnowledgeGetCode$(phone: Phone): Observable<CheckPhoneResponse[]> {\n    return this._requestService\n      .customQuery$<CheckPhoneResponse, 'phoneKnowledgeGetCode', {phone: Phone}>(\n        'phoneKnowledgeGetCode',\n        {\n          type: true,\n          title: true,\n          message: true,\n          confirmed: true,\n          firstbuy: true,\n        },\n        {phone},\n        {fieldsTypeMap: new Map([['phone', 'InputPhone!']])},\n      )\n      .pipe(\n        map(data =>\n          Array.isArray(data.phoneKnowledgeGetCode)\n            ? data.phoneKnowledgeGetCode\n            : [data.phoneKnowledgeGetCode],\n        ),\n      );\n  }\n\n  phoneKnowledgeSetCode$(data: CheckPhoneCodeInput): Observable<CheckPhoneResponse> {\n    return this._requestService\n      .customMutation$<CheckPhoneResponse, 'phoneKnowledgeSetCode', CheckPhoneCodeInput>(\n        'phoneKnowledgeSetCode',\n        {\n          type: true,\n          title: true,\n          message: true,\n          confirmed: true,\n          firstbuy: true,\n        },\n        data,\n        {\n          fieldsTypeMap: new Map([\n            ['phone', 'InputPhone!'],\n            ['code', 'String!'],\n          ]),\n        },\n      )\n      .pipe(map(result => result.phoneKnowledgeSetCode));\n  }\n\n  destroy(): void {\n    Object.values(this)\n      .filter(\n        (property): property is BehaviorSubject<unknown> => property instanceof BehaviorSubject,\n      )\n      .forEach(property => property.complete());\n  }\n\n  private _getDishes(items: string[], isId: boolean = true): Observable<Dish[]> {\n    return this._storage.dishes.pipe(\n      exhaustMap(dishes => {\n        const dishesInStock = dishes.filter(item => items.includes(isId ? item.id : item.slug));\n\n        if (dishesInStock.length == items.length) {\n          return createObservable(dishesInStock);\n        } else {\n          const dishesNotInStock = items.filter(\n            item => !dishes.find(dish => item === (isId ? dish.id : dish.slug)),\n          );\n          const criteriaKey = isId ? 'id' : 'slug';\n\n          return this._requestService\n            .customQuery$<Dish, 'dish', VCriteria>('dish', this._defaultDishFragments, {\n              criteria: {\n                [criteriaKey]: dishesNotInStock,\n              },\n            })\n            .pipe(\n              map(loadedDishes => {\n                const result = (\n                  Array.isArray(loadedDishes.dish) ? loadedDishes.dish : [loadedDishes.dish]\n                ).map(dish => this.addAmountToDish(dish));\n                dishes.push(...result);\n                this._storage.updateDishes(dishes);\n                return [...dishesInStock, ...result];\n              }),\n            );\n        }\n      }),\n    );\n  }\n\n  private _getAdditionalInfo(dish: Partial<Dish>): Dish['additionalInfo'] {\n    if (\n      dish.additionalInfo &&\n      typeof dish.additionalInfo == 'string' &&\n      dish.additionalInfo.includes('{\"')\n    ) {\n      try {\n        return JSON.parse(dish.additionalInfo);\n      } catch (error) {\n        return dish.additionalInfo;\n      }\n    } else {\n      return dish.additionalInfo;\n    }\n  }\n\n  private _loadNavigation<T extends NavigationBase = Navigation>(\n    options?: NavigationLoader<T>,\n  ): Observable<T[]> {\n    this._pendingLoadNavigation.next(true);\n    return this._storage.navigation.pipe(\n      exhaustMap(data => {\n        return isValue(data)\n          ? createObservable(<T[]>data)\n          : this._requestService\n              .queryAndSubscribe(\n                options?.nameQuery ?? 'navigation',\n                options?.nameSubscribe ?? 'navigation',\n                options?.queryObject ??\n                  <NavigationLoader<T>['queryObject']>this._defaultNavigationFragments,\n                options?.uniqueKeyForCompareItem ??\n                  <NavigationLoader<T>['uniqueKeyForCompareItem']>'mnemonicId',\n              )\n              .pipe(\n                map(navigationData => {\n                  this._storage.updateNavigation(navigationData);\n                  return navigationData;\n                }),\n              );\n      }),\n      tap(() => this._pendingLoadNavigation.next(false)),\n    );\n  }\n\n  private _loadNavBarMenu(\n    concept: string = 'origin',\n    topLevelGroupId?: string,\n  ): Observable<NavbarMenuLink[]> {\n    this._pendingLoadNavBar.next(true);\n    return this._storage.navBarMenus.pipe(\n      exhaustMap(items => {\n        const item = items.find(\n          element => element.concept === concept && element.topLevelGroupId === topLevelGroupId,\n        );\n        return isValue(item)\n          ? createObservable(item.menu)\n          : this._requestService\n              .customQuery$<NavbarMenuLink, 'menu'>(\n                'menu',\n                {\n                  name: true,\n                  slug: true,\n                  id: true,\n                  icon: true,\n                },\n                {\n                  concept,\n                },\n              )\n              .pipe(\n                map(data => {\n                  const rawResult = Array.isArray(data.menu) ? data.menu : [data.menu];\n                  const result = rawResult.reduce<NavbarMenuLink[]>(this._addIfItemNotExist, []);\n                  const newItems = [...items, {concept, topLevelGroupId, menu: result}];\n\n                  this._storage.updateNavBarMenus(newItems);\n\n                  return result;\n                }),\n              );\n      }),\n      tap(() => this._pendingLoadNavBar.next(false)),\n    );\n  }\n\n  private _addIfItemNotExist = <T extends {id: string | number}>(\n    accumulator: T[],\n    current: T,\n  ): T[] => {\n    const isAdded = accumulator.find(item => item.id === current.id);\n\n    if (!isValue(isAdded)) {\n      accumulator.push(current);\n    }\n\n    return accumulator;\n  };\n}\n","import {EventEmitter, Inject, Injectable} from '@angular/core';\nimport {isValue} from '@axrl/common';\nimport {BehaviorSubject, distinctUntilChanged, filter, map, of, switchMap} from 'rxjs';\nimport {NG_GQL_CONFIG} from '../models/ng-gql-config';\nimport type {NgGqlConfig} from '../models/ng-gql-config/ng-gql-config';\nimport {ORDERID_FACTORY_FN} from '../models/order';\n\nexport type StorageOrderTokenEvent = StorageOrderTokenSetOrderId | StorageOrderTokenRemoveOrderId;\n\nexport interface StorageOrderTokenSetOrderId {\n  event: 'setOrderId';\n  data: {\n    orderId: string;\n    alternativeToken?: string;\n  };\n}\n\nexport interface StorageOrderTokenRemoveOrderId {\n  event: 'removeOrderId';\n  newOrderId?: string;\n}\n\n/**\n * Класс, в который вынесена логика работы с хранилищем localStorage.\n * Ключевая необходимость использования этого класса вместо работы с хранилищем напрямую - методы StorageWrapper также инициируют отправку\n * браузерного события 'storage' в объекте window В ТЕКУЩЕЙ ВКЛАДКЕ БРАУЗЕРА.\n * Это важно, поскольку стандартные методы работы со Storage иницируют StorageEvent только для ДРУГИХ ВКЛАДОК браузера и не происходят в самой\n * вкладке, где произошли изменения.\n */\n@Injectable()\nexport class NqGqlLocalStorageWrapper {\n  /**\n   * Поток для изменения \"на лету\" токена, с которым в localStorage сохраняется id заказа.\n   * Необходим для реализации на сайте \"мультикорзины\" - нескольких параллельных корзин, между которыми пользователь может переключаться при переходе по страницам сайта.\n   */\n  private readonly _storageOrderIdToken$ = new BehaviorSubject<string | null>(\n    this._config?.orderIdStorageToken !== undefined\n      ? this._config.orderIdStorageToken\n      : `${window.location.host}-orderId\n       `,\n  );\n\n  private __storageActionBus$ = new EventEmitter<StorageOrderTokenEvent>();\n  private readonly _storageActionBus$ = this.__storageActionBus$.pipe(\n    switchMap(busEvent => {\n      if (busEvent.event == 'setOrderId' && isValue(busEvent.data.alternativeToken)) {\n        this._setToStorage(busEvent.data.alternativeToken, busEvent.data.orderId);\n        this.updateStorageOrderIdToken(busEvent.data.alternativeToken);\n        return of(() => {});\n      } else {\n        return this.storageOrderIdToken$.pipe(\n          map(storageOrderIdToken => {\n            switch (busEvent.event) {\n              case 'removeOrderId':\n                if (busEvent.newOrderId) {\n                  this._setToStorage(storageOrderIdToken, busEvent.newOrderId);\n                } else {\n                  this._removeFromStorage(storageOrderIdToken);\n                }\n                break;\n              case 'setOrderId':\n                this._setToStorage(storageOrderIdToken, busEvent.data.orderId);\n                break;\n            }\n          }),\n        );\n      }\n    }),\n  );\n\n  private readonly _storageActionBusSubscription$ = this._storageActionBus$.subscribe({\n    next: () => {},\n    error: () => {},\n    complete: () => {},\n  });\n\n  readonly storageOrderIdToken$ = this._storageOrderIdToken$.pipe(\n    filter((storageOrderIdToken): storageOrderIdToken is string => !!storageOrderIdToken),\n    distinctUntilChanged(),\n  );\n\n  constructor(\n    @Inject(NG_GQL_CONFIG) private _config: NgGqlConfig,\n    @Inject(ORDERID_FACTORY_FN) private _orderIdFactoryFn: () => string,\n  ) {}\n\n  /**\n   * @method setOrderId()\n   * @param orderId - id Заказа, который требуется сохранить в localStorage с ключом @interface `NgGqlConfig.orderIdStorageToken` (по умолчанию -'$\\{ window.location.host \\}-orderId').\n   * Id хранится в виде обьекта, содержащего помимо савмого id также временную метку создания записи (в виде unix-timestamp).\n   * Старые orderId не используются - метод вернет `undefined`, в API будет запрошен новый заказ, а данные в localStorage обновятся.\n   * Значение считается устаревшим, если с момента его добавления прошло больше времени, чем указано в `NgGqlConfig.obsolescence` (по умолчанию - 14 дней).\n   * @param storageOrderIdToken - необязательный альтернативный токен для сохранения orderId в localstorage.\n   * Также все последующие операции в localStorage данными заказа начнут использовать этот токен, т.к. обновится внутренняя подписка информации об используемом токене.\n   */\n  setOrderId(orderId: string, storageOrderIdToken?: string): void {\n    this.__storageActionBus$.emit({\n      event: 'setOrderId',\n      data: {\n        orderId,\n        alternativeToken: storageOrderIdToken,\n      },\n    });\n  }\n\n  /**\n   * @method removeOrderId()\n   * Удаляет сохраненный в localStorage id заказа.\n   */\n  removeOrderId(newOrderId?: string): void {\n    this.__storageActionBus$.emit({\n      event: 'removeOrderId',\n      newOrderId,\n    });\n  }\n\n  startStorageEventFactory(key: string): StorageEvent {\n    return new StorageEvent('storage', {\n      key,\n      oldValue: window.localStorage.getItem(key),\n      newValue: window.localStorage.getItem(key),\n      storageArea: window.localStorage,\n      url: window.location.href,\n    });\n  }\n\n  /**\n   * @method getOrderId()\n   *  @returns Возвращает orderId, сохраненный ранее в localStorage с ключом @interface `NgGqlConfig.orderIdStorageToken` (по умолчанию -'$\\{ window.location.host \\}-orderId').\n   * Id хранится в виде обьекта, содержащего помимо савмого id также временную метку создания записи (в виде unix-timestamp).\n   * Старые orderId не используются - метод вернет `undefined`, в API будет запрошен новый заказ, а данные в localStorage обновятся.\n   * Значение считается устаревшим, если с момента его добавления прошло больше времени, чем указано в `NgGqlConfig.obsolescence` (по умолчанию - 14 дней).\n   */\n  getOrderId(\n    storageOrderIdToken: string,\n    storageOrderId?: string,\n    generateNew: boolean = false,\n  ): string {\n    const generateId = (token: string): string => {\n      const orderId = this._orderIdFactoryFn();\n      const cartData = JSON.stringify({orderId: orderId, dt: Date.now()});\n      window.localStorage.setItem(token, cartData);\n      return orderId;\n    };\n\n    if (generateNew) {\n      return generateId(storageOrderIdToken);\n    }\n\n    try {\n      const cartString = isValue(storageOrderId)\n        ? storageOrderId\n        : window.localStorage.getItem(storageOrderIdToken);\n      if (cartString) {\n        const cartData: {\n          orderId: string;\n          dt: number;\n        } = JSON.parse(cartString);\n        const idObsolescence =\n          43200000 * (isValue(this._config.obsolescence) ? this._config.obsolescence : 14);\n        if (Date.now() - cartData.dt > idObsolescence) {\n          return generateId(storageOrderIdToken);\n        } else {\n          return cartData.orderId;\n        }\n      } else {\n        return generateId(storageOrderIdToken);\n      }\n    } catch (error) {\n      return generateId(storageOrderIdToken);\n    }\n  }\n\n  /**\n   * @method updateStorageOrderIdToken()\n   * Реализация \"мульткорзины\".\n   * Предназначен для переключения между корзинами, каждая из которых хранятся в localStorage со своим токеном.\n   * Предназначен для переключения потоков с\n   * @param newToken\n   */\n  updateStorageOrderIdToken(newToken: string): void {\n    this._storageOrderIdToken$.next(newToken);\n  }\n\n  destroy(): void {\n    this._storageActionBusSubscription$.unsubscribe();\n  }\n\n  private _notifyStorageUpdate(\n    key: string,\n    oldValue: string | null,\n    newValue: string | null,\n  ): void {\n    window.dispatchEvent(\n      new StorageEvent('storage', {\n        key,\n        oldValue,\n        newValue,\n        storageArea: window.localStorage,\n        url: window.location.href,\n      }),\n    );\n  }\n\n  /**\n   *\n   * @param key ключ, с которым данные будут записаны в Storage\n   * @param orderId сохраняемое значение\n   * @param emitEvent требуется ли создавать StorageEvent для подписчиков об изменении значения\n   */\n  private _setToStorage(key: string, orderId: string, emitEvent = true): void {\n    const storageOrderId = this.getOrderId(key);\n    if (!storageOrderId || orderId !== storageOrderId) {\n      const oldValue = window.localStorage.getItem(key);\n      const newValue = JSON.stringify({orderId: orderId, dt: Date.now()});\n      window.localStorage.setItem(key, newValue);\n      if (emitEvent) {\n        this._notifyStorageUpdate(key, oldValue, newValue);\n      }\n    }\n  }\n\n  private _removeFromStorage(key: string): void {\n    const oldValue = window.localStorage.getItem(key);\n    const newValue = null;\n    window.localStorage.removeItem(key);\n    this._notifyStorageUpdate(key, oldValue, newValue);\n  }\n}\n","import {EventEmitter, Inject, Injectable} from '@angular/core';\nimport {deepClone, isValue} from '@axrl/common';\nimport type {ScanFormType} from '@axrl/ngx-extended-form-builder';\nimport type {BehaviorSubject, Observable} from 'rxjs';\nimport {\n  catchError,\n  combineLatest,\n  concatMap,\n  distinctUntilKeyChanged,\n  exhaustMap,\n  filter,\n  fromEvent,\n  map,\n  mergeWith,\n  of,\n  startWith,\n  switchMap,\n} from 'rxjs';\nimport type {\n  Action,\n  AddToOrderInput,\n  CartBusEvent,\n  CheckOrderInput,\n  CheckResponse,\n  Dish,\n  Message,\n  Modifier,\n  NgGqlConfig,\n  Order,\n  OrderForm,\n  OrderModifier,\n  PaymentMethod,\n  PickupPoint,\n  RemoveOrSetAmountToDish,\n  SendOrderInput,\n  SetDishCommentInput,\n  UpdateOrderInput,\n  User,\n  ValuesOrBoolean,\n} from '../models';\nimport {\n  ACTION_FRAGMENTS,\n  DISH_FRAGMENTS,\n  MESSAGE_FRAGMENTS,\n  NG_GQL_CONFIG,\n  ORDERID_FACTORY_FN,\n  ORDER_FRAGMENTS,\n  PAYMENT_METHOD_FRAGMENTS,\n} from '../models';\nimport {NgGqlStoreService} from './ng-gql-storage.service';\nimport {NgGqlUserBusService} from './ng-gql-user-bus.service';\nimport {NgGqlUserService} from './ng-gql-user.service';\nimport {NgGqlService} from './ng-gql.service';\nimport {RequestService} from './request.service';\nimport {NqGqlLocalStorageWrapper} from './storage-wrapper';\n\n@Injectable()\nexport class NgOrderService {\n  private _orderBus = new EventEmitter<CartBusEvent>();\n\n  private readonly _order$: Observable<Order> = this._storageWrapper.storageOrderIdToken$.pipe(\n    switchMap(storageOrderIdToken =>\n      fromEvent<StorageEvent>(window, 'storage', {\n        passive: true,\n      }).pipe(\n        startWith(this._storageWrapper.startStorageEventFactory(storageOrderIdToken)),\n        filter(event => event.key === storageOrderIdToken),\n        distinctUntilKeyChanged('key'),\n        switchMap(event => {\n          const storageOrderId = this._storageWrapper.getOrderId(\n            storageOrderIdToken,\n            event.newValue ?? undefined,\n          );\n          return this._loadCurrentOrNewOrder(storageOrderId, storageOrderIdToken);\n        }),\n      ),\n    ),\n    switchMap(order => {\n      const storageOrderId = order.id;\n\n      return combineLatest([\n        this._getPaymentMethods$(storageOrderId),\n        this._ngGqlUser.getUser$(),\n        this.getPickupPoints(),\n      ]).pipe(\n        map(([methods, user, points]) => {\n          const notPaymentId = !isValue(order.paymentMethod) || !isValue(order.paymentMethod?.id);\n\n          if (notPaymentId && methods.length > 0) {\n            order.paymentMethod = {\n              id: methods[0].id,\n              title: methods[0].title,\n            };\n          }\n\n          if (!isValue(order.pickupPoint)) {\n            order.pickupPoint = {\n              id: null,\n              address: null,\n              title: null,\n              order: null,\n              enable: null,\n              phone: null,\n            };\n          } else {\n            const point = points.find(pickupPoint => pickupPoint.id === order.pickupPoint?.id);\n            if (isValue(point)) {\n              order.pickupPoint = deepClone(point);\n            }\n          }\n\n          if (isValue(user)) {\n            if (!isValue(order.customer)) {\n              order.customer = {};\n            }\n\n            if (!isValue(order.customer?.name)) {\n              order.customer.name = this._getOrderCustomerName(user);\n            }\n\n            if (!isValue(order.customer?.phone)) {\n              order.customer.phone = {};\n            }\n\n            if (!isValue(order.customer?.phone.code)) {\n              order.customer.phone.code = user.phone?.code ?? this._config.phoneCode;\n            }\n\n            if (!isValue(order.customer?.phone.number)) {\n              order.customer.phone.number = user.phone?.number;\n            }\n\n            if (!isValue(order.spendBonus)) {\n              order.spendBonus = {\n                adapter: null,\n                amount: null,\n                bonusProgramId: null,\n                bonusProgramName: null,\n              };\n            }\n          }\n\n          this._storage.updateOrder(order);\n          this._storage.updatePaymentMethods(methods);\n\n          return order;\n        }),\n      );\n    }),\n  );\n\n  /**\n   * Внутренний поток-шина для событий, ассоциированных с действиями, которыми необходимо выполнить с заказом (добавить/удалить блюдо, проверить заказ, отправить на проверку и тп.).\n   * Используется только в случае, если в @see this.config параметр busSubscribeMode установлен в значении 'custom' для самостоятельного управления подпиской на стороне приложения.\n   * Использование этого потока и событий внутри него извне не подразумевается и не предусматривается,\n   * Для выполнения действий с заказом, необходимо использовать соответствующие методы:\n   * @see this.addToOrder\n   * @see this.removeFromOrder\n   * @see this.checkOrder\n   * @see this.sendOrder\n   * @see this.setDishAmount\n   * @see this.setDishComment\n   */\n  private readonly _orderBus$: Observable<void | (() => void)> = this._orderBus.asObservable().pipe(\n    concatMap(busEvent => {\n      const reducer = (busEventData: CartBusEvent): Observable<Order | CheckResponse> => {\n        switch (busEventData.event) {\n          case 'add':\n            return this._addDishToOrder$(busEventData.data);\n          case 'remove':\n            return this._removeDishFromOrder$(busEventData.data);\n          case 'check':\n            return this._checkOrder$(busEventData.data);\n          case 'order':\n            return this._sendOrder$(busEventData.data);\n          case 'clone':\n            return this._cloneOrder$(busEventData.data);\n          case 'update':\n            return this._updateOrder$(busEventData.data);\n          case 'setDishAmount':\n            return this._setDishAmount$(busEventData.data);\n          case 'setCommentToDish':\n            return this._setDishComment$(busEventData.data);\n        }\n      };\n      return reducer(busEvent).pipe(\n        map(result => {\n          if (isValue(busEvent.isLoading)) {\n            busEvent.isLoading.next(false);\n          }\n          if (isValue(busEvent.successCb)) {\n            busEvent.successCb(<Order & CheckResponse>result);\n          }\n\n          if (isValue(result.message) && typeof result.message === 'object') {\n            this._requestService.emitMessageEvent(result.message);\n          }\n\n          if ('action' in result && isValue(result.action)) {\n            this._requestService.emitActionEvent(result.action);\n          }\n        }),\n        catchError((err: unknown) => {\n          if (isValue(busEvent.isLoading)) {\n            busEvent.isLoading.next(false);\n          }\n          if (busEvent.errorCb) {\n            busEvent.errorCb(err);\n          }\n          if (this._config.debugMode) {\n            alert(JSON.stringify(err));\n          }\n          return of(() => {});\n        }),\n      );\n    }),\n    mergeWith(this._userBusService.userBus$),\n  );\n\n  private readonly _orderBusSubscription$ =\n    this._config.busSubscribeMode === 'subscribe'\n      ? this._orderBus$.subscribe({\n          next: () => {},\n          error: () => {},\n        })\n      : undefined;\n  private readonly _orderSubscription$ = this._order$.subscribe();\n\n  get orderBus$(): Observable<void | (() => void)> {\n    return this._orderBus$;\n  }\n\n  constructor(\n    private _requestService: RequestService,\n    private _storage: NgGqlStoreService,\n    private _storageWrapper: NqGqlLocalStorageWrapper,\n    private _userBusService: NgGqlUserBusService,\n    private _ngGqlService: NgGqlService,\n    private _ngGqlUser: NgGqlUserService,\n    @Inject(NG_GQL_CONFIG) private _config: NgGqlConfig,\n    @Inject(PAYMENT_METHOD_FRAGMENTS)\n    private _defaultPaymentMethodFragments: ValuesOrBoolean<PaymentMethod>,\n    @Inject(ORDER_FRAGMENTS)\n    private _defaultOrderFragments: ValuesOrBoolean<Order>,\n    @Inject(DISH_FRAGMENTS) private _defaultDishFragments: ValuesOrBoolean<Dish>,\n    @Inject(ACTION_FRAGMENTS)\n    private _defaultActionFragments: ValuesOrBoolean<Action>,\n    @Inject(MESSAGE_FRAGMENTS)\n    private _defaultMessageFragments: ValuesOrBoolean<Message>,\n  ) {}\n\n  /**\n   * @method updateStorageOrderIdToken()\n   * @see this.StorageWrapper.updateStorageOrderIdToken()\n   */\n  updateStorageOrderIdToken(newToken: string): void {\n    this._storageWrapper.updateStorageOrderIdToken(newToken);\n  }\n\n  paymentLink$(phone: string, fromPhone: string, orderId: string): Observable<any> {\n    return this._requestService\n      .customMutation$(\n        'paymentLink',\n        {\n          paymentLink: 1,\n        },\n        orderId\n          ? {\n              orderId,\n              phone,\n              fromPhone,\n            }\n          : {\n              phone,\n              fromPhone,\n            },\n      )\n      .pipe(\n        catchError(error => {\n          if (this._config.debugMode) {\n            alert(error);\n          }\n          this._requestService.emitMessageEvent({\n            type: 'info',\n            title: 'Failed to send payment link.',\n            message: error.message,\n          });\n          return of(() => {});\n        }),\n      );\n  }\n\n  /**\n   * @method getOrderPaymentMethods$()\n   * @returns Возвращает поток Observable с массивом доступных для этого заказа способов оплаты `PaymentMethod`.\n   */\n  getOrderPaymentMethods$(): Observable<PaymentMethod[]> {\n    return this._storage.paymentMethods;\n  }\n\n  /**\n   * @method () getOrder\n   * @returns Возвращает поток Observable с данными текущего заказа, оформление которого не завершено.\n   */\n  getOrder(): Observable<Order> {\n    return this._storage.order;\n  }\n\n  /**\n   * @method () resetOrder\n   * @returns Remove order\n   */\n  resetOrder(): void {\n    this._storageWrapper.storageOrderIdToken$\n      .pipe(\n        switchMap(storageOrderIdToken =>\n          fromEvent<StorageEvent>(window, 'storage', {\n            passive: true,\n          }).pipe(\n            startWith(this._storageWrapper.startStorageEventFactory(storageOrderIdToken)),\n            filter(event => event.key === storageOrderIdToken),\n            distinctUntilKeyChanged('key'),\n            switchMap(event => {\n              const storageOrderId = this._storageWrapper.getOrderId(\n                storageOrderIdToken,\n                event.newValue ?? undefined,\n                true,\n              );\n              this._storageWrapper.setOrderId(storageOrderId);\n              return this.loadOrder$(storageOrderId);\n            }),\n          ),\n        ),\n      )\n      .subscribe();\n\n    return;\n  }\n\n  /**\n   * @method loadOrder$()\n   *\n   * Метод загружает заказ и делает подписку для получения по нему обновлений.\n   * Используется для внутренних нужд библиотеки, а также может использоваться для загрузки заказа отдельно от шины событий заказов\n   * (например, данные для страницы \"Спасибо за заказ\").\n   *\n   * @param id - id загружаемого заказа.\n   *  */\n  loadOrder$(id: string, isShort: boolean = false): Observable<Order> {\n    return this._requestService\n      .queryAndSubscribe<Order, 'order', 'order', {orderId: string} | {shortId: string}>(\n        'order',\n        'order',\n        this._defaultOrderFragments,\n        'id',\n        id\n          ? {\n              query: isShort ? {shortId: id} : {orderId: id},\n            }\n          : undefined,\n        undefined,\n      )\n      .pipe(\n        map(values => (values[0] ? values[0] : null)),\n        filter((order): order is Order => isValue(order)),\n        switchMap(order => {\n          const dishesIds = order.dishes\n            .map(orderDish => orderDish.dish?.id)\n            .filter((dishId): dishId is string => isValue(dishId));\n          return this._ngGqlService.getDishes$(dishesIds).pipe(\n            map(dishes => {\n              order.dishes.forEach(orderDish => {\n                orderDish.dish = dishes.find(dish => dish.id === orderDish.dish?.id);\n              });\n              return order;\n            }),\n          );\n        }),\n      );\n  }\n\n  /**\n   * @method addToOrder()\n   * Используется для отправки в шину события добавления блюда.\n   * @param options.loading -  BehaviorSubject блюда, отслеживающий состояние выполняемого действия.\n   * @param options.orderId -  id заказа.\n   * @param options.dishId - id добавляемого блюдо\n   * @param options.amount - количество\n   * @param options.dishModifiers - выбранные пользователем модификаторы блюда (необязательный)\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  addToOrder(options: {\n    orderId: string;\n    loading?: BehaviorSubject<boolean>;\n    dishId: string;\n    amount?: number;\n    dishModifiers?: Array<Partial<OrderModifier>> | Array<Partial<Modifier>>;\n    successCb?: (order: Order) => void;\n    errorCb?: (err: unknown) => void;\n    comment?: string;\n    replacedOrderDishId?: number;\n  }): void {\n    options.loading?.next(true);\n    this._orderBus.emit({\n      event: 'add',\n      isLoading: options.loading,\n      successCb: options.successCb,\n      errorCb: options.errorCb,\n      data: {\n        orderId: options.orderId,\n        dishId: options.dishId,\n        modifiers: (options.dishModifiers ?? []).map(dishModifier => ({\n          id: dishModifier.dish?.id,\n          amount: dishModifier.amount,\n          dish: dishModifier.dish,\n          groupId: dishModifier.dish?.parentGroup?.id ?? dishModifier.dish?.groupId,\n        })),\n        amount: options.amount ?? 1,\n        comment: options.comment,\n        replace: isValue(options.replacedOrderDishId),\n        orderDishId: options.replacedOrderDishId,\n      },\n    });\n  }\n\n  /**\n   * @method removeFromOrder()\n   * Используется для отправки в шину события удаления блюда из корзины\n   * @param options.orderId -  id заказа.\n   * @param options.loading -  BehaviorSubject блюда, отслеживающий состояние выполняемого действия.\n   * @param options.amount - количество\n   * @param options.orderDishId - id удаляемого блюда в корзине\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  removeFromOrder(options: {\n    orderId: string;\n    loading?: BehaviorSubject<boolean>;\n    amount: number;\n    successCb?: (order: Order) => void;\n    errorCb?: (err: unknown) => void;\n    orderDishId: number;\n  }): void {\n    options.loading?.next(true);\n    this._orderBus.emit({\n      event: 'remove',\n      isLoading: options.loading,\n      successCb: options.successCb,\n      errorCb: options.errorCb,\n      data: {\n        id: options.orderId,\n        orderDishId: options.orderDishId,\n        amount: options.amount ?? 1,\n      },\n    });\n  }\n\n  /**\n   * @method updateOrder()\n   * Используется для отправки в шину события обновления данных в заказе, не связанных с блюдами.\n   * Может использоваться ТОЛЬКО ДО того, как заказ отправлен через @method this.sendOrder()\n   * Также, заказ нужно повторно проверять методом @method this.checkOrder(), если такая проверка уже проводилась ранее.\n   * @param options.loading -  BehaviorSubject блюда, отслеживающий состояние выполняемого действия.\n   * @param options.data - объект заказа, при этом не все данные из него будут приняты и, в результате, обновлены.\n   * Большая часть будет данных будет проигнорирована и может изменяться только в рамках других методов согласно заложенной бизнес-логике.\n   * В настоящее время из всего заказа учитываются изменения ТОЛЬКО в свойстве `Order.trifleFrom`.\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  updateOrder(options: {\n    data: ScanFormType<OrderForm>['value'];\n    loading?: BehaviorSubject<boolean>;\n    successCb?: (order: Order) => void;\n    errorCb?: (err: unknown) => void;\n  }): void {\n    if (isValue(options.data.id)) {\n      const data: UpdateOrderInput = {\n        id: options.data.id,\n        promotionCodeString: options.data.promotionCodeString,\n        trifleFrom: options.data.trifleFrom,\n        comment: options.data.comment,\n        date: options.data.date,\n        selfService: options.data.selfService,\n        paymentMethodId: options.data.paymentMethod?.id,\n        address: options.data.address,\n        pickupPoint: options.data.pickupPoint?.id\n      };\n\n      this._orderBus.emit({\n        event: 'update',\n        data,\n        isLoading: options.loading,\n        errorCb: options.errorCb,\n        successCb: options.successCb,\n      });\n    } else {\n      console.error(`NG-GQL > updateOrder has no order.id`)\n    }\n  }\n\n  /**\n   * @method checkOrder()\n   * Используется для отправки в шину события обязательной проверки заказа перед оформлением.\n   * Метод необходимо вызывать после того, как пользователь полностью заполнил в заказе все необходимые данные и далее после каждого вносимого в форму изменения, при условии, что в форме все необходимые данные заполнены.\n   * @param options.orderForm - Форма чекаута с данными проверяемого заказа\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  checkOrder(options: {\n    orderForm: ScanFormType<OrderForm>['value'];\n    successCb?: (order: CheckResponse) => void;\n    errorCb?: (err: unknown) => void;\n  }): void {\n    const {selfService, paymentMethod, customer, id, address} = options.orderForm;\n    if (\n      isValue(selfService) &&\n      isValue(paymentMethod) &&\n      isValue(customer) &&\n      isValue(customer.phone) &&\n      isValue(customer.phone.code) &&\n      isValue(customer.phone.number) &&\n      isValue(id) &&\n      isValue(address)\n    ) {\n      const data: CheckOrderInput = {\n        paymentMethodId: paymentMethod.id,\n        orderId: id,\n        selfService,\n        address,\n        customer: {\n          mail: customer.mail,\n          name: customer.name,\n          phone: {\n            code: customer.phone.code,\n            number: customer.phone.number,\n          },\n        },\n        comment: options.orderForm.comment,\n        pickupPointId: options.orderForm.pickupPoint?.id,\n        locationId: options.orderForm.locationId,\n        customData: options.orderForm.customData,\n        date: options.orderForm.date,\n      };\n\n      if (isValue(options.orderForm.spendBonus?.amount)) {\n        data.spendBonus = options.orderForm.spendBonus;\n      }\n\n      this._orderBus.emit({\n        event: 'check',\n        successCb: options.successCb,\n        errorCb: options.errorCb,\n        data,\n      });\n    } else {\n      throw new Error(\n        `В options.orderForm отсутствуют один или несколько обязательных параметров :\n        selfService, paymentMethod, address, customer, customer.phone, customer.phone.code, customer.phone.number !`,\n      );\n    }\n  }\n\n  /**\n   * @method sendOrder()\n   * Используется для отправки в шину события оформления заказа.\n   * Метод необходимо вызывать только после успешной предварительной проверки заказа в методе checkOrder.\n   * @param options.orderId - Форма чекаута с данными оформляемего заказа\n   * @param options.loading -  BehaviorSubject блюда, отслеживающий состояние выполняемого действия.\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  sendOrder(options: {\n    orderId: string;\n    orderIdFactory?: () => string | undefined;\n    loading?: BehaviorSubject<boolean>;\n    successCb?: (order: CheckResponse) => void;\n    errorCb?: (err: unknown) => void;\n  }): void {\n    options.loading?.next(true);\n    this._orderBus.emit({\n      event: 'order',\n      isLoading: options.loading,\n      successCb: options.successCb,\n      errorCb: options.errorCb,\n      data: {\n        orderId: options.orderId,\n        orderIdFactory: options.orderIdFactory,\n      },\n    });\n  }\n\n  /**\n   * @method cloneOrder()\n   * Используется для отправки в шину события повтора уже сделанного ранее заказа.\n   * @param options.orderId - Форма чекаута с данными оформляемего заказа\n   * @param options.loading -  BehaviorSubject блюда, отслеживающий состояние выполняемого действия.\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  cloneOrder(options: {\n    orderId: string;\n    orderIdFactory?: () => string | undefined;\n    loading?: BehaviorSubject<boolean>;\n    successCb?: (order: Order) => void;\n    errorCb?: (err: unknown) => void;\n  }): void {\n    options.loading?.next(true);\n    this._orderBus.emit({\n      event: 'clone',\n      isLoading: options.loading,\n      successCb: options.successCb,\n      errorCb: options.errorCb,\n      data: {\n        orderId: options.orderId,\n        orderIdFactory: options.orderIdFactory,\n      },\n    });\n  }\n\n  /**\n   * @method setDishAmount()\n   * Устанавливает для блюда dish в заказе количество amount.\n   * @param options.orderId -  id заказа.\n   * @param options.loading -  BehaviorSubject блюда, отслеживающий состояние выполняемого действия.\n   * @param options.orderDishId - id блюда в корзине, для которого изменяется количество заказываемых порций\n   * @param options.amount - необходимое количество порций\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  setDishAmount(options: {\n    orderId: string;\n    loading?: BehaviorSubject<boolean>;\n    orderDishId: number;\n    amount?: number;\n    successCb?: (order: Order) => void;\n    errorCb?: (err: unknown) => void;\n  }): void {\n    options.loading?.next(true);\n    this._orderBus.emit({\n      event: 'setDishAmount',\n      isLoading: options.loading,\n      successCb: options.successCb,\n      errorCb: options.errorCb,\n      data: {\n        id: options.orderId,\n        orderDishId: options.orderDishId,\n        amount: options.amount ?? 1,\n      },\n    });\n  }\n\n  /**\n   * @method setDishComment()\n   * Добавляет к заказываемому блюду комментарий.\n   * @param options.loading -  BehaviorSubject блюда, отслеживающий состояние выполняемого действия.\n   * @param options.orderDishId - id блюда в корзине, которому добавляется комментарий\n   * @param options.comment - добавляемый комментарий\n   * @param options.successCb -Пользовательский callback, который дополнительно будет выполнен в случае успешной операции\n   * @param options.errorCb - Пользовательский callback, будет который дополнительно  выполнен в случае успешной операции\n   */\n  setDishComment(options: {\n    loading?: BehaviorSubject<boolean>;\n    orderDishId: number;\n    comment: string;\n    successCb?: (order: Order) => void;\n    errorCb?: (err: unknown) => void;\n  }): void {\n    options.loading?.next(true);\n    this._orderBus.emit({\n      event: 'setCommentToDish',\n      isLoading: options.loading,\n      successCb: options.successCb,\n      errorCb: options.errorCb,\n      data: {\n        orderDishId: options.orderDishId,\n        comment: options.comment,\n      },\n    });\n  }\n\n  destroy(): void {\n    if (isValue(this._orderBusSubscription$)) {\n      this._orderBusSubscription$.unsubscribe();\n    }\n    this._orderSubscription$.unsubscribe();\n    this._storageWrapper.destroy();\n    Object.values(this)\n      .filter((property): property is EventEmitter<unknown> => property instanceof EventEmitter)\n      .forEach(property => property.complete());\n  }\n\n  getDishRecomended(dishId: string): Observable<Dish[]> {\n    return this.getOrder().pipe(\n      switchMap(order =>\n        this._requestService\n          .customQuery$<Dish, 'recommendedForDish'>(\n            'recommendedForDish',\n            this._defaultDishFragments,\n            {\n              dishId,\n            },\n          )\n          .pipe(\n            map(data => {\n              const orderDishes = order.dishes.map(orderDish => orderDish.dish?.id);\n              const array = Array.isArray(data.recommendedForDish)\n                ? data.recommendedForDish\n                : [data.recommendedForDish];\n              return array.filter(dish => !orderDishes.includes(dish.id));\n            }),\n          ),\n      ),\n    );\n  }\n\n  getOrderRecommended(): Observable<Dish[]> {\n    return this.getOrder().pipe(\n      switchMap(order =>\n        this._requestService\n          .customQuery$<\n            Dish,\n            'recommendedForOrder'\n          >('recommendedForOrder', this._defaultDishFragments, {orderId: order.id})\n          .pipe(\n            map(data => {\n              const orderDishes = order.dishes.map(orderDish => orderDish.dish?.id);\n              const array = Array.isArray(data.recommendedForOrder)\n                ? data.recommendedForOrder\n                : [data.recommendedForOrder];\n              return array.filter(dish => !orderDishes.includes(dish.id));\n            }),\n          ),\n      ),\n    );\n  }\n\n  getPickupPoints(): Observable<PickupPoint[]> {\n    return this._storage.pickupPoints$.pipe(\n      exhaustMap(data => (isValue(data) ? of(data) : this._getPickupPoints())),\n    );\n  }\n\n  private _getPickupPoints(): Observable<PickupPoint[]> {\n    return this._requestService\n      .customQuery$<PickupPoint, 'pickuppoints'>('pickuppoints', {\n        id: true,\n        address: true,\n        title: true,\n        order: true,\n      })\n      .pipe(\n        map(data => {\n          const result = Array.isArray(data.pickuppoints) ? data.pickuppoints : [data.pickuppoints];\n          this._storage.updatePickupPoints(result);\n          return result;\n        }),\n      );\n  }\n\n  private _getPaymentMethods$(orderId: string | undefined): Observable<PaymentMethod[]> {\n    return this._requestService\n      .customQuery$<PaymentMethod, 'paymentMethod', {orderId: string}>(\n        'paymentMethod',\n        this._defaultPaymentMethodFragments,\n        {orderId: orderId ?? ''},\n        {\n          fieldsTypeMap: new Map([['orderId', 'String!']]),\n        },\n      )\n      .pipe(\n        map(data =>\n          (Array.isArray(data.paymentMethod) ? data.paymentMethod : [data.paymentMethod]).filter(\n            method => method.enable,\n          ),\n        ),\n      );\n  }\n\n  private _getOrderCustomerName(user: User | null): string | null {\n    if (isValue(user)) {\n      if (isValue(user.firstName) && isValue(user.lastName)) {\n        return `${user?.firstName ?? ''} ${user?.lastName ?? ''}`;\n      } else {\n        if (isValue(user.firstName)) {\n          return user.firstName;\n        } else {\n          return user.lastName;\n        }\n      }\n    } else {\n      return null;\n    }\n  }\n\n  private _checkOrder$(data: CheckOrderInput): Observable<CheckResponse> {\n    return this._requestService\n      .customMutation$<CheckResponse, 'checkOrder', {orderCheckout: CheckOrderInput}>(\n        'checkOrder',\n        {\n          order: this._defaultOrderFragments,\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        {orderCheckout: data},\n        {\n          fieldsTypeMap: new Map([['orderCheckout', 'InputOrderCheckout']]),\n        },\n      )\n      .pipe(map(data => data.checkOrder));\n  }\n\n  private _setDishAmount$(data: RemoveOrSetAmountToDish): Observable<Order> {\n    return this._requestService\n      .customMutation$<\n        Order,\n        'orderSetDishAmount',\n        RemoveOrSetAmountToDish\n      >('orderSetDishAmount', this._defaultOrderFragments, data)\n      .pipe(map(data => data.orderSetDishAmount));\n  }\n\n  private _setDishComment$(data: SetDishCommentInput): Observable<Order> {\n    return this._requestService\n      .customMutation$<\n        Order,\n        'orderSetDishComment',\n        SetDishCommentInput\n      >('orderSetDishComment', this._defaultOrderFragments, data)\n      .pipe(map(data => data.orderSetDishComment));\n  }\n\n  private _cloneOrder$(sendOrderData: SendOrderInput): Observable<Order> {\n    return this._requestService\n      .customMutation$<Order, 'orderClone', {orderId: string}>(\n        'orderClone',\n        this._defaultOrderFragments,\n\n        {\n          orderId: sendOrderData.orderId,\n        },\n        {\n          requiredFields: ['orderId'],\n        },\n      )\n      .pipe(\n        map(data => {\n          if (isValue(data)) {\n            if (isValue(sendOrderData.orderIdFactory)) {\n              const newOrderId = sendOrderData.orderIdFactory();\n              if (newOrderId) {\n                this._storageWrapper.setOrderId(newOrderId);\n              } else {\n                this._storageWrapper.removeOrderId(newOrderId);\n              }\n            } else {\n              this._storageWrapper.removeOrderId();\n            }\n          }\n          return data.orderClone;\n        }),\n      );\n  }\n\n  private _updateOrder$(data: UpdateOrderInput): Observable<Order> {\n    return this._requestService\n      .customMutation$<\n        Order,\n        'orderUpdate',\n        {\n          order: UpdateOrderInput;\n        }\n      >(\n        'orderUpdate',\n        this._defaultOrderFragments,\n        {order: data},\n        {\n          fieldsTypeMap: new Map([['order', 'InputOrderUpdate']]),\n        },\n      )\n      .pipe(map(data => data.orderUpdate));\n  }\n\n  private _sendOrder$(sendOrderData: SendOrderInput): Observable<CheckResponse> {\n    return this._requestService\n      .customMutation$<CheckResponse, 'sendOrder', {orderId: string}>(\n        'sendOrder',\n        <ValuesOrBoolean<CheckResponse>>{\n          order: this._defaultOrderFragments,\n          message: this._defaultMessageFragments,\n          action: this._defaultActionFragments,\n        },\n        {\n          orderId: sendOrderData.orderId,\n        },\n        {\n          requiredFields: ['orderId'],\n        },\n      )\n      .pipe(\n        map(data => {\n          if (isValue(data) && data.sendOrder.order.state === 'ORDER') {\n            if (isValue(sendOrderData.orderIdFactory)) {\n              const newOrderId = sendOrderData.orderIdFactory();\n              if (newOrderId) {\n                this._storageWrapper.setOrderId(newOrderId);\n              } else {\n                this._storageWrapper.removeOrderId(newOrderId);\n              }\n            } else {\n              this._storageWrapper.removeOrderId();\n            }\n          }\n          return data.sendOrder;\n        }),\n      );\n  }\n\n  private _addDishToOrder$(data: AddToOrderInput): Observable<Order> {\n    return this._requestService\n      .customMutation$<\n        Order,\n        'orderAddDish',\n        AddToOrderInput\n      >('orderAddDish', this._defaultOrderFragments, data)\n      .pipe(map(data => data.orderAddDish));\n  }\n\n  private _removeDishFromOrder$(data: RemoveOrSetAmountToDish): Observable<Order> {\n    return this._requestService\n      .customMutation$<\n        Order,\n        'orderRemoveDish',\n        RemoveOrSetAmountToDish\n      >('orderRemoveDish', this._defaultOrderFragments, data, {requiredFields: ['orderDishId', 'id']})\n      .pipe(map(data => data.orderRemoveDish));\n  }\n\n  private _loadCurrentOrNewOrder(id: string, token: string): Observable<Order> {\n    return this.loadOrder$(id).pipe(\n      switchMap(order => {\n        if (order.state === 'ORDER' || order.state === 'DONE' || order.state === 'REJECT') {\n          const newId = this._storageWrapper.getOrderId(token, undefined, true);\n          return this.loadOrder$(newId);\n        } else {\n          return of(order);\n        }\n      }),\n    );\n  }\n\n}\n","import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {isValue} from '@axrl/common';\nimport type {Observable} from 'rxjs';\nimport {exhaustMap} from 'rxjs';\nimport {NgGqlStoreService, NgGqlUserService} from './../services';\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n  constructor(\n    private _ngGqlUser: NgGqlUserService,\n    private _storage: NgGqlStoreService,\n  ) {}\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    const body = request?.body;\n    const operationName =\n      isValue(body) && 'operationName' in body && isValue(body.operationName)\n        ? body.operationName\n        : '';\n\n    return operationName === 'loadLogin' || operationName === 'loadRestorePassword'\n      ? next.handle(request)\n      : this._ngGqlUser.getToken$().pipe(\n          exhaustMap(userToken => {\n            if (isValue(userToken)) {\n              const payloadEncoded = userToken.split('.')[1];\n              try {\n                const payload = JSON.parse(atob(payloadEncoded));\n                if (Date.now() / 1000 > payload.exp) {\n                  this._storage.updateToken(null);\n                  return next.handle(request);\n                } else {\n                  return next.handle(\n                    request.clone({\n                      setHeaders: {\n                        authorization: userToken,\n                      },\n                    }),\n                  );\n                }\n              } catch (error) {\n                this._storage.updateToken(null);\n                return next.handle(request);\n              }\n            } else {\n              return next.handle(request);\n            }\n          }),\n        );\n  }\n}\n","import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {isValue} from '@axrl/common';\nimport type {Observable} from 'rxjs';\nimport {map} from 'rxjs';\n\n@Injectable()\nexport class MemoryInterceptor implements HttpInterceptor {\n  private _memory: Record<string, Observable<HttpEvent<any>>> = {};\n  constructor() {}\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    const memoryName = JSON.stringify(request);\n    const clone = request.clone({});\n\n    if (!isValue(this._memory[memoryName])) {\n      this._memory[memoryName] = next.handle(clone);\n    }\n    return this._memory[memoryName].pipe(\n      map(event => {\n        if (event.type == 2) {\n          delete this._memory[memoryName];\n        }\n        return event;\n      }),\n    );\n  }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Inject, Injectable} from '@angular/core';\nimport {isValue} from '@axrl/common';\nimport type {Observable} from 'rxjs';\nimport {generateUUID} from '../models';\n\n@Injectable()\nexport class XDeviceIdInterceptor implements HttpInterceptor {\n  constructor(@Inject(DOCUMENT) private _document: Document) {}\n\n  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {\n    const savedDeviceId = localStorage.getItem('restocore-deviceId');\n    const deviceId = savedDeviceId ?? generateUUID(this._document.defaultView);\n    if (!isValue(savedDeviceId)) {\n      localStorage.setItem('restocore-deviceId', deviceId);\n    }\n    return next.handle(\n      request.clone({\n        setHeaders: {\n          'X-Device-Id': deviceId,\n        },\n      }),\n    );\n  }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {APOLLO_OPTIONS, ApolloModule} from 'apollo-angular';\nimport {HttpLink} from 'apollo-angular/http';\nimport {AuthInterceptor, MemoryInterceptor, XDeviceIdInterceptor} from './interceptors';\nimport {NG_GQL_CONFIG, httpLinkFactory} from './models';\nimport {\n  ApolloService,\n  NgGqlService,\n  NgGqlStoreService,\n  NgGqlUserBusService,\n  NgGqlUserService,\n  NgOrderService,\n  NqGqlLocalStorageWrapper,\n  RequestService,\n} from './services';\n\n@NgModule({\n  imports: [ApolloModule, HttpClientModule],\n  exports: [ApolloModule, HttpClientModule],\n  providers: [\n    ApolloService,\n    NgOrderService,\n    NgGqlService,\n    NgGqlUserService,\n    NgGqlStoreService,\n    NgGqlUserBusService,\n    NqGqlLocalStorageWrapper,\n    RequestService,\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: MemoryInterceptor,\n      multi: true,\n    },\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: XDeviceIdInterceptor,\n      multi: true,\n    },\n    {\n      provide: HTTP_INTERCEPTORS,\n      useClass: AuthInterceptor,\n      multi: true,\n    },\n    {\n      provide: APOLLO_OPTIONS,\n      useFactory: httpLinkFactory,\n      deps: [HttpLink, DOCUMENT, NG_GQL_CONFIG, NgGqlUserService],\n    },\n  ],\n  declarations: [],\n})\nexport class NgGqlModule {}\n","/*\n * Public API Surface of ng-gql\n */\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ApolloService","i1.NgGqlStoreService","i2.NgGqlUserBusService","i1.RequestService","i2.NgGqlStoreService","i3.NqGqlLocalStorageWrapper","i4.NgGqlUserBusService","i5.NgGqlService","i6.NgGqlUserService","i1.NgGqlUserService"],"mappings":"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"}