@haiiro/docuflow 0.0.13 → 0.0.15

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 +69 -3
  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 +19 -14
  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
@@ -36,7 +36,6 @@ import { type DocflowDocument, type DocumentFolder } from 'src/front/types';
36
36
  import {
37
37
  DataTable,
38
38
  DocflowRoot,
39
- formatTotal,
40
39
  ListToolbar,
41
40
  Message,
42
41
  pluralize,
@@ -49,7 +48,8 @@ import {
49
48
  useRowSelection,
50
49
  } from 'src/front/ui/components';
51
50
  import { type FolderAppearance, FolderList, useFolderColor } from 'src/front/ui/folders';
52
- import { BulkChangeDialog, Button, type MenuAction, MenuButton, PromptDialog, StatusChip, ViewTabs } from 'src/front/ui/kit';
51
+ import { BulkChangeDialog, Button, type MenuAction, MenuButton, PromptDialog, QuickViews, StatusChip } from 'src/front/ui/kit';
52
+ import { TableSkeleton } from 'src/front/ui/skeleton';
53
53
  import { restAnd, restEq, restIlike, restIn, restIsNotNull, restOr } from 'src/shared/api/rest-filter.util';
54
54
  import { DOCUMENT_OBJECT_NAME, PAGE_SIZE } from 'src/shared/docflow.constants';
55
55
  import { logDocflow, logDocflowError } from 'src/shared/log.util';
@@ -61,6 +61,9 @@ const SEARCH_DEBOUNCE_MS = 300;
61
61
  const FOLDERS_LIMIT = 500;
62
62
  const ALL_FOLDERS = '';
63
63
  const ANY = 'any';
64
+ // The folder list with names and the narrowest row it keeps them in
65
+ const FOLDERS_WIDTH_PX = 240;
66
+ const FOLDERS_FULL_MIN_ROW_PX = FOLDERS_WIDTH_PX + 640;
64
67
  const DOCUMENT_NOUN: [string, string, string] = ['документ', 'документа', 'документов'];
65
68
 
66
69
  // The quick views: a status, all of them, or the trash
@@ -414,31 +417,48 @@ const DocflowDocuments = () => {
414
417
  return (
415
418
  <DocflowRoot>
416
419
  <div style={{ display: 'flex', flex: 1, flexDirection: 'column', minHeight: 0, overflowY: 'auto' }}>
417
- <div style={{ alignItems: 'flex-start', display: 'flex', flex: 1, flexWrap: 'wrap', minHeight: 0 }}>
418
- <div
419
- style={{
420
- boxSizing: 'border-box',
421
- flex: '1 1 200px',
422
- maxWidth: '240px',
423
- minWidth: 0,
424
- padding: `${theme.spacing[4]} ${theme.spacing[3]} ${theme.spacing[4]} ${theme.spacing[5]}`,
425
- }}
426
- >
427
- <FolderList
428
- folders={folders ?? []}
429
- selectedFolderId={folderId}
430
- allFoldersId={ALL_FOLDERS}
431
- onSelect={(id) => {
432
- setFolderId(id);
433
- setPages(1);
434
- selection.clear();
420
+ {/* The folders stay beside the table: a list where the row is wide,
421
+ a rail of icons where it is not. No media queries in the sandbox,
422
+ so each variant's max-width is huge or zero by the row's width. */}
423
+ <div style={{ alignItems: 'flex-start', display: 'flex', flex: 1, minHeight: 0 }}>
424
+ {[false, true].map((isCompact) => (
425
+ <div
426
+ key={isCompact ? 'compact' : 'full'}
427
+ style={{
428
+ flexShrink: 0,
429
+ maxWidth: isCompact
430
+ ? `calc((${FOLDERS_FULL_MIN_ROW_PX}px - 100%) * 999)`
431
+ : `calc((100% - ${FOLDERS_FULL_MIN_ROW_PX}px) * 999)`,
432
+ overflow: 'hidden',
435
433
  }}
436
- onCreate={handleCreateFolder}
437
- onUpdate={handleUpdateFolder}
438
- onDelete={handleDeleteFolder}
439
- />
440
- </div>
441
- <div style={{ display: 'flex', flex: '999 1 420px', flexDirection: 'column', minWidth: 0 }}>
434
+ >
435
+ <div
436
+ style={{
437
+ boxSizing: 'border-box',
438
+ padding: isCompact
439
+ ? `${theme.spacing[4]} 0 ${theme.spacing[4]} ${theme.spacing[3]}`
440
+ : `${theme.spacing[4]} ${theme.spacing[3]} ${theme.spacing[4]} ${theme.spacing[5]}`,
441
+ width: isCompact ? undefined : FOLDERS_WIDTH_PX,
442
+ }}
443
+ >
444
+ <FolderList
445
+ isCompact={isCompact}
446
+ folders={folders ?? []}
447
+ selectedFolderId={folderId}
448
+ allFoldersId={ALL_FOLDERS}
449
+ onSelect={(id) => {
450
+ setFolderId(id);
451
+ setPages(1);
452
+ selection.clear();
453
+ }}
454
+ onCreate={handleCreateFolder}
455
+ onUpdate={handleUpdateFolder}
456
+ onDelete={handleDeleteFolder}
457
+ />
458
+ </div>
459
+ </div>
460
+ ))}
461
+ <div style={{ display: 'flex', flex: 1, flexDirection: 'column', minWidth: 0 }}>
442
462
  <ListToolbar
443
463
  search={{
444
464
  value: searchInput,
@@ -471,7 +491,7 @@ const DocflowDocuments = () => {
471
491
  ],
472
492
  }}
473
493
  views={
474
- <ViewTabs
494
+ <QuickViews
475
495
  value={view}
476
496
  onChange={(next) => {
477
497
  setView(next);
@@ -481,10 +501,6 @@ const DocflowDocuments = () => {
481
501
  options={VIEWS.map((option) => ({ ...option, count: counts?.[option.value] }))}
482
502
  />
483
503
  }
484
- total={data === undefined ? undefined : formatTotal(documents.length, data.totalCount, DOCUMENT_NOUN)}
485
- columns={{ columns: COLUMNS, hiddenKeys: hiddenColumns, onChange: setHiddenColumns }}
486
- onRefresh={() => void reloadAll()}
487
- isRefreshing={loading}
488
504
  onCreate={() => void handleCreateDocument()}
489
505
  isCreating={isCreating}
490
506
  />
@@ -493,12 +509,13 @@ const DocflowDocuments = () => {
493
509
  <Message tone="danger">{getErrorMessage(error, 'Не удалось загрузить документы')}</Message>
494
510
  </div>
495
511
  )}
496
- {loading && data === undefined && <Message>Загрузка…</Message>}
512
+ {loading && data === undefined && <TableSkeleton />}
497
513
  {!loading && error === undefined && documents.length === 0 && <Message>Документов нет.</Message>}
498
514
  {documents.length > 0 && (
499
515
  <DataTable
500
516
  columns={COLUMNS}
501
517
  hiddenColumnKeys={hiddenColumns}
518
+ onHiddenColumnsChange={setHiddenColumns}
502
519
  sort={sort}
503
520
  onSortChange={(next) => {
504
521
  setSort(next);