@haiiro/docuflow 0.0.13 → 0.0.16

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 (38) hide show
  1. package/README.md +3 -1
  2. package/bin/install.mjs +78 -7
  3. package/manifest.json +30 -20
  4. package/package.json +1 -1
  5. package/public/app/docflow-app.js +8 -7
  6. package/src/front-components/docflow-documents.front-component.mjs +41 -41
  7. package/src/front-components/docflow-documents.front-component.tsx +49 -32
  8. package/src/front-components/docflow-processes.front-component.mjs +34 -34
  9. package/src/front-components/docflow-processes.front-component.tsx +6 -9
  10. package/src/front-components/docflow-tasks.front-component.mjs +40 -39
  11. package/src/front-components/docflow-tasks.front-component.tsx +37 -15
  12. package/src/front-components/launch-process.front-component.mjs +30 -30
  13. package/src/front-components/process-steps.front-component.mjs +25 -25
  14. package/src/front-components/process-steps.front-component.tsx +2 -1
  15. package/src/front-components/task-form.front-component.mjs +45 -44
  16. package/src/front-components/task-form.front-component.tsx +12 -1
  17. package/src/logic-functions/bitrix-app.logic-function.mjs +27 -2
  18. package/src/logic-functions/bitrix-app.logic-function.ts +2 -2
  19. package/src/logic-functions/bitrix-event.logic-function.mjs +22 -1
  20. package/src/logic-functions/bitrix-event.logic-function.ts +2 -2
  21. package/src/logic-functions/bitrix-install.logic-function.mjs +26 -1
  22. package/src/logic-functions/bitrix-install.logic-function.ts +2 -2
  23. package/src/logic-functions/complete-task.logic-function.mjs +22 -1
  24. package/src/logic-functions/complete-task.logic-function.ts +2 -2
  25. package/src/logic-functions/docflow-app-session.logic-function.mjs +22 -1
  26. package/src/logic-functions/docflow-app-session.logic-function.ts +2 -2
  27. package/src/logic-functions/docflow-app.logic-function.mjs +29 -2
  28. package/src/logic-functions/docflow-app.logic-function.ts +2 -1
  29. package/src/logic-functions/launch-process.logic-function.mjs +23 -13
  30. package/src/logic-functions/launch-process.logic-function.ts +2 -2
  31. package/src/logic-functions/publish-process.logic-function.mjs +32 -11
  32. package/src/logic-functions/publish-process.logic-function.ts +8 -4
  33. package/src/logic-functions/save-launch-fields.logic-function.mjs +18 -8
  34. package/src/logic-functions/save-launch-fields.logic-function.ts +2 -2
  35. package/src/logic-functions/save-step-settings.logic-function.mjs +24 -2
  36. package/src/logic-functions/save-step-settings.logic-function.ts +2 -2
  37. package/src/logic-functions/save-task-form.logic-function.mjs +22 -1
  38. package/src/logic-functions/save-task-form.logic-function.ts +2 -2
@@ -1,4 +1,4 @@
1
- import { useMemo, useState } from 'react';
1
+ import { useEffect, useMemo, useState } from 'react';
2
2
  import { defineFrontComponent } from 'twenty-sdk/define';
3
3
  import { AppPath, enqueueSnackbar, openSidePanelPage } from 'twenty-sdk/front-component';
4
4
  import {
@@ -37,7 +37,6 @@ import { type DocflowTask, type WorkspaceMember } from 'src/front/types';
37
37
  import {
38
38
  DataTable,
39
39
  DocflowRoot,
40
- formatTotal,
41
40
  ListToolbar,
42
41
  Message,
43
42
  pluralize,
@@ -56,8 +55,9 @@ import {
56
55
  useRowSelection,
57
56
  } from 'src/front/ui/components';
58
57
  import { FormFieldsBuilder } from 'src/front/ui/form-fields-builder';
59
- import { BulkChangeDialog, Button, type MenuAction, MenuButton, StatusChip, ViewTabs } from 'src/front/ui/kit';
58
+ import { BulkChangeDialog, Button, type MenuAction, MenuButton, QuickViews, StatusChip } from 'src/front/ui/kit';
60
59
 
60
+ import { TableSkeleton } from 'src/front/ui/skeleton';
61
61
  import { UrgentTaskCards } from 'src/front/ui/task-cards';
62
62
  import { TaskWorkPanel } from 'src/front/ui/task-work-panel';
63
63
  import {
@@ -273,6 +273,7 @@ const DocflowTasks = () => {
273
273
  const [filters, setFilters] = useState<TaskFilters>(DEFAULT_FILTERS);
274
274
  const [sort, setSort] = useState<TableSort>(DEFAULT_SORT);
275
275
  const [panel, setPanel] = useState<Panel>({ kind: 'closed' });
276
+ const [knownTitles, setKnownTitles] = useState<Record<string, string>>({});
276
277
  const [pages, setPages] = useState(1);
277
278
  const [hiddenColumns, setHiddenColumns] = useHiddenColumns(['createdAt']);
278
279
  const [bulkDialog, setBulkDialog] = useState<BulkDialog>();
@@ -427,11 +428,33 @@ const DocflowTasks = () => {
427
428
 
428
429
  const selectedIds = selection.selectedIds;
429
430
  const openSelectedCount = selectedTasks.filter((task) => task.status !== TASK_DONE_STATUS).length;
431
+ const openTask =
432
+ panel.kind === 'task'
433
+ ? (tasks.find(({ id }) => id === panel.taskId) ?? urgentTasks.find(({ id }) => id === panel.taskId))
434
+ : undefined;
435
+ // A completed task leaves the "Открытые" list while its panel stays open:
436
+ // the panel keeps the title it was opened with.
437
+ const openTaskTitle = openTask?.title?.trim() ?? '';
438
+
439
+ useEffect(() => {
440
+ if (openTask !== undefined && openTaskTitle.length > 0) {
441
+ setKnownTitles((current) =>
442
+ current[openTask.id] === openTaskTitle ? current : { ...current, [openTask.id]: openTaskTitle },
443
+ );
444
+ }
445
+ }, [openTask?.id, openTaskTitle]);
446
+
447
+ const panelTitle =
448
+ panel.kind === 'create'
449
+ ? 'Новое задание'
450
+ : panel.kind === 'task'
451
+ ? openTaskTitle || knownTitles[panel.taskId] || 'Без названия'
452
+ : undefined;
430
453
 
431
454
  return (
432
455
  <DocflowRoot>
433
456
  <SplitView
434
- panelTitle={panel.kind === 'create' ? 'Новое задание' : 'Задание'}
457
+ panelTitle={panelTitle}
435
458
  onClosePanel={() => setPanel({ kind: 'closed' })}
436
459
  panel={
437
460
  panel.kind === 'create' ? (
@@ -444,7 +467,13 @@ const DocflowTasks = () => {
444
467
  }}
445
468
  />
446
469
  ) : panel.kind === 'task' ? (
447
- <TaskWorkPanel key={panel.taskId} taskId={panel.taskId} withChat onChanged={() => void reloadAll()} />
470
+ <TaskWorkPanel
471
+ key={panel.taskId}
472
+ taskId={panel.taskId}
473
+ withChat
474
+ showTitle={false}
475
+ onChanged={() => void reloadAll()}
476
+ />
448
477
  ) : undefined
449
478
  }
450
479
  >
@@ -506,20 +535,12 @@ const DocflowTasks = () => {
506
535
  ],
507
536
  }}
508
537
  views={
509
- <ViewTabs
538
+ <QuickViews
510
539
  value={view}
511
540
  onChange={changeView}
512
541
  options={VIEWS.map((option) => ({ ...option, count: counts?.[option.value] }))}
513
542
  />
514
543
  }
515
- total={
516
- data === undefined
517
- ? undefined
518
- : formatTotal(tasks.length + urgentTasks.length, (data.totalCount ?? tasks.length) + urgentTasks.length, TASK_NOUN)
519
- }
520
- columns={{ columns: COLUMNS, hiddenKeys: hiddenColumns, onChange: setHiddenColumns }}
521
- onRefresh={() => void reloadAll()}
522
- isRefreshing={loading}
523
544
  onCreate={() => setPanel({ kind: 'create' })}
524
545
  />
525
546
  {hasCards && (
@@ -536,7 +557,7 @@ const DocflowTasks = () => {
536
557
  <Message tone="danger">{getErrorMessage(error, 'Не удалось загрузить задания')}</Message>
537
558
  </div>
538
559
  )}
539
- {loading && data === undefined && <Message>Загрузка…</Message>}
560
+ {loading && data === undefined && <TableSkeleton />}
540
561
  {!loading && error === undefined && tasks.length === 0 && (
541
562
  <Message>{urgentTasks.length > 0 ? 'Остальных заданий нет: все срочные — в карточках выше.' : 'Заданий нет.'}</Message>
542
563
  )}
@@ -550,6 +571,7 @@ const DocflowTasks = () => {
550
571
  <DataTable
551
572
  columns={COLUMNS}
552
573
  hiddenColumnKeys={hiddenColumns}
574
+ onHiddenColumnsChange={setHiddenColumns}
553
575
  sort={sort}
554
576
  onSortChange={(next) => {
555
577
  setSort(next);