1.3.1 • Published 1 year ago

@fbkl/vriesea v1.3.1

Weekly downloads
-
License
MIT
Repository
gitlab
Last release
1 year ago

+++

Быстрый старт:

import Vue from 'vue';
import Vuex from 'vuex';
import {VrieseaModuleConfig, VueVriesea} from './modules';
import {DomEventsService} from './services/sp/dom-events.service';
import AmoAccount from './storage/modules/amo-account';
import AppStatus from './storage/modules/app-status';
import {initializeStore, options} from './storage/store';

Vue.use(Vuex);
// Vue.use(VueMoment, {moment});
// another

Vue.use(VueVriesea, {
    config: {
        codeWidget: 'navy',
        userToken: 'token...',
        api: '/api/v1',
    },
    widget: (window as any).any,
    modules: {
        vueApi: {
            status: true,
        },
        serviceProvider: {
            status: true,
            additional: [
                // {class: ClassService},
                {class: DomEventsService, force: true},
            ],
        },
    },
    storageModules: {
        AmoAccount,
        AppStatus,
        // ...
    },
} as VrieseaModuleConfig);


const store = new Vuex.Store(options);
initializeStore(store);

Регистрировать модуль VueVriesea после основных ваших модулей (после Vue.use(Vuex);) и перед new Vuex.Store(options);.


Получение Вспомогательных классов в компонентах (или в прототипе):

// component
let httpClient: VueApi = this.$httpClient;
let vrieseaWidget: Widget = this.$vrieseaWidget;
let vrieseaProvider: ServiceProvider = this.$vrieseaProvider;
// prototype
let httpClient: VueApi = Vue.prototype.$httpClient;
let vrieseaWidget: Widget = Vue.prototype.$vrieseaWidget;
let vrieseaProvider: ServiceProvider = Vue.prototype.$vrieseaProvider

Получение заранее зарегистрированых модулей (в компоненте или вне компонента):

import {getModule} from 'vuex-module-decorators';
import {getVrieseaModule} from './storage/store';

// component
let amoAccount = getModule(AmoAccount, this.$store);
// or
let amoAccount2 = getVrieseaModule(AmoAccount);
import {getModule} from 'vuex-module-decorators';
import {$store, getVrieseaModule} from './storage/store';
// outside component
let amoAccount = getModule(AmoAccount, $store);
// or
let amoAccount2 = getVrieseaModule(AmoAccount);

Использование Базового сервиса:

  • Сервис необходим для инициализации первичных действий и запуск других сервисов приложения. Является служебным.

Необходимо наследовать базовый класс BaseAppCoreService и реализовать необходимые методы.

import {BaseAppCoreService} from './services/app-core.service';

export class AppCoreService extends BaseAppCoreService {
    protected _initNext() {
        // your success logic
    }

    protected _initDenyNext() {
        // your deny logic
    }

    protected async loadAccess(): Promise<void> {
        // load your data for check success
    }

    protected _initDeepWorkflowNext() {
        // your deep workflow logic
        // (you shouls set renderDeepWorkflowTypeHook & accessDeepWorkflowTypeHooks)
    }
  
    protected _initDenyDeepWorkflowNext() {
        // your dany deep workflow logic
        // (you shouls set renderDeepWorkflowTypeHook & accessDeepWorkflowTypeHooks)
    }

    protected deepWorkflowClean() {
        // for clean in workflow logic
    }
}

// in your main app file
new AppCoreService().init();

Для более глубокой настройки можна наследовать только BaseAppCoreStatusesService.


Widget

Пример корневого загрузочного файла приложения Widget (фактически одинаковы для всех приложений типа Widget):

// index.ts

import './styles/styles.scss';

import {Core} from './core';
import {factoryCallbacks} from '@fbkl/vriesea/dist/widget';
import {WidgetModel} from '@fbkl/vriesea/dist/contracts/widget.model';
import {APP} from './configs/app.config';
import {defineVrieseaConfig} from '@fbkl/vriesea/dist';


export const Index = function () {
  this.callbacks = factoryCallbacks<Core>(() => {
    let self = this as WidgetModel;

    defineVrieseaConfig({
      api: APP.pathPrefix,
      codeWidget: APP.codeWidget,
      userToken: (self.params.token_key || '').trim(),
    });

    return new Core(self);
  });
}

Пример корневого рабочего файла приложения Widget:

// core.ts

import {CoreBase} from '@fbkl/vriesea/dist/widget';
import {WidgetSdkCardContract} from '@fbkl/vriesea/dist/contracts/widget.contract';

export class Core extends CoreBase implements WidgetSdkCardContract {
  constructor(context) {
    super(context);
  }

  init(): void {
    super.init();
    if (!['settings', 'advanced_settings'].includes(this._widget.area)) {
      this.doFront();
    }
  }

  async linkCard(): Promise<any[]> {
    return [];
  }

  async loadElements(): Promise<any[]> {
    return [];
  }

  async loadPreloadedData(): Promise<any[]> {
    window[this.code()].$hooks.next({type: 'loadPreloadedData'});
    return [];
  }

  async searchDataInCard(): Promise<any[]> {
    return [];
  }

  protected code(): string {
    return 'widgetPurple';
  }
}

Методы:

  • render, init, bindActions, destroy, settings, onSave, advancedSettings, и др. (в зависимости от реализованых интерфесов contracts/widget.contract.ts) - корневые хуки приложения (вызываются автоматически в зависимоти от области или действия приложения)
  • doFront - инициализация front скриптов и запуск front приложения
  • doDp - инициализация front скриптов и запуск digital pipeline front приложения
  • initWidget - инициализация front представления виджета в правой части амо (часто связан с вызовом метода doFront)
if (['lcard'].includes(this._widget.area)) {
    this.doFront();
    this.initWidget();
}
  • loadingDp - инициализация в области dp (следует вызов doDp)
import {CoreBase} from '@fbkl/vriesea/dist/widget/core-base';
import {WidgetDpContract} from '@fbkl/vriesea/dist/contracts/widget.contract';

export class Core extends CoreBase implements WidgetDpContract {
  // ...
  dpSettings(): void {
    this.loadingDp();
    this.doDp();
  }
}
  • miniSettings - инициализация настройек виджета в разделе Интеграции/Установка. Работа пакета @fbkl/pine
  • code - возвращает строковое представление ключа глобальной области хранения инстенса приложения (необходим для внедрения метаданых приложения в другие части других связных приложений)

webpack

Все виджеты имеют общие настройки. Предоставляются webpack конфиги (и postcss) для повторного использования в разных проектах.

  • webpack/production/{widget,app,front}
// In your webpack.config.js

const webpackConfig = require('@fbkl/vriesea/dist/webpack/production/widget/webpack.config')

module.exports = {
    ...webpackConfig,
}
// In your vue.config.js

const vueConfig = require('@fbkl/vriesea/dist/webpack/production/front/vue.config');

module.exports = {
    ...vueConfig,
}
// In your postcss.config.js

const postcssConfig = require('@fbkl/vriesea/dist/webpack/production/front/postcss.config')

module.exports = {
    ...postcssConfig,
}

webpack loaders

  • element-ui-loader.ts - оптимизиция скриптов element-ui

webpack plugins

  • postcss:
    • postcss-parent-prefix.ts - изоляция стилей element-ui

Widget (Vue.prototype.$vrieseaWidget)

Рабосий клас Widget содержащий инстанс приложения (для получения метаданых и других данных приложения).


Service Provider

Провайдер разных сервисов приложения.

Включает:

  • CatalogTabCardService - работа с амо каталогами (костыли упрощающие жизнь)
  • DomEventsService - регистрация и обработка глобальных событий (events)
  • PusherService - Pusher/Socket сервис
  • +++ in future

Константы и хелперы

Часто использованные функции и переменные для работы:

  • amo-cf.helper.ts:
    • CF_TYPES - константы номерных типов амо кастомноых полей
    • CF_TYPE_NAMES - константы строковых типов амо кастомноых полей
    • getFrontCfEnumForField - функция получения enum из фронт определенного к.поля
    • getFrontCfEnumsForField - функция получения enums из фронт определенного к.поля
  • amo-instance.helper.ts:
    • ENTITY_CODES - константы кодов типов сущностей
    • LIVE_KEYS - константы кодов наблюдаемых данных в глобальной переменной APP | AMOCRM (примеры есть в tomato, pang)
    • entityConvert - ф-ия конвертации области (area) в код сужности
    • entitySingleConvert - ф-ия конвертации код сужности в одиночный код (leads -> lead)
    • getEntityName - ф-ия получения названия сущности по коду сущности
    • getAmoEntityLink - ф-ия получения ссылки на конкретную сущность
    • getLiveKey и getLiveValue - ф-ии помошники для наблюдения изменений в обектах сущностей
  • amo-interface.helper.ts:
    • hideInMenu - ф-ия скрытия фиджета в списках (в списке мульти акшн)
    • dpSettingsBox - ф-ия подготовки dp
  • error.helper.ts - Клас обработки ошибок и их представления пользователю
  • str.helper.ts - Клас обработки строк

TODO: (WARN)

  • loadLinked in amoinstance maybe return 204 (empty body if linked not found)
1.3.1

1 year ago

1.3.0

1 year ago

1.2.0

1 year ago

1.2.1

1 year ago

1.1.70

2 years ago

1.1.74

2 years ago

1.1.73

2 years ago

1.1.72

2 years ago

1.1.71

2 years ago

1.1.77

2 years ago

1.1.76

2 years ago

1.1.75

2 years ago

1.1.63

2 years ago

1.1.62

2 years ago

1.1.61

2 years ago

1.1.60

2 years ago

1.1.67

2 years ago

1.1.66

2 years ago

1.1.65

2 years ago

1.1.64

2 years ago

1.1.69

2 years ago

1.1.68

2 years ago

1.1.49

2 years ago

1.1.52

2 years ago

1.1.51

2 years ago

1.1.50

2 years ago

1.1.56

2 years ago

1.1.55

2 years ago

1.1.54

2 years ago

1.1.53

2 years ago

1.1.59

2 years ago

1.1.58

2 years ago

1.1.57

2 years ago

1.1.45

2 years ago

1.1.44

2 years ago

1.1.48

2 years ago

1.1.47

2 years ago

1.1.46

2 years ago

1.1.43

3 years ago

1.1.42

3 years ago

1.1.41

3 years ago

1.1.40

3 years ago

1.1.39

3 years ago

1.1.34

3 years ago

1.1.33

3 years ago

1.1.32

3 years ago

1.1.37

3 years ago

1.1.36

3 years ago

1.1.35

3 years ago

1.1.31

3 years ago

1.1.29

3 years ago

1.1.28

3 years ago

1.1.30

3 years ago

1.1.19

3 years ago

1.1.18

3 years ago

1.1.17

3 years ago

1.1.23

3 years ago

1.1.22

3 years ago

1.1.21

3 years ago

1.1.20

3 years ago

1.1.27

3 years ago

1.1.26

3 years ago

1.1.25

3 years ago

1.1.24

3 years ago

1.1.12

3 years ago

1.1.11

3 years ago

1.1.10

3 years ago

1.1.16

3 years ago

1.1.15

3 years ago

1.1.14

3 years ago

1.1.13

3 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.1.9

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.0.55

3 years ago

1.0.54

3 years ago

1.0.53

3 years ago

1.0.52

3 years ago

1.0.49

3 years ago

1.0.51

3 years ago

1.0.50

3 years ago

1.0.44

3 years ago

1.0.43

3 years ago

1.0.48

3 years ago

1.0.47

3 years ago

1.0.46

3 years ago

1.0.45

3 years ago

1.0.39

3 years ago

1.0.40

3 years ago

1.0.42

3 years ago

1.0.41

3 years ago

1.0.38

3 years ago

1.0.37

3 years ago

1.0.36

3 years ago

1.0.35

3 years ago

1.0.34

3 years ago

1.0.2-4.test

3 years ago

1.0.26

3 years ago

1.0.25

3 years ago

1.0.24

3 years ago

1.0.23

3 years ago

1.0.29

3 years ago

1.0.28

3 years ago

1.0.27

3 years ago

1.0.33

3 years ago

1.0.32

3 years ago

1.0.31

3 years ago

1.0.30

3 years ago

1.0.19

3 years ago

1.0.18

3 years ago

1.0.17

3 years ago

1.0.16

3 years ago

1.0.22

3 years ago

1.0.21

3 years ago

1.0.20

3 years ago

1.0.15

3 years ago

1.0.14

3 years ago

1.0.13

3 years ago

1.0.12

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago