@haiiro/docuflow 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/{.twenty/output/manifest.json → manifest.json} +9 -9
  2. package/package.json +15 -3
  3. package/{.twenty/output/src → src}/front-components/docflow-documents.front-component.mjs +24 -24
  4. package/src/front-components/docflow-documents.front-component.tsx +21 -6
  5. package/{.twenty/output/src → src}/front-components/docflow-processes.front-component.mjs +18 -18
  6. package/{.twenty/output/src → src}/front-components/docflow-tasks.front-component.mjs +18 -18
  7. package/{.twenty/output/src → src}/front-components/process-steps.front-component.mjs +19 -19
  8. package/src/front-components/process-steps.front-component.tsx +6 -1
  9. package/{.twenty/output/src → src}/front-components/task-form.front-component.mjs +24 -24
  10. package/{.twenty/output/src → src}/logic-functions/launch-process.logic-function.mjs +14 -0
  11. package/src/logic-functions/launch-process.logic-function.ts +5 -0
  12. package/{.twenty/output/src → src}/logic-functions/save-launch-fields.logic-function.mjs +14 -0
  13. package/src/logic-functions/save-launch-fields.logic-function.ts +5 -0
  14. package/.gitignore +0 -43
  15. package/.nvmrc +0 -1
  16. package/.oxlintrc.json +0 -37
  17. package/.twenty/output/README.md +0 -128
  18. package/.twenty/output/package.json +0 -49
  19. package/.twenty/output/public/cover.svg +0 -15
  20. package/.twenty/output/public/logo.svg +0 -9
  21. package/.twenty/output/src/front-components/docflow-documents.front-component.tsx +0 -516
  22. package/.twenty/output/src/front-components/docflow-processes.front-component.tsx +0 -266
  23. package/.twenty/output/src/front-components/docflow-tasks.front-component.tsx +0 -303
  24. package/.twenty/output/src/front-components/process-steps.front-component.tsx +0 -286
  25. package/.twenty/output/src/front-components/task-form.front-component.tsx +0 -29
  26. package/.twenty/output/src/logic-functions/bitrix-app.logic-function.ts +0 -143
  27. package/.twenty/output/src/logic-functions/bitrix-event.logic-function.ts +0 -54
  28. package/.twenty/output/src/logic-functions/bitrix-install.logic-function.ts +0 -81
  29. package/.twenty/output/src/logic-functions/capture-file.logic-function.ts +0 -32
  30. package/.twenty/output/src/logic-functions/complete-task.logic-function.ts +0 -46
  31. package/.twenty/output/src/logic-functions/hand-out-form-step.logic-function.ts +0 -30
  32. package/.twenty/output/src/logic-functions/health-check.ts +0 -31
  33. package/.twenty/output/src/logic-functions/launch-parameters-step.logic-function.ts +0 -33
  34. package/.twenty/output/src/logic-functions/launch-process.logic-function.ts +0 -96
  35. package/.twenty/output/src/logic-functions/notify-bitrix-assignee.logic-function.ts +0 -85
  36. package/.twenty/output/src/logic-functions/on-attachment-created.logic-function.ts +0 -67
  37. package/.twenty/output/src/logic-functions/on-task-updated.logic-function.ts +0 -71
  38. package/.twenty/output/src/logic-functions/on-workflow-run-updated.logic-function.ts +0 -70
  39. package/.twenty/output/src/logic-functions/save-launch-fields.logic-function.ts +0 -73
  40. package/.twenty/output/src/logic-functions/save-step-settings.logic-function.ts +0 -90
  41. package/.twenty/output/src/logic-functions/save-task-form.logic-function.ts +0 -62
  42. package/.twenty/output/yarn.lock +0 -3292
  43. package/.yarn/install-state.gz +0 -0
  44. package/.yarnrc.yml +0 -1
  45. package/dist/tsconfig.spec.tsbuildinfo +0 -1
  46. package/src/__tests__/api-and-bitrix.test.ts +0 -89
  47. package/src/__tests__/form-fields.test.ts +0 -73
  48. package/src/__tests__/launch-parameters.test.ts +0 -75
  49. package/src/__tests__/step-settings.test.ts +0 -39
  50. package/src/__tests__/workflow-run.test.ts +0 -113
  51. package/src/application-config.ts +0 -58
  52. package/src/fields/company-documents.field.ts +0 -29
  53. package/src/fields/document-author.field.ts +0 -32
  54. package/src/fields/document-counterparty.field.ts +0 -32
  55. package/src/fields/document-folder-child-folders.field.ts +0 -23
  56. package/src/fields/document-folder-documents.field.ts +0 -24
  57. package/src/fields/document-folder-parent-folder.field.ts +0 -31
  58. package/src/fields/document-folder.field.ts +0 -32
  59. package/src/fields/document-responsible.field.ts +0 -32
  60. package/src/fields/member-authored-documents.field.ts +0 -29
  61. package/src/fields/member-responsible-documents.field.ts +0 -29
  62. package/src/fields/task-form-schema.field.ts +0 -21
  63. package/src/fields/task-form-values.field.ts +0 -21
  64. package/src/fields/task-instruction.field.ts +0 -21
  65. package/src/fields/task-section.field.ts +0 -36
  66. package/src/fields/task-workflow-run-id.field.ts +0 -21
  67. package/src/fields/task-workflow-step-id.field.ts +0 -21
  68. package/src/fields/task-workflow-thread-id.field.ts +0 -21
  69. package/src/fields/workflow-launch-fields.field.ts +0 -21
  70. package/src/fields/workflow-section.field.ts +0 -36
  71. package/src/front/api.ts +0 -56
  72. package/src/front/format.ts +0 -60
  73. package/src/front/hooks/use-async.ts +0 -54
  74. package/src/front/hooks/use-workspace-members.ts +0 -22
  75. package/src/front/types.ts +0 -48
  76. package/src/front/ui/components.tsx +0 -436
  77. package/src/front/ui/form-field-inputs.tsx +0 -187
  78. package/src/front/ui/form-fields-builder.tsx +0 -183
  79. package/src/front/ui/task-work-panel.tsx +0 -218
  80. package/src/navigation-menu-items/docflow.navigation-menu-item.ts +0 -15
  81. package/src/objects/document-folder.object.ts +0 -80
  82. package/src/objects/document.object.ts +0 -312
  83. package/src/page-layouts/docflow.page-layout.ts +0 -86
  84. package/src/page-layouts/task-docflow.page-layout-tab.ts +0 -36
  85. package/src/page-layouts/workflow-steps.page-layout-tab.ts +0 -37
  86. package/src/roles/default-role.ts +0 -21
  87. package/src/roles/docflow-member.role.ts +0 -23
  88. package/src/server/bitrix-page.ts +0 -52
  89. package/src/server/bitrix-portal.ts +0 -67
  90. package/src/server/document-capture.ts +0 -102
  91. package/src/server/http-response.ts +0 -18
  92. package/src/server/launch-step.ts +0 -166
  93. package/src/server/process-tasks.ts +0 -116
  94. package/src/server/records.ts +0 -132
  95. package/src/server/task-completion.ts +0 -100
  96. package/src/server/workflow-engine.ts +0 -105
  97. package/src/shared/api/core-graphql.util.ts +0 -98
  98. package/src/shared/api/object-summaries.ts +0 -79
  99. package/src/shared/api/rest-filter.util.ts +0 -37
  100. package/src/shared/api/rest-response.util.ts +0 -43
  101. package/src/shared/bitrix/bitrix-client.ts +0 -114
  102. package/src/shared/bitrix/bitrix.type.ts +0 -25
  103. package/src/shared/bitrix/bitrix.util.ts +0 -139
  104. package/src/shared/docflow.constants.ts +0 -31
  105. package/src/shared/documents/attachment-target.util.ts +0 -64
  106. package/src/shared/engine.ts +0 -11
  107. package/src/shared/form/form-field-builder.util.ts +0 -122
  108. package/src/shared/form/form-field.type.ts +0 -23
  109. package/src/shared/form/form-fields.util.ts +0 -138
  110. package/src/shared/form/step-settings.util.ts +0 -104
  111. package/src/shared/workflow/launch-step.util.ts +0 -56
  112. package/src/shared/workflow/run-target-record.util.ts +0 -70
  113. package/src/shared/workflow/workflow-run.type.ts +0 -35
  114. package/src/shared/workflow/workflow-run.util.ts +0 -174
  115. package/src/universal-identifiers.ts +0 -199
  116. package/src/views/all-document-folders.view.ts +0 -50
  117. package/src/views/all-documents.view.ts +0 -91
  118. package/src/views/documents-by-status.view.ts +0 -76
  119. package/tsconfig.json +0 -37
  120. package/tsconfig.spec.json +0 -9
  121. package/vitest.unit.config.ts +0 -14
  122. /package/{.twenty/output/front-component-shared-dependencies.mjs → front-component-shared-dependencies.mjs} +0 -0
  123. /package/{.twenty/output/src → src}/logic-functions/bitrix-app.logic-function.mjs +0 -0
  124. /package/{.twenty/output/src → src}/logic-functions/bitrix-event.logic-function.mjs +0 -0
  125. /package/{.twenty/output/src → src}/logic-functions/bitrix-install.logic-function.mjs +0 -0
  126. /package/{.twenty/output/src → src}/logic-functions/capture-file.logic-function.mjs +0 -0
  127. /package/{.twenty/output/src → src}/logic-functions/complete-task.logic-function.mjs +0 -0
  128. /package/{.twenty/output/src → src}/logic-functions/hand-out-form-step.logic-function.mjs +0 -0
  129. /package/{.twenty/output/src → src}/logic-functions/health-check.mjs +0 -0
  130. /package/{.twenty/output/src → src}/logic-functions/launch-parameters-step.logic-function.mjs +0 -0
  131. /package/{.twenty/output/src → src}/logic-functions/notify-bitrix-assignee.logic-function.mjs +0 -0
  132. /package/{.twenty/output/src → src}/logic-functions/on-attachment-created.logic-function.mjs +0 -0
  133. /package/{.twenty/output/src → src}/logic-functions/on-task-updated.logic-function.mjs +0 -0
  134. /package/{.twenty/output/src → src}/logic-functions/on-workflow-run-updated.logic-function.mjs +0 -0
  135. /package/{.twenty/output/src → src}/logic-functions/save-step-settings.logic-function.mjs +0 -0
  136. /package/{.twenty/output/src → src}/logic-functions/save-task-form.logic-function.mjs +0 -0
@@ -1,32 +0,0 @@
1
- import {
2
- FieldType,
3
- OnDeleteAction,
4
- RelationType,
5
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
6
- defineField,
7
- } from 'twenty-sdk/define';
8
-
9
- import {
10
- DOCUMENT_OBJECT_UNIVERSAL_IDENTIFIER,
11
- DOCUMENT_RESPONSIBLE_UNIVERSAL_IDENTIFIER,
12
- MEMBER_RESPONSIBLE_DOCUMENTS_UNIVERSAL_IDENTIFIER,
13
- } from 'src/universal-identifiers';
14
-
15
- export default defineField({
16
- universalIdentifier: DOCUMENT_RESPONSIBLE_UNIVERSAL_IDENTIFIER,
17
- objectUniversalIdentifier: DOCUMENT_OBJECT_UNIVERSAL_IDENTIFIER,
18
- type: FieldType.RELATION,
19
- name: 'responsible',
20
- label: 'Ответственный',
21
- icon: 'IconUserCheck',
22
- isNullable: true,
23
- relationTargetObjectMetadataUniversalIdentifier:
24
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.workspaceMember.universalIdentifier,
25
- relationTargetFieldMetadataUniversalIdentifier:
26
- MEMBER_RESPONSIBLE_DOCUMENTS_UNIVERSAL_IDENTIFIER,
27
- universalSettings: {
28
- relationType: RelationType.MANY_TO_ONE,
29
- onDelete: OnDeleteAction.SET_NULL,
30
- joinColumnName: 'responsibleId',
31
- },
32
- });
@@ -1,29 +0,0 @@
1
- import {
2
- FieldType,
3
- RelationType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- defineField,
6
- } from 'twenty-sdk/define';
7
-
8
- import {
9
- DOCUMENT_AUTHOR_UNIVERSAL_IDENTIFIER,
10
- DOCUMENT_OBJECT_UNIVERSAL_IDENTIFIER,
11
- MEMBER_AUTHORED_DOCUMENTS_UNIVERSAL_IDENTIFIER,
12
- } from 'src/universal-identifiers';
13
-
14
- export default defineField({
15
- universalIdentifier: MEMBER_AUTHORED_DOCUMENTS_UNIVERSAL_IDENTIFIER,
16
- objectUniversalIdentifier:
17
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.workspaceMember.universalIdentifier,
18
- type: FieldType.RELATION,
19
- name: 'smbAuthoredDocuments',
20
- label: 'Документы (автор)',
21
- icon: 'IconFiles',
22
- relationTargetObjectMetadataUniversalIdentifier:
23
- DOCUMENT_OBJECT_UNIVERSAL_IDENTIFIER,
24
- relationTargetFieldMetadataUniversalIdentifier:
25
- DOCUMENT_AUTHOR_UNIVERSAL_IDENTIFIER,
26
- universalSettings: {
27
- relationType: RelationType.ONE_TO_MANY,
28
- },
29
- });
@@ -1,29 +0,0 @@
1
- import {
2
- FieldType,
3
- RelationType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- defineField,
6
- } from 'twenty-sdk/define';
7
-
8
- import {
9
- DOCUMENT_OBJECT_UNIVERSAL_IDENTIFIER,
10
- DOCUMENT_RESPONSIBLE_UNIVERSAL_IDENTIFIER,
11
- MEMBER_RESPONSIBLE_DOCUMENTS_UNIVERSAL_IDENTIFIER,
12
- } from 'src/universal-identifiers';
13
-
14
- export default defineField({
15
- universalIdentifier: MEMBER_RESPONSIBLE_DOCUMENTS_UNIVERSAL_IDENTIFIER,
16
- objectUniversalIdentifier:
17
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.workspaceMember.universalIdentifier,
18
- type: FieldType.RELATION,
19
- name: 'smbResponsibleDocuments',
20
- label: 'Документы (ответственный)',
21
- icon: 'IconFiles',
22
- relationTargetObjectMetadataUniversalIdentifier:
23
- DOCUMENT_OBJECT_UNIVERSAL_IDENTIFIER,
24
- relationTargetFieldMetadataUniversalIdentifier:
25
- DOCUMENT_RESPONSIBLE_UNIVERSAL_IDENTIFIER,
26
- universalSettings: {
27
- relationType: RelationType.ONE_TO_MANY,
28
- },
29
- });
@@ -1,21 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { TASK_FORM_SCHEMA_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Поля, которые заполняют по заданию: формат шага «Человеческий ввод». Пишет движок приложения (DOCFLOW_ENGINE = APP); форк хранит то же
10
- // в smb.taskOptions.
11
- export default defineField({
12
- universalIdentifier: TASK_FORM_SCHEMA_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.task.universalIdentifier,
15
- type: FieldType.RAW_JSON,
16
- name: 'smbFormSchema',
17
- label: 'Поля задания',
18
- icon: 'IconForms',
19
- isNullable: true,
20
- defaultValue: null,
21
- });
@@ -1,21 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { TASK_FORM_VALUES_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Что заполнено по заданию. Пишет движок приложения (DOCFLOW_ENGINE = APP); форк хранит то же
10
- // в smb.taskOptions.
11
- export default defineField({
12
- universalIdentifier: TASK_FORM_VALUES_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.task.universalIdentifier,
15
- type: FieldType.RAW_JSON,
16
- name: 'smbFormValues',
17
- label: 'Значения полей задания',
18
- icon: 'IconListCheck',
19
- isNullable: true,
20
- defaultValue: null,
21
- });
@@ -1,21 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { TASK_INSTRUCTION_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Что и как сделать по заданию. Свои поля задания для заполнения лежат в
10
- // форме задачи (smb.taskOptions, ADR-024), не здесь.
11
- export default defineField({
12
- universalIdentifier: TASK_INSTRUCTION_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.task.universalIdentifier,
15
- type: FieldType.TEXT,
16
- name: 'smbInstruction',
17
- label: 'Инструкция',
18
- icon: 'IconInfoCircle',
19
- isNullable: true,
20
- defaultValue: null,
21
- });
@@ -1,36 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { TASK_SECTION_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Задания документооборота — штатные задачи со значением DOCFLOW (ADR-025
10
- // п.3). Задачам процессов документооборота его ставит сервер.
11
- export default defineField({
12
- universalIdentifier: TASK_SECTION_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.task.universalIdentifier,
15
- type: FieldType.SELECT,
16
- name: 'smbSection',
17
- label: 'Раздел',
18
- icon: 'IconLayoutSidebar',
19
- defaultValue: "'CRM'",
20
- options: [
21
- {
22
- id: 'e2d2c204-0388-45e7-8eb2-fc02b0378812',
23
- value: 'CRM',
24
- label: 'CRM',
25
- position: 0,
26
- color: 'gray',
27
- },
28
- {
29
- id: '0f7bca41-dcd3-45b7-b0f9-55073f963edc',
30
- value: 'DOCFLOW',
31
- label: 'Документооборот',
32
- position: 1,
33
- color: 'blue',
34
- },
35
- ],
36
- });
@@ -1,21 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { TASK_WORKFLOW_RUN_ID_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Запуск процесса, выдавший задание. Пишет движок приложения (DOCFLOW_ENGINE = APP); форк хранит то же
10
- // в smb.taskOptions.
11
- export default defineField({
12
- universalIdentifier: TASK_WORKFLOW_RUN_ID_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.task.universalIdentifier,
15
- type: FieldType.TEXT,
16
- name: 'smbWorkflowRunId',
17
- label: 'Запуск процесса',
18
- icon: 'IconTopologyStar3',
19
- isNullable: true,
20
- defaultValue: null,
21
- });
@@ -1,21 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { TASK_WORKFLOW_STEP_ID_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Шаг процесса, выдавший задание. Пишет движок приложения (DOCFLOW_ENGINE = APP); форк хранит то же
10
- // в smb.taskOptions.
11
- export default defineField({
12
- universalIdentifier: TASK_WORKFLOW_STEP_ID_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.task.universalIdentifier,
15
- type: FieldType.TEXT,
16
- name: 'smbWorkflowStepId',
17
- label: 'Шаг процесса',
18
- icon: 'IconStepInto',
19
- isNullable: true,
20
- defaultValue: null,
21
- });
@@ -1,21 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { TASK_WORKFLOW_THREAD_ID_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // По нему ответ задания будит процесс. Пишет движок приложения (DOCFLOW_ENGINE = APP); форк хранит то же
10
- // в smb.taskOptions.
11
- export default defineField({
12
- universalIdentifier: TASK_WORKFLOW_THREAD_ID_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.task.universalIdentifier,
15
- type: FieldType.TEXT,
16
- name: 'smbWorkflowThreadId',
17
- label: 'Ожидание шага',
18
- icon: 'IconHourglass',
19
- isNullable: true,
20
- defaultValue: null,
21
- });
@@ -1,21 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { WORKFLOW_LAUNCH_FIELDS_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Поля, которые человек заполняет перед запуском процесса, в формате шага
10
- // «Человеческий ввод». Правятся конструктором на вкладке процесса.
11
- export default defineField({
12
- universalIdentifier: WORKFLOW_LAUNCH_FIELDS_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.workflow.universalIdentifier,
15
- type: FieldType.RAW_JSON,
16
- name: 'smbLaunchFields',
17
- label: 'Параметры запуска',
18
- icon: 'IconPlayerPlay',
19
- isNullable: true,
20
- defaultValue: null,
21
- });
@@ -1,36 +0,0 @@
1
- import {
2
- defineField,
3
- FieldType,
4
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
5
- } from 'twenty-sdk/define';
6
-
7
- import { WORKFLOW_SECTION_UNIVERSAL_IDENTIFIER } from 'src/universal-identifiers';
8
-
9
- // Процессы документооборота — штатные процессы со значением DOCFLOW в этом
10
- // поле (ADR-025 п.2): раздел «Процессы» показывает только их.
11
- export default defineField({
12
- universalIdentifier: WORKFLOW_SECTION_UNIVERSAL_IDENTIFIER,
13
- objectUniversalIdentifier:
14
- STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.workflow.universalIdentifier,
15
- type: FieldType.SELECT,
16
- name: 'smbSection',
17
- label: 'Раздел',
18
- icon: 'IconLayoutSidebar',
19
- defaultValue: "'CRM'",
20
- options: [
21
- {
22
- id: '21edc9de-7b3b-49be-a09f-4e7c93109c6e',
23
- value: 'CRM',
24
- label: 'CRM',
25
- position: 0,
26
- color: 'gray',
27
- },
28
- {
29
- id: '0ef2fa50-2a6e-412c-b1d9-35d318fb729b',
30
- value: 'DOCFLOW',
31
- label: 'Документооборот',
32
- position: 1,
33
- color: 'blue',
34
- },
35
- ],
36
- });
package/src/front/api.ts DELETED
@@ -1,56 +0,0 @@
1
- import { RestApiClient, RestApiClientError } from 'twenty-client-sdk/rest';
2
-
3
- import { readRestList, readRestRecord, type RestList } from 'src/shared/api/rest-response.util';
4
-
5
- // Front components read and write records as the person looking at the page
6
- // and call the app's routes for what needs the server (launch, complete).
7
- const client = new RestApiClient();
8
-
9
- export const listRecords = async <TRecord>(
10
- namePlural: string,
11
- query: Record<string, string | number | undefined>,
12
- ): Promise<RestList<TRecord>> =>
13
- readRestList<TRecord>(await client.get(`/rest/${namePlural}`, { query }));
14
-
15
- export const getRecord = async <TRecord>(namePlural: string, id: string) =>
16
- readRestRecord<TRecord>(await client.get(`/rest/${namePlural}/${id}`));
17
-
18
- export const createRecord = async <TRecord>(
19
- namePlural: string,
20
- data: Record<string, unknown>,
21
- ) => readRestRecord<TRecord>(await client.post(`/rest/${namePlural}`, data));
22
-
23
- export const updateRecord = async <TRecord>(
24
- namePlural: string,
25
- id: string,
26
- data: Record<string, unknown>,
27
- ) => readRestRecord<TRecord>(await client.patch(`/rest/${namePlural}/${id}`, data));
28
-
29
- export const callAppRoute = <TResult>(path: string, body: Record<string, unknown>) =>
30
- client.post<TResult>(`/s${path}`, body);
31
-
32
- // The message a person sees: what the server said when it said something.
33
- export const getErrorMessage = (error: unknown, fallback: string): string => {
34
- if (error instanceof RestApiClientError) {
35
- const body = error.body as { message?: unknown; messages?: unknown } | undefined;
36
-
37
- if (typeof body?.message === 'string' && body.message.length > 0) {
38
- return body.message;
39
- }
40
-
41
- if (Array.isArray(body?.messages) && typeof body.messages[0] === 'string') {
42
- return body.messages[0];
43
- }
44
-
45
- return error.status === undefined
46
- ? `${fallback}: ${error.message}`
47
- : `${fallback} (ошибка ${error.status})`;
48
- }
49
-
50
- // Без текста причины со стенда не понять, что сломалось.
51
- if (error instanceof Error && error.message.length > 0) {
52
- return `${fallback}: ${error.message}`;
53
- }
54
-
55
- return fallback;
56
- };
@@ -1,60 +0,0 @@
1
- import { type WorkspaceMember } from 'src/front/types';
2
-
3
- export const formatMemberName = (member: WorkspaceMember | undefined): string =>
4
- [member?.name?.firstName, member?.name?.lastName]
5
- .filter((part): part is string => typeof part === 'string' && part.length > 0)
6
- .join(' ');
7
-
8
- export const formatDate = (value: string | null | undefined): string => {
9
- if (typeof value !== 'string' || value.length === 0) {
10
- return '';
11
- }
12
-
13
- const date = new Date(value);
14
-
15
- return Number.isNaN(date.getTime()) ? '' : date.toLocaleDateString('ru-RU');
16
- };
17
-
18
- export const isOverdue = (
19
- dueAt: string | null | undefined,
20
- status: string | null | undefined,
21
- now: Date,
22
- ): boolean => {
23
- if (typeof dueAt !== 'string' || status === 'DONE') {
24
- return false;
25
- }
26
-
27
- const dueTime = new Date(dueAt).getTime();
28
-
29
- return Number.isFinite(dueTime) && dueTime < now.getTime();
30
- };
31
-
32
- export const DOCUMENT_TYPE_LABELS: Record<string, string> = {
33
- CONTRACT: 'Договор',
34
- INVOICE: 'Счёт',
35
- ACT: 'Акт',
36
- WAYBILL: 'Накладная',
37
- ORDER: 'Приказ',
38
- LETTER: 'Письмо',
39
- REPORT: 'Отчёт',
40
- OTHER: 'Прочее',
41
- };
42
-
43
- export const DOCUMENT_STATUS_LABELS: Record<string, string> = {
44
- DRAFT: 'Черновик',
45
- IN_REVIEW: 'На согласовании',
46
- APPROVED: 'Согласован',
47
- ARCHIVED: 'В архиве',
48
- };
49
-
50
- export const DOCUMENT_ORIGIN_LABELS: Record<string, string> = {
51
- UPLOAD: 'Загружен в документы',
52
- RECORD: 'Файл записи',
53
- PROCESS: 'Процесс',
54
- };
55
-
56
- export const TASK_STATUS_LABELS: Record<string, string> = {
57
- TODO: 'К выполнению',
58
- IN_PROGRESS: 'В работе',
59
- DONE: 'Выполнено',
60
- };
@@ -1,54 +0,0 @@
1
- import { useCallback, useEffect, useRef, useState } from 'react';
2
-
3
- // Loads data for the current inputs; a slower answer for old inputs never
4
- // overwrites the answer for new ones.
5
- export const useAsync = <TData>(
6
- load: () => Promise<TData>,
7
- dependencies: unknown[],
8
- ) => {
9
- const [data, setData] = useState<TData | undefined>();
10
- const [error, setError] = useState<unknown>();
11
- const [loading, setLoading] = useState(true);
12
- const requestRef = useRef(0);
13
-
14
- const run = useCallback(async () => {
15
- const requestId = ++requestRef.current;
16
-
17
- setLoading(true);
18
- setError(undefined);
19
-
20
- try {
21
- const result = await load();
22
-
23
- if (requestId === requestRef.current) {
24
- setData(result);
25
- }
26
- } catch (loadError) {
27
- if (requestId === requestRef.current) {
28
- setError(loadError);
29
- }
30
- } finally {
31
- if (requestId === requestRef.current) {
32
- setLoading(false);
33
- }
34
- }
35
- }, dependencies);
36
-
37
- useEffect(() => {
38
- void run();
39
- }, [run]);
40
-
41
- return { data, setData, error, loading, reload: run };
42
- };
43
-
44
- export const useDebouncedValue = <TValue>(value: TValue, delayMs: number) => {
45
- const [debouncedValue, setDebouncedValue] = useState(value);
46
-
47
- useEffect(() => {
48
- const timeout = setTimeout(() => setDebouncedValue(value), delayMs);
49
-
50
- return () => clearTimeout(timeout);
51
- }, [value, delayMs]);
52
-
53
- return debouncedValue;
54
- };
@@ -1,22 +0,0 @@
1
- import { useUserId } from 'twenty-sdk/front-component';
2
-
3
- import { listRecords } from 'src/front/api';
4
- import { useAsync } from 'src/front/hooks/use-async';
5
- import { type WorkspaceMember } from 'src/front/types';
6
-
7
- const MEMBERS_LIMIT = 200;
8
-
9
- export const useWorkspaceMembers = () => {
10
- const userId = useUserId();
11
- const { data } = useAsync(
12
- () =>
13
- listRecords<WorkspaceMember>('workspaceMembers', { limit: MEMBERS_LIMIT }),
14
- [],
15
- );
16
- const members = data?.records ?? [];
17
-
18
- return {
19
- members,
20
- currentMember: members.find((member) => member.userId === userId),
21
- };
22
- };
@@ -1,48 +0,0 @@
1
- export type WorkspaceMember = {
2
- id: string;
3
- userId?: string | null;
4
- name?: { firstName?: string | null; lastName?: string | null } | null;
5
- };
6
-
7
- export type DocflowTask = {
8
- id: string;
9
- title?: string | null;
10
- status?: string | null;
11
- dueAt?: string | null;
12
- createdAt: string;
13
- assigneeId?: string | null;
14
- smbInstruction?: string | null;
15
- smbFormSchema?: unknown;
16
- smbFormValues?: unknown;
17
- smbWorkflowRunId?: string | null;
18
- smbWorkflowThreadId?: string | null;
19
- };
20
-
21
- export type FileValue = { fileId: string; label: string; url?: string };
22
-
23
- export type DocflowDocument = {
24
- id: string;
25
- name?: string | null;
26
- status?: string | null;
27
- documentType?: string | null;
28
- number?: string | null;
29
- documentDate?: string | null;
30
- validUntil?: string | null;
31
- description?: string | null;
32
- origin?: string | null;
33
- sourceObjectName?: string | null;
34
- sourceRecordId?: string | null;
35
- sourceRecordName?: string | null;
36
- workflowRunId?: string | null;
37
- createdAt: string;
38
- folderId?: string | null;
39
- file?: FileValue[] | null;
40
- author?: WorkspaceMember | null;
41
- counterparty?: { id: string; name?: string | null } | null;
42
- };
43
-
44
- export type DocumentFolder = {
45
- id: string;
46
- name?: string | null;
47
- parentFolderId?: string | null;
48
- };