From 42420df02d1ba5793d08db2cb7ef0ba66f563f90 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Mon, 27 Mar 2023 18:30:36 +0200 Subject: [PATCH] New Drive UI initial version --- twake/backend/node/config/default.json | 43 +- twake/backend/node/package.json | 3 + twake/backend/node/src/cli/cmds/console.ts | 14 - .../node/src/cli/cmds/console_cmds/merge.ts | 257 ------ .../src/services/console/client-interface.ts | 2 +- .../src/services/console/clients/internal.ts | 2 +- .../src/services/console/clients/remote.ts | 444 +-------- .../src/services/console/processing/merge.ts | 426 --------- .../node/src/services/console/service.ts | 35 +- .../node/src/services/console/types.ts | 16 +- .../src/services/console/web/controller.ts | 10 +- .../node/src/services/console/web/routes.ts | 22 +- .../node/src/services/console/web/schemas.ts | 2 +- .../node/src/services/general/types.ts | 5 +- .../node/src/services/general/web/routes.ts | 5 +- twake/backend/node/yarn.lock | 194 +++- twake/frontend/public/favicon.ico | Bin 9662 -> 15406 bytes twake/frontend/public/favicon.png | Bin 31687 -> 107628 bytes twake/frontend/public/index.html | 8 +- twake/frontend/public/locales/de.json | 66 +- twake/frontend/public/locales/en.json | 70 +- twake/frontend/public/locales/eo.json | 68 +- twake/frontend/public/locales/es.json | 68 +- twake/frontend/public/locales/eu.json | 66 +- twake/frontend/public/locales/fi.json | 68 +- twake/frontend/public/locales/fr.json | 64 +- twake/frontend/public/locales/it.json | 62 +- twake/frontend/public/locales/ja.json | 66 +- twake/frontend/public/locales/nb_NO.json | 68 +- twake/frontend/public/locales/pt.json | 66 +- twake/frontend/public/locales/ru.json | 66 +- twake/frontend/public/locales/si.json | 24 +- twake/frontend/public/locales/tr.json | 66 +- twake/frontend/public/locales/vi.json | 64 +- twake/frontend/public/locales/zh_Hans.json | 60 +- twake/frontend/public/public/img/beta.png | Bin 12676 -> 0 bytes .../frontend/public/public/img/grid/tmail.png | Bin 0 -> 114319 bytes .../frontend/public/public/img/grid/twake.png | Bin 0 -> 125750 bytes twake/frontend/public/public/img/hexagon.png | Bin 309 -> 0 bytes .../public/public/img/logo/128x128.png | Bin 5656 -> 21396 bytes .../frontend/public/public/img/logo/16x16.png | Bin 789 -> 1447 bytes .../public/public/img/logo/256x256.png | Bin 11524 -> 67829 bytes .../frontend/public/public/img/logo/32x32.png | Bin 1363 -> 2975 bytes .../public/public/img/logo/392x392.png | Bin 0 -> 107628 bytes .../frontend/public/public/img/logo/64x64.png | Bin 2231 -> 7498 bytes .../public/public/img/logo/logo-color.svg | 29 + .../public/img/logo/logo-text-black.png | Bin 0 -> 40845 bytes .../public/img/logo/logo-text-white.png | Bin 0 -> 41119 bytes .../public/public/img/primary-gradient.png | Bin 0 -> 26819 bytes .../public/img/twake-emoji/twake-calendar.png | Bin 233 -> 0 bytes .../public/img/twake-emoji/twake-calendar.svg | 1 - .../public/img/twake-emoji/twake-drive.png | Bin 224 -> 0 bytes .../public/img/twake-emoji/twake-drive.svg | 1 - .../public/img/twake-emoji/twake-task.svg | 1 - .../public/img/twake-emoji/twake-tasks.png | Bin 267 -> 0 bytes twake/frontend/src/app/app.tsx | 71 +- twake/frontend/src/app/atoms/avatar/index.tsx | 2 +- .../frontend/src/app/atoms/button/button.tsx | 16 +- .../src/app/atoms/input/input-text.tsx | 6 +- twake/frontend/src/app/atoms/text/index.tsx | 4 +- .../configurators/config-body-layer.jsx | 119 --- .../configurators/configurators.scss | 60 -- .../desktop-redirect/index.tsx | 0 .../edit-channel/channel-settings-menu.tsx | 2 +- .../parts/invitation-input-bulk.tsx | 2 +- .../mobile-redirect/index.tsx | 0 .../mobile-redirect/style.scss | 0 .../on-boarding/account-status-component.tsx | 8 +- .../on-boarding/company-status-component.tsx | 2 +- .../quoted-message/quoted-message.tsx | 54 -- .../search-popup/parts/drive-item-result.tsx | 2 +- .../app/components/uploads/upload-zone.tsx | 2 + .../app/deprecated/workspaces/workspaces.jsx | 31 +- twake/frontend/src/app/environment/types.ts | 2 +- .../src/app/features/auth/auth-service.ts | 4 +- .../oidc/oidc-auth-provider-service.ts | 12 +- .../console/services/console-service.ts | 4 +- .../global/framework/logger-service.ts | 2 +- .../features/global/services/init-service.ts | 7 +- .../src/app/features/global/utils/window.ts | 2 +- .../router/services/router-service.ts | 2 +- .../app/molecules/grouped-rows/base/index.tsx | 4 +- .../app/molecules/quoted-content/index.tsx | 119 --- .../frontend/src/app/molecules/tabs/index.tsx | 8 +- twake/frontend/src/app/styles/ui.less | 2 +- .../calendar/calendar-content.jsx | 850 ------------------ .../views/applications/calendar/calendar.scss | 76 -- .../views/applications/calendar/calendar.tsx | 24 - .../app/views/applications/calendar/event.jsx | 11 - .../calendar/full-calendar/full-calendar.jsx | 377 -------- .../calendar/full-calendar/full-calendar.scss | 473 ---------- .../calendar/modals/CalendarEditor.jsx | 60 -- .../calendar/modals/EventCreation.jsx | 199 ---- .../calendar/modals/EventDetails.jsx | 251 ------ .../calendar/modals/EventModification.jsx | 234 ----- .../applications/calendar/modals/Modals.scss | 50 -- .../calendar/modals/Part/DateSelector.jsx | 145 --- .../calendar/modals/Part/DateSelector.scss | 57 -- .../calendar/modals/Part/Participants.jsx | 44 - .../calendar/unconfigured-tab.jsx | 81 -- .../app/views/applications/drive/index.tsx | 47 - .../drive/twake-tab-configuration.tsx | 77 -- .../app/views/applications/messages/index.tsx | 29 - .../applications/messages/input/input.scss | 216 ----- .../applications/messages/input/input.tsx | 471 ---------- .../messages/input/new-thread.tsx | 51 -- .../messages/input/parts/Attachments.tsx | 27 - .../input/parts/EphemeralMessages.tsx | 66 -- .../messages/input/parts/InputOptions.tsx | 276 ------ .../messages/input/parts/IsWriting.tsx | 60 -- .../input/parts/MessageExternalFilePicker.tsx | 28 - .../input/parts/PendingAttachments.tsx | 49 - .../applications/messages/list-builder.tsx | 150 ---- .../messages/message/message-with-replies.tsx | 92 -- .../messages/message/message.scss | 245 ----- .../applications/messages/message/message.tsx | 6 - .../messages/message/parts/Blocks.tsx | 113 --- .../messages/message/parts/Blocks.utils.ts | 28 - .../parts/ChannelActivity/ActivityMessage.tsx | 275 ------ .../messages/message/parts/DeletedContent.tsx | 93 -- .../parts/FirstMessage/FirstMessage.scss | 44 - .../parts/FirstMessage/FirstMessage.tsx | 20 - .../parts/FirstMessage/FirstThreadMessage.tsx | 17 - .../messages/message/parts/LinkPreview.scss | 70 -- .../messages/message/parts/LinkPreview.tsx | 64 -- .../message/parts/LoadMoreReplies.tsx | 38 - .../message/parts/MessageAttachments.tsx | 55 -- .../messages/message/parts/MessageContent.tsx | 250 ------ .../message/parts/MessageEdition.scss | 18 - .../messages/message/parts/MessageEdition.tsx | 129 --- .../messages/message/parts/MessageHeader.tsx | 159 ---- .../messages/message/parts/Options.tsx | 379 -------- .../parts/PossiblyPendingAttachment.tsx | 80 -- .../messages/message/parts/Reactions.tsx | 86 -- .../messages/message/parts/ReplyBlock.tsx | 69 -- .../messages/message/parts/RetryButtons.tsx | 26 - .../message/parts/message-forward/files.tsx | 19 - .../message/parts/message-forward/index.tsx | 79 -- .../messages/message/responses.tsx | 47 - .../messages/message/time-separator.tsx | 26 - .../applications/messages/messages-list.tsx | 272 ------ .../views/applications/messages/messages.scss | 281 ------ .../views/applications/messages/messages.tsx | 148 --- .../messages/parts/go-to-bottom.tsx | 21 - .../messages/parts/thread-avatar.tsx | 48 - .../messages/parts/thread-section.tsx | 49 - .../applications/messages/parts/thread.tsx | 36 - .../applications/messages/parts/threads.scss | 207 ----- .../applications/messages/placeholder.tsx | 17 - .../messages/thread-messages-list.tsx | 166 ---- .../tasks/board-picker/board-picker.jsx | 75 -- .../views/applications/tasks/board/Board.jsx | 501 ----------- .../views/applications/tasks/board/Board.scss | 233 ----- .../applications/tasks/board/BoardEditor.jsx | 76 -- .../tasks/board/list/add-task.jsx | 77 -- .../tasks/board/list/list-editor.jsx | 77 -- .../applications/tasks/board/list/list.jsx | 280 ------ .../applications/tasks/board/list/list.scss | 181 ---- .../applications/tasks/board/task/Modal.scss | 135 --- .../applications/tasks/board/task/Task.jsx | 168 ---- .../applications/tasks/board/task/Task.scss | 150 ---- .../tasks/board/task/TaskDetails.jsx | 240 ----- .../tasks/board/task/TaskEditor.jsx | 259 ------ .../tasks/board/task/TaskElement.jsx | 62 -- .../tasks/board/task/parts/Checklist.jsx | 122 --- .../applications/tasks/tasks-content.jsx | 368 -------- .../app/views/applications/tasks/tasks.scss | 184 ---- .../app/views/applications/tasks/tasks.tsx | 27 - .../applications/tasks/unconfigured-tab.jsx | 92 -- twake/frontend/src/app/views/client/app.tsx | 4 +- .../body}/drive/browser.tsx | 71 +- .../body}/drive/components/public-icon.tsx | 0 .../body}/drive/components/select-users.tsx | 0 .../body}/drive/context-menu.tsx | 0 .../body}/drive/documents/common.tsx | 0 .../body}/drive/documents/document-row.tsx | 2 +- .../body}/drive/documents/folder-row.tsx | 0 .../body}/drive/drive-item.tsx | 0 .../body}/drive/header-path.tsx | 2 +- .../src/app/views/client/body/drive/index.tsx | 26 + .../drive/modals/confirm-delete/index.tsx | 0 .../drive/modals/confirm-trash/index.tsx | 0 .../drive/modals/create/create-folder.tsx | 0 .../body}/drive/modals/create/index.tsx | 2 +- .../body}/drive/modals/properties/index.tsx | 0 .../body}/drive/modals/selector/index.tsx | 0 .../drive/modals/update-access/common.tsx | 0 .../drive/modals/update-access/index.tsx | 0 .../modals/update-access/internal-access.tsx | 0 .../update-access/public-link-access.tsx | 0 .../body}/drive/modals/versions/index.tsx | 2 +- .../body}/drive/shared.tsx | 18 +- .../MainView.tsx => body/index.tsx} | 27 +- .../CompanyHeader/CompanyHeader.scss | 193 ---- .../CompanyHeader/CompanyHeader.tsx | 50 -- .../Parts/CurrentUser/CurrentUser.jsx | 268 ------ .../Parts/CurrentUser/MenuCompanyHeader.tsx | 39 - .../client/channels-bar/Parts/Footer.jsx | 48 - .../channels-bar/Parts/Footer/Footer.jsx | 87 -- .../channels-bar/Parts/Footer/Footer.scss | 95 -- .../src/app/views/client/common/account.tsx | 58 ++ .../src/app/views/client/common/app-grid.tsx | 49 + .../app/views/client/common/disk-usage.tsx | 22 + .../src/app/views/client/common/search.tsx | 58 ++ .../src/app/views/client/header/index.tsx | 39 + twake/frontend/src/app/views/client/index.tsx | 112 ++- .../client/main-view/AppView/AppView.tsx | 25 - .../client/main-view/ContentRestricted.tsx | 18 - .../views/client/main-view/MainContent.tsx | 43 - .../client/main-view/MainHeader/Search.tsx | 65 -- .../app/views/client/main-view/MainView.scss | 168 ---- .../src/app/views/client/main-view/NoApp.tsx | 16 - .../main-view/Tabs/DefaultChannelTab.tsx | 142 --- .../app/views/client/main-view/Tabs/Tab.tsx | 94 -- .../app/views/client/main-view/Tabs/Tabs.scss | 57 -- .../app/views/client/main-view/Tabs/Tabs.tsx | 76 -- .../main-view/Tabs/TabsTemplateEditor.tsx | 119 --- .../popup/UserParameter/UserParameter.jsx | 4 +- .../Pages/WorkspacePartnerTabs/Members.tsx | 4 +- .../WorkspaceParameter/WorkspaceParameter.jsx | 2 +- .../application-parameters/AppsParameters.jsx | 2 +- .../src/app/views/client/side-bar/actions.tsx | 99 ++ .../src/app/views/client/side-bar/index.tsx | 110 +++ .../src/app/views/client/side-bars.tsx | 24 - .../frontend/src/app/views/client/styles.scss | 69 -- .../viewer/archive/controls.tsx | 0 .../viewer/archive/display.tsx | 0 .../viewer/code/controls.tsx | 0 .../viewer/code/display.tsx | 0 .../viewer/controls.tsx | 0 .../viewer/display.tsx | 0 .../viewer/drive-display.tsx | 0 .../viewer/drive-preview.tsx | 0 .../viewer/images/controls.tsx | 0 .../viewer/images/display.tsx | 0 .../viewer/other/controls.tsx | 0 .../viewer/other/display.tsx | 0 .../viewer/other/editors-service.ts | 0 .../viewer/pdf/controls.tsx | 0 .../viewer/pdf/display.tsx | 0 .../viewer/videos/controls.tsx | 0 .../viewer/videos/display.tsx | 0 .../viewer/viewer.tsx | 0 .../components/CompanySelector/index.tsx | 144 --- .../components/CompanySelector/styles.scss | 88 -- .../components/NoWorkspaces/GotALink.tsx | 39 - .../components/NoWorkspaces/NoCompanies.tsx | 70 -- .../components/NoWorkspaces/NoWorkspaces.tsx | 75 -- .../components/NoWorkspaces/styles.scss | 69 -- .../components/Workspace/Workspace.scss | 130 --- .../components/Workspace/Workspace.tsx | 23 - .../components/Workspace/WorkspaceIcon.tsx | 48 - .../app/views/client/workspaces-bar/index.tsx | 51 -- .../views/client/workspaces-bar/styles.scss | 121 --- .../app/views/integration/components/apps.jsx | 51 -- .../src/app/views/integration/index.tsx | 60 -- .../src/app/views/integration/styles.scss | 61 -- twake/frontend/src/app/views/join/index.tsx | 6 +- .../views/login/internal/internal-login.tsx | 2 +- twake/frontend/src/app/views/login/login.tsx | 2 +- twake/frontend/tailwind.config.js | 12 +- 261 files changed, 1496 insertions(+), 16604 deletions(-) delete mode 100644 twake/backend/node/src/cli/cmds/console.ts delete mode 100644 twake/backend/node/src/cli/cmds/console_cmds/merge.ts delete mode 100644 twake/backend/node/src/services/console/processing/merge.ts delete mode 100644 twake/frontend/public/public/img/beta.png create mode 100644 twake/frontend/public/public/img/grid/tmail.png create mode 100644 twake/frontend/public/public/img/grid/twake.png delete mode 100644 twake/frontend/public/public/img/hexagon.png create mode 100644 twake/frontend/public/public/img/logo/392x392.png create mode 100644 twake/frontend/public/public/img/logo/logo-color.svg create mode 100644 twake/frontend/public/public/img/logo/logo-text-black.png create mode 100644 twake/frontend/public/public/img/logo/logo-text-white.png create mode 100644 twake/frontend/public/public/img/primary-gradient.png delete mode 100644 twake/frontend/public/public/img/twake-emoji/twake-calendar.png delete mode 100644 twake/frontend/public/public/img/twake-emoji/twake-calendar.svg delete mode 100644 twake/frontend/public/public/img/twake-emoji/twake-drive.png delete mode 100644 twake/frontend/public/public/img/twake-emoji/twake-drive.svg delete mode 100644 twake/frontend/public/public/img/twake-emoji/twake-task.svg delete mode 100644 twake/frontend/public/public/img/twake-emoji/twake-tasks.png delete mode 100755 twake/frontend/src/app/components/configurators/config-body-layer.jsx delete mode 100755 twake/frontend/src/app/components/configurators/configurators.scss rename twake/frontend/src/app/{views => components}/desktop-redirect/index.tsx (100%) rename twake/frontend/src/app/{views => components}/mobile-redirect/index.tsx (100%) rename twake/frontend/src/app/{views => components}/mobile-redirect/style.scss (100%) delete mode 100644 twake/frontend/src/app/components/quoted-message/quoted-message.tsx delete mode 100644 twake/frontend/src/app/molecules/quoted-content/index.tsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/calendar-content.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/calendar.scss delete mode 100644 twake/frontend/src/app/views/applications/calendar/calendar.tsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/event.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/full-calendar/full-calendar.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/full-calendar/full-calendar.scss delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/CalendarEditor.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/EventCreation.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/EventDetails.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/EventModification.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/Modals.scss delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/Part/DateSelector.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/Part/DateSelector.scss delete mode 100755 twake/frontend/src/app/views/applications/calendar/modals/Part/Participants.jsx delete mode 100755 twake/frontend/src/app/views/applications/calendar/unconfigured-tab.jsx delete mode 100644 twake/frontend/src/app/views/applications/drive/index.tsx delete mode 100644 twake/frontend/src/app/views/applications/drive/twake-tab-configuration.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/index.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/input.scss delete mode 100644 twake/frontend/src/app/views/applications/messages/input/input.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/new-thread.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/parts/Attachments.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/parts/EphemeralMessages.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/parts/InputOptions.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/parts/IsWriting.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/parts/MessageExternalFilePicker.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/input/parts/PendingAttachments.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/list-builder.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/message-with-replies.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/message.scss delete mode 100644 twake/frontend/src/app/views/applications/messages/message/message.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/Blocks.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/Blocks.utils.ts delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/ChannelActivity/ActivityMessage.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/DeletedContent.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.scss delete mode 100755 twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.tsx delete mode 100755 twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstThreadMessage.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.scss delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/LoadMoreReplies.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/MessageAttachments.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/MessageContent.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.scss delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/MessageHeader.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/Options.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/PossiblyPendingAttachment.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/Reactions.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/ReplyBlock.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/RetryButtons.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/message-forward/files.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/parts/message-forward/index.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/responses.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/message/time-separator.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/messages-list.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/messages.scss delete mode 100644 twake/frontend/src/app/views/applications/messages/messages.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/parts/go-to-bottom.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/parts/thread-avatar.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/parts/thread-section.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/parts/thread.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/parts/threads.scss delete mode 100644 twake/frontend/src/app/views/applications/messages/placeholder.tsx delete mode 100644 twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board-picker/board-picker.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/Board.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/Board.scss delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/BoardEditor.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/list/add-task.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/list/list-editor.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/list/list.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/list/list.scss delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/task/Modal.scss delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/task/Task.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/task/Task.scss delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/task/TaskDetails.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/task/TaskEditor.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/task/TaskElement.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/board/task/parts/Checklist.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/tasks-content.jsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/tasks.scss delete mode 100644 twake/frontend/src/app/views/applications/tasks/tasks.tsx delete mode 100755 twake/frontend/src/app/views/applications/tasks/unconfigured-tab.jsx rename twake/frontend/src/app/views/{applications => client/body}/drive/browser.tsx (73%) rename twake/frontend/src/app/views/{applications => client/body}/drive/components/public-icon.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/components/select-users.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/context-menu.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/documents/common.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/documents/document-row.tsx (98%) rename twake/frontend/src/app/views/{applications => client/body}/drive/documents/folder-row.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/drive-item.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/header-path.tsx (98%) create mode 100644 twake/frontend/src/app/views/client/body/drive/index.tsx rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/confirm-delete/index.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/confirm-trash/index.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/create/create-folder.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/create/index.tsx (98%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/properties/index.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/selector/index.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/update-access/common.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/update-access/index.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/update-access/internal-access.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/update-access/public-link-access.tsx (100%) rename twake/frontend/src/app/views/{applications => client/body}/drive/modals/versions/index.tsx (97%) rename twake/frontend/src/app/views/{applications => client/body}/drive/shared.tsx (80%) rename twake/frontend/src/app/views/client/{main-view/MainView.tsx => body/index.tsx} (70%) delete mode 100755 twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss delete mode 100755 twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx delete mode 100755 twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CurrentUser.jsx delete mode 100644 twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/MenuCompanyHeader.tsx delete mode 100755 twake/frontend/src/app/views/client/channels-bar/Parts/Footer.jsx delete mode 100755 twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.jsx delete mode 100755 twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.scss create mode 100644 twake/frontend/src/app/views/client/common/account.tsx create mode 100644 twake/frontend/src/app/views/client/common/app-grid.tsx create mode 100644 twake/frontend/src/app/views/client/common/disk-usage.tsx create mode 100644 twake/frontend/src/app/views/client/common/search.tsx create mode 100644 twake/frontend/src/app/views/client/header/index.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/AppView/AppView.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/ContentRestricted.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/MainContent.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/MainView.scss delete mode 100644 twake/frontend/src/app/views/client/main-view/NoApp.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/Tabs/DefaultChannelTab.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/Tabs/Tab.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/Tabs/Tabs.scss delete mode 100644 twake/frontend/src/app/views/client/main-view/Tabs/Tabs.tsx delete mode 100644 twake/frontend/src/app/views/client/main-view/Tabs/TabsTemplateEditor.tsx create mode 100644 twake/frontend/src/app/views/client/side-bar/actions.tsx create mode 100644 twake/frontend/src/app/views/client/side-bar/index.tsx delete mode 100755 twake/frontend/src/app/views/client/side-bars.tsx delete mode 100755 twake/frontend/src/app/views/client/styles.scss rename twake/frontend/src/app/views/{applications => client}/viewer/archive/controls.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/archive/display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/code/controls.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/code/display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/controls.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/drive-display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/drive-preview.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/images/controls.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/images/display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/other/controls.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/other/display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/other/editors-service.ts (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/pdf/controls.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/pdf/display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/videos/controls.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/videos/display.tsx (100%) rename twake/frontend/src/app/views/{applications => client}/viewer/viewer.tsx (100%) delete mode 100644 twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/index.tsx delete mode 100644 twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/styles.scss delete mode 100644 twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/GotALink.tsx delete mode 100644 twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies.tsx delete mode 100644 twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces.tsx delete mode 100644 twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/styles.scss delete mode 100755 twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.scss delete mode 100755 twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.tsx delete mode 100755 twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/WorkspaceIcon.tsx delete mode 100755 twake/frontend/src/app/views/client/workspaces-bar/index.tsx delete mode 100755 twake/frontend/src/app/views/client/workspaces-bar/styles.scss delete mode 100644 twake/frontend/src/app/views/integration/components/apps.jsx delete mode 100644 twake/frontend/src/app/views/integration/index.tsx delete mode 100644 twake/frontend/src/app/views/integration/styles.scss diff --git a/twake/backend/node/config/default.json b/twake/backend/node/config/default.json index 9a0c6491..06dc5c2b 100644 --- a/twake/backend/node/config/default.json +++ b/twake/backend/node/config/default.json @@ -8,37 +8,37 @@ "mobile_appstore": "https://apps.apple.com/fr/app/twake/id1588764852?l=en", "mobile_googleplay": "https://play.google.com/store/apps/details?id=com.twake.twake&gl=FR" }, + "app_grid": [ + { + "name": "Tmail", + "logo": "/public/img/grid/tmail.png", + "url": "https://tmail.linagora.com/" + }, + { + "name": "Twake", + "logo": "/public/img/grid/twake.png", + "url": "https://twake.app/" + } + ], "accounts": { - "_type": "console", + "_type": "remote", "type": "internal", "internal": { "disable_account_creation": false }, - "console": { - "account_management_url": "http://web.twake-console.local/profile?company-code={company_id}", + "remote": { "authority": "http://auth.example.com/", "client_id": "twakeweb", + "client_secret": "", + "issuer": "", + "audience": "", + "redirect_uris": [""], + "account_management_url": "http://web.twake-console.local/profile?company-code={company_id}", "collaborators_management_url": "http://web.twake-console.local/compaies/{company_id}/users?company-code={company_id}", "company_management_url": "http://web.twake-console.local/companies?company-code={company_id}" } } }, - "console": { - "_type": "remote", - "type": "internal", - "remote": { - "new_console": false, - "username": "", - "password": "12345678", - "url": "https://some-remote-console-url/", - "hook": { - "token": "12345678" - } - }, - "internal": { - "disable_account_creation": false - } - }, "sentry": { "dsn": "" }, @@ -63,10 +63,6 @@ "root": "./public" } }, - "phpnode": { - "secret": "api_supersecret", - "php_endpoint": "http://nginx:80" - }, "websocket": { "path": "/socket/", "adapters": { @@ -154,7 +150,6 @@ "api_key": "secret", "sender": "noreply@twake.app" }, - "applications": [], "services": [ "auth", "push", diff --git a/twake/backend/node/package.json b/twake/backend/node/package.json index 5caaa195..19ee7ab8 100644 --- a/twake/backend/node/package.json +++ b/twake/backend/node/package.json @@ -120,6 +120,7 @@ "@fastify/formbody": "^6.0.0", "@fastify/static": "^5.0.1", "@ffprobe-installer/ffprobe": "^1.4.1", + "@okta/jwt-verifier": "^3.0.1", "@sentry/node": "^6.19.7", "@sentry/tracing": "^6.19.7", "@socket.io/redis-adapter": "^7.1.0", @@ -160,6 +161,7 @@ "get-website-favicon": "^0.0.7", "html-metadata-parser": "^2.0.4", "html-to-text": "^8.2.1", + "idtoken-verifier": "^2.2.3", "jsonwebtoken": "^8.5.1", "keyv": "^4.5.0", "lodash": "^4.17.21", @@ -172,6 +174,7 @@ "node-cron": "^3.0.0", "node-fetch": "^2.6.7", "node-uuid": "^1.4.8", + "openid-client": "^5.4.0", "ora": "^5.4.0", "pdf-parse": "^1.1.1", "pdf2pic": "^2.1.4", diff --git a/twake/backend/node/src/cli/cmds/console.ts b/twake/backend/node/src/cli/cmds/console.ts deleted file mode 100644 index a1d1eee4..00000000 --- a/twake/backend/node/src/cli/cmds/console.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { CommandModule } from "yargs"; - -const command: CommandModule = { - describe: "Manage Twake Console", - command: "console ", - builder: yargs => - yargs.commandDir("console_cmds", { - visit: commandModule => commandModule.default, - }), - // eslint-disable-next-line @typescript-eslint/no-empty-function - handler: () => {}, -}; - -export default command; diff --git a/twake/backend/node/src/cli/cmds/console_cmds/merge.ts b/twake/backend/node/src/cli/cmds/console_cmds/merge.ts deleted file mode 100644 index c6e093e5..00000000 --- a/twake/backend/node/src/cli/cmds/console_cmds/merge.ts +++ /dev/null @@ -1,257 +0,0 @@ -import yargs from "yargs"; -import ora from "ora"; -import twake from "../../../twake"; -import { CompanyReport, UserReport } from "../../../services/console/types"; -import Company from "../../../services/user/entities/company"; -import gr from "../../../services/global-resolver"; -import { ConsoleServiceImpl } from "../../../services/console/service"; - -/** - * Merge command parameters. Check the builder definition below for more details. - */ -type MergeParams = { - url: string; - concurrent: number; - dry: boolean; - console: string; - link: boolean; - csv: boolean; - client: string; - secret: string; -}; - -const services = [ - "platform-services", - "user", - "channels", - "notifications", - "database", - "webserver", - "message-queue", - "console", -]; - -const command: yargs.CommandModule = { - command: "merge", - describe: "Merge Twake Chat users in the Twake Console", - builder: { - url: { - default: "http://localhost:8080", - type: "string", - description: "URL of the Twake console", - }, - concurrent: { - default: 1, - type: "number", - description: "Number of concurrent imports", - }, - dry: { - default: false, - type: "boolean", - description: "Make a dry run without creating anything on the Twake console", - }, - csv: { - default: false, - type: "boolean", - description: "Generate result as CSV", - }, - console: { - default: "console", - type: "string", - description: "The console service identifier to user to link user and companies", - }, - link: { - default: true, - type: "boolean", - description: - "Link the companies/users to external companies/user. Works with the --console parameter", - implies: "console", - }, - client: { - default: "twake", - type: "string", - description: "Client identifier to be used to authenticate calls to the Console", - }, - secret: { - default: "secret", - type: "string", - description: "Client secret to be used to authenticate calls to the Console", - }, - }, - handler: async argv => { - const spinner = ora({ text: `Importing Twake data on ${argv.url}` }).start(); - const platform = await twake.run(services); - await gr.doInit(platform); - const consoleService = platform.getProvider("console"); - const merge = consoleService.merge( - argv.url, - argv.concurrent, - argv.dry, - argv.console, - argv.link, - argv.client, - argv.secret, - ); - const start = Date.now(); - let stop: number = start; - const userReports: UserReport[] = []; - const companyReports: CompanyReport[] = []; - const ownerReports: UserReport[] = []; - let companiesWithoutAdmin: Company[] = []; - - const process = merge.subscribe({ - next: report => { - if (report.type === "company:created") { - const companyReport = report.data as CompanyReport; - companyReports.push(companyReport); - - if (companyReport.status === "success") { - spinner.succeed( - `Company created: ${companyReport.company.source.id} ${companyReport.company.source.displayName}`, - ); - } else { - spinner.fail( - `Creation error for company ${companyReport.company.source.id} (${companyReport.company.source.displayName}): ${companyReport?.error?.message}`, - ); - } - } - - if (report.type === "user:created") { - const userReport = report.data as UserReport; - userReports.push(userReport); - - if (userReport.status === "success") { - spinner.succeed( - `Company ${userReport.user.source.company.id}: User created ${userReport.user.destination.id}`, - ); - } else { - spinner.fail( - `Company ${userReport.user.source.company.id}: User creation error ${userReport.user.destination.id}: ${userReport?.error?.message}`, - ); - } - } - - if (report.type === "user:updated") { - const userReport = report.data as UserReport; - ownerReports.push(userReport); - if (userReport.status === "success") { - spinner.succeed( - `Company ${userReport.destinationCompanyCode} owner updated to user ${userReport.destinationId}`, - ); - } else { - spinner.fail( - `Company ${userReport.destinationCompanyCode}: Owner update error for user ${userReport.destinationId}: ${userReport?.error?.message}`, - ); - } - } - - if (report.type === "processing:owner") { - spinner.start("Computing company owners, please wait..."); - } - - if (report.type === "user:updating") { - //spinner.succeed(`Updating owner for company ${report?.company?.sourceId}`); - } - - if (report.type === "log") { - report.message && (spinner.text = report.message); - } - - if (report.type === "company:withoutadmin") { - report.message && (spinner.text = report.message); - const companies = (report.data || []) as Company[]; - - if (companies.length) { - companiesWithoutAdmin = companies; - } - } - }, - error: () => { - spinner.fail("Fatal error"); - }, - complete: async () => { - stop = Date.now(); - spinner.succeed("Merge is complete"); - displayStats(); - await tearDown(); - }, - }); - - async function tearDown() { - await platform.stop(); - process.unsubscribe(); - } - - function reportAsCSV() { - const users = userReports.map( - user => - `${user.sourceId},${user.destinationId},${user.destinationCompanyCode},${user.status}`, - ); - const userCSV = [...["sourceId,destinationId,destinationCompanyCode,status"], ...users].join( - "\n", - ); - - const companies = companyReports.map( - company => `${company.sourceId},${company.destinationCode},${company.status}`, - ); - const companyCSV = [...["sourceId,destinationCode,status"], ...companies].join("\n"); - - console.log(userCSV); - console.log(companyCSV); - } - - function displayStats() { - const userFailures = userReports.filter(user => user.error); - const companyFailures = companyReports.filter(company => company.error); - const ownerFailures = ownerReports.filter(report => report.error); - - console.log("# Import report"); - console.log(`Data imported in ${(stop - start) / 1000} seconds`); - console.log("## Company"); - console.log("- Companies success:", companyReports.filter(company => !company.error).length); - console.log("- Companies failure:", companyFailures.length); - if (companyFailures.length) { - console.log("### Failures"); - companyFailures.forEach(failure => - console.log( - `- Company ${failure.company.source.id} error: ${failure.company.error?.message}`, - ), - ); - } - - console.log("## User"); - console.log("- Users success:", userReports.filter(user => !user.error).length); - console.log("- Users failure:", userFailures.length); - if (userFailures.length) { - console.log("### Failures"); - userFailures.forEach(failure => - console.log( - `- User ${failure.user.source.user.user_id} error: ${failure.user.error?.message}`, - ), - ); - } - - console.log("## Owner"); - console.log("- Owners success:", ownerReports.filter(report => !report.error).length); - console.log("- Owners failure:", ownerFailures.length); - if (ownerFailures.length) { - console.log("### Failures"); - ownerFailures.forEach(report => - console.log(`- User ${report.destinationId} error: ${report?.error?.message}`), - ); - } - - console.log("## Warnings"); - console.log("### Companies witout admins"); - companiesWithoutAdmin.forEach(company => { - console.log(`- ${company.id} - ${company.displayName}`); - }); - - if (argv.csv) { - reportAsCSV(); - } - } - }, -}; - -export default command; diff --git a/twake/backend/node/src/services/console/client-interface.ts b/twake/backend/node/src/services/console/client-interface.ts index 878b90ce..2663d065 100644 --- a/twake/backend/node/src/services/console/client-interface.ts +++ b/twake/backend/node/src/services/console/client-interface.ts @@ -60,7 +60,7 @@ export interface ConsoleServiceClient { fetchCompanyInfo(consoleCompanyCode: string): Promise; - getUserByAccessToken(accessToken: string): Promise; + getUserByAccessToken(idToken: string): Promise; resendVerificationEmail(email: string): Promise; } diff --git a/twake/backend/node/src/services/console/clients/internal.ts b/twake/backend/node/src/services/console/clients/internal.ts index 59af4f0b..13caf3b9 100644 --- a/twake/backend/node/src/services/console/clients/internal.ts +++ b/twake/backend/node/src/services/console/clients/internal.ts @@ -95,7 +95,7 @@ export class ConsoleInternalClient implements ConsoleServiceClient { throw new Error("Method should not be implemented."); } - getUserByAccessToken(_accessToken: string): Promise { + getUserByAccessToken(_idToken: string): Promise { logger.info("Internal: getUserByAccessToken"); throw new Error("Method should not be implemented."); } diff --git a/twake/backend/node/src/services/console/clients/remote.ts b/twake/backend/node/src/services/console/clients/remote.ts index 14e8ab06..03749b67 100644 --- a/twake/backend/node/src/services/console/clients/remote.ts +++ b/twake/backend/node/src/services/console/clients/remote.ts @@ -1,5 +1,5 @@ -import axios, { AxiosInstance } from "axios"; -import { v1 as uuidv1 } from "uuid"; +import { AxiosInstance } from "axios"; +import { Issuer } from "openid-client"; import { ConsoleServiceClient } from "../client-interface"; import { ConsoleCompany, @@ -14,16 +14,12 @@ import { UpdatedConsoleUserRole, } from "../types"; -import User, { getInstance } from "../../user/entities/user"; -import Company, { - CompanySearchKey, - getInstance as getCompanyInstance, -} from "../../user/entities/company"; +import OktaJwtVerifier from "@okta/jwt-verifier"; import { CrudException } from "../../../core/platform/framework/api/crud-service"; -import coalesce from "../../../utils/coalesce"; import { logger } from "../../../core/platform/framework/logger"; -import { CompanyFeaturesEnum, CompanyLimitsEnum } from "../../user/web/types"; import gr from "../../global-resolver"; +import Company, { CompanySearchKey } from "../../user/entities/company"; +import User from "../../user/entities/user"; import { ConsoleServiceImpl } from "../service"; export class ConsoleRemoteClient implements ConsoleServiceClient { @@ -31,92 +27,30 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { client: AxiosInstance; private infos: ConsoleOptions; + private verifier: OktaJwtVerifier; constructor(consoleInstance: ConsoleServiceImpl, private dryRun: boolean) { this.infos = consoleInstance.consoleOptions; - this.client = axios.create({ baseURL: this.infos.url }); + this.verifier = new OktaJwtVerifier({ + issuer: this.infos.issuer, + }); + } + fetchCompanyInfo(consoleCompanyCode: string): Promise { + throw new Error("Method not implemented."); + } + resendVerificationEmail(email: string): Promise { + throw new Error("Method not implemented."); } private auth() { - return { username: this.infos.username, password: this.infos.password }; + return {}; } async addUserToCompany( company: ConsoleCompany, user: CreateConsoleUser, ): Promise { - logger.info("Remote: addUserToCompany"); - - const isNewConsole = this.infos.new_console; - - if (this.dryRun) { - return { - _id: uuidv1(), - }; - } - - if (user.skipInvite && user.name && user.email && user.password) { - return this.client - .post(`/api/companies/${company.code}/users`, user, { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - params: { - skipInvite: user.skipInvite, - }, - }) - .then(({ data }) => data); - } else { - const invitationData = { - role: user.role, - emails: [ - { - email: user.email, - role: user.role, - }, - ], - inviter: { email: user.inviterEmail }, - ...(isNewConsole - ? { - applicationCodes: ["twake"], - } - : {}), - }; - - const result = await this.client - .post( - `/api/companies/${company.code}/${isNewConsole ? "invitations" : "users/invitation"}`, - invitationData, - { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - }, - ) - .then(async ({ data, status }) => { - //Fixme: When console solve https://gitlab.com/COMPANY_LINAGORA/software/saas/twake-console-account/-/issues/36 - // we can remove this fallback - if ([200, 201].indexOf(status) >= 0) { - return data; - } else { - return this.client - .post(`/api/companies/${company.code}/users`, user, { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - params: { - skipInvite: user.skipInvite, - }, - }) - .then(({ data }) => data); - } - }); - - return result; - } + return null; } async updateUserRole( @@ -124,47 +58,12 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { user: UpdateConsoleUserRole, ): Promise { logger.info("Remote: updateUserRole"); - - if (this.dryRun) { - return { - id: user.id, - role: user.role, - }; - } - - const result = await this.client - .put( - `/api/companies/${company.code}/users/${user.id}`, - { role: user.role }, - { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - }, - ) - .then(({ data }) => data); - - return result; + return null; } async createCompany(company: CreateConsoleCompany): Promise { logger.info("Remote: createCompany"); - - if (this.dryRun) { - return company; - } - - const result = await this.client - .post("/api/companies", company, { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - }) - .then(({ data }) => data); - - return result; + return null; } // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -175,216 +74,11 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { } async updateLocalCompanyFromConsole(partialCompanyDTO: ConsoleHookCompany): Promise { - logger.info("Remote: updateLocalCompanyFromConsole"); - - const companyDTO = await this.fetchCompanyInfo(partialCompanyDTO.details.code); - - let company = await gr.services.companies.getCompany({ - identity_provider_id: companyDTO.details.code, - }); - - if (!company) { - const newCompany = getCompanyInstance({ - id: uuidv1(), - identity_provider: "console", - identity_provider_id: companyDTO.details.code, - }); - company = await gr.services.companies.createCompany(newCompany); - } - - const details = companyDTO.details; - - if (details) { - company.name = coalesce(details.name, company.name); - company.displayName = coalesce(details.name, company.displayName); - - const avatar = details.avatar; - - company.logo = - details.logo || - (avatar && avatar.type && avatar.type !== "url" - ? this.infos.url.replace(/\/$/, "") + "/api/avatars/" + avatar.value - : companyDTO.value || ""); - } - - if (!company.plan) { - company.plan = { name: "", limits: undefined, features: undefined }; - } - - const limits = companyDTO.limits.twake || companyDTO.limits; - - //FIXME this is a hack right now! - let planFeatures: any = { - [CompanyFeaturesEnum.CHAT_GUESTS]: true, - [CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: true, - [CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: true, - [CompanyFeaturesEnum.CHAT_EDIT_FILES]: true, - [CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: true, - [CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]: true, - }; - - if (limits.members < 0 && this.infos.type === "remote") { - //Hack to say this is free version - planFeatures = { - [CompanyFeaturesEnum.CHAT_GUESTS]: false, - [CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: false, - [CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: false, - [CompanyFeaturesEnum.CHAT_EDIT_FILES]: false, - [CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: false, // Currently inactive - }; - company.plan.name = "free"; - } else { - company.plan.name = "standard"; - } - company.plan.features = { ...planFeatures }; - company.plan.limits = { - [CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]: 10000, // To remove duplicata since we define this in formatCompany function - [CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]: limits["members"], - [CompanyLimitsEnum.COMPANY_GUESTS_LIMIT]: limits["guests"], - }; - - company.stats = coalesce(companyDTO.stats, company.stats); - - await gr.services.companies.updateCompany(company); - - return company; + return null; } async updateLocalUserFromConsole(code: string): Promise { - logger.info("Remote: updateLocalUserFromConsole"); - - const userDTO = await this.fetchUserInfo(code); - - if (!userDTO) { - throw CrudException.badRequest("User not found on Console"); - } - - const roles = userDTO.roles.filter( - role => role.applications === undefined || role.applications.find(a => a.code === "twake"), - ); - - let user = await gr.services.users.getByConsoleId(userDTO._id); - - if (!user) { - if (!userDTO.email) { - throw CrudException.badRequest("Email is required"); - } - - let username = userDTO.email - .split("@")[0] - .toLocaleLowerCase() - .replace(/[^a-zA-Z0-9]/g, "") - .replace(/ +/g, "_"); - - if (await gr.services.users.isEmailAlreadyInUse(userDTO.email)) { - const user = await gr.services.users.getByEmail(userDTO.email); - - if (user.identity_provider === "console") { - let emailUserOnConsole = null; - try { - emailUserOnConsole = await this.fetchUserInfo(user.identity_provider_id); - } catch (err) {} - if (emailUserOnConsole?._id) { - throw CrudException.badRequest( - `Console user not created because email already exists on console with different id: ${emailUserOnConsole._id} while requested to provision user with id: ${userDTO._id}`, - ); - } - - //If not present on console, then anonymise this one and create a new one - await gr.services.users.anonymizeAndDelete( - { id: user.id }, - { - user: { id: user.id, server_request: true }, - }, - ); - - //Now we can create the new user - } - } - - username = await gr.services.users.getAvailableUsername(username); - if (!username) { - throw CrudException.badRequest("Console user not created because username already exists"); - } - - user = getInstance({}); - user.username_canonical = (username || "").toLocaleLowerCase(); - user.email_canonical = userDTO.email; - user.deleted = false; - } - - user.email_canonical = coalesce(userDTO.email, user.email_canonical); - user.phone = ""; - user.first_name = coalesce(userDTO.name, user.first_name); - user.last_name = coalesce(userDTO.surname, user.last_name); - user.identity_provider = "console"; - user.identity_provider_id = userDTO._id; - user.mail_verified = coalesce(userDTO.isVerified, user.mail_verified); - if (userDTO.preference) { - user.preferences = user.preferences || {}; - user.preferences.allow_tracking = coalesce( - userDTO.preference.allowTrackingPersonalInfo, - user.preferences?.allow_tracking, - ); - user.preferences.language = coalesce(userDTO.preference.locale, user.preferences?.language); - user.preferences.timezone = coalesce(userDTO.preference.timeZone, user.preferences?.timezone); - } - - const avatar = userDTO.avatar; - - user.picture = - avatar && avatar.type && avatar.type !== "url" - ? this.infos.url.replace(/\/$/, "") + "/api/avatars/" + avatar.value - : ""; - - await gr.services.users.save(user); - - const getCompanyByCode = async (companyCode: string) => { - let company = await gr.services.companies.getCompany({ - identity_provider_id: companyCode, - }); - if (!company) { - const companyDTO = await this.fetchCompanyInfo(companyCode); - await this.updateLocalCompanyFromConsole(companyDTO); - company = await gr.services.companies.getCompany({ - identity_provider_id: companyCode, - }); - } - return company; - }; - - const updatedListOfCompanies = []; - if (roles) { - for (const role of roles) { - const companyConsoleCode = role.targetCode; - const roleName = role.roleCode; - const company = await getCompanyByCode(companyConsoleCode); - if (!company) { - throw CrudException.notFound(`Company ${companyConsoleCode} not found`); - } - //Make sure user is active, if not we remove it - if (role.status !== "deactivated") { - updatedListOfCompanies.push(company); - const applications = (role.applications || []).map(a => a.code); - await gr.services.companies.setUserRole(company.id, user.id, roleName, applications); - } - } - } - - // Remove user from companies not in the console - const currentCompanies = await gr.services.companies.getAllForUser(user.id); - for (const company of currentCompanies) { - if (!updatedListOfCompanies.map(c => c.id).includes(company.group_id)) { - await gr.services.companies.removeUserFromCompany( - { id: company.group_id }, - { id: user.id }, - ); - } - } - - await gr.services.users.save(user, { user: { id: user.id, server_request: true } }); - - return user; + return null; } async removeCompanyUser(consoleUserId: string, company: Company): Promise { @@ -419,81 +113,25 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { await gr.services.companies.removeCompany(companySearchKey); } - fetchCompanyInfo(consoleCompanyCode: string): Promise { - logger.info(`Remote: fetchCompanyInfo ${consoleCompanyCode}`); - return this.client - .get(`/api/companies/${consoleCompanyCode}`, { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - }) - .then(({ data }) => data.company) - .catch(e => { - if (e.response.status === 401) { - throw CrudException.forbidden("Bad console credentials"); - } - throw e; - }); - } - - fetchUserInfo(consoleUserId: string): Promise { - logger.info(`Remote: fetchUserInfo ${consoleUserId}`); - return this.client - .get(`/api/users/${consoleUserId}`, { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - }) - .then(({ data }) => data) - .catch(e => { - if (e.response.status === 401) { - throw CrudException.forbidden("Bad console credentials"); - } - throw e; - }); - } - - getUserByAccessToken(accessToken: string): Promise { - logger.info("Remote: getUserByAccessToken"); - return this.client - .get("/api/users/profile", { - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${accessToken}`, - }, - }) - .then(({ data }) => data) - .catch(e => { - if (e.response?.status === 401) { - throw CrudException.forbidden("Bad access token credentials"); - } - throw e; - }); - } - - async resendVerificationEmail(email: string) { - logger.info("Remote: resendVerificationEmail"); - return this.client - .post( - "/api/users/resend-verification-email", - { - email, - }, - { - auth: this.auth(), - headers: { - "Content-Type": "application/json", - }, - }, - ) - .then(({ data }) => data) - .catch(e => { - if (e.response.status === 401) { - throw CrudException.forbidden("Bad credentials"); - } - throw e; - }); + async getUserByAccessToken(idToken: string): Promise { + const user = (await this.verifier.verifyIdToken(idToken, this.infos.audience)).claims as any; + console.log("user", user); + return { + _id: user.sub, + roles: [] as any, + email: user.email, + name: user.given_name, + surname: user.family_name, + isVerified: true, + preference: { + locale: user.locale, + timeZone: 0, + allowTrackingPersonalInfo: true, + }, + avatar: { + type: "url", + value: user.picture, + }, + }; } } diff --git a/twake/backend/node/src/services/console/processing/merge.ts b/twake/backend/node/src/services/console/processing/merge.ts deleted file mode 100644 index 62fe2316..00000000 --- a/twake/backend/node/src/services/console/processing/merge.ts +++ /dev/null @@ -1,426 +0,0 @@ -import passwordGenerator from "generate-password"; -import { concat, EMPTY, forkJoin, from, Observable, ReplaySubject } from "rxjs"; -import { - count, - distinct, - filter, - groupBy, - map, - mergeMap, - min, - share, - tap, - toArray, -} from "rxjs/operators"; -import { getLogger } from "../../../core/platform/framework"; -import { - ExecutionContext, - Paginable, - Pagination, -} from "../../../core/platform/framework/api/crud-service"; -import Company from "../../user/entities/company"; -import User from "../../user/entities/user"; -import { - CompanyCreatedStreamObject, - CompanyReport, - ConsoleOptions, - CreatedConsoleCompany, - CreatedConsoleUser, - MergeProgress, - ProcessReport, - UpdateConsoleUserRole, - UserCreatedStreamObject, - UserReport, -} from "../types"; -import { getInstance as getExternalUserInstance } from "../../user/entities/external_user"; -import { getInstance as getExternalGroupInstance } from "../../user/entities/external_company"; -import CompanyUser from "../../user/entities/company_user"; -import { ConsoleRemoteClient } from "../clients/remote"; -import { ConsoleServiceClient } from "../client-interface"; -import { DatabaseServiceAPI } from "../../../core/platform/services/database/api"; -import { CompanyUserRole } from "../../user/web/types"; -import gr from "../../global-resolver"; -import { ConsoleServiceImpl } from "../service"; - -const logger = getLogger("console.process.merge"); - -export class MergeProcess { - private client: ConsoleServiceClient; - - constructor( - private database: DatabaseServiceAPI, - private dryRun: boolean, - private consoleId: string = "console", - private linkExternal: boolean = true, - consoleClientOptions: ConsoleOptions, - ) { - const consoleService = new ConsoleServiceImpl(consoleClientOptions); - this.client = new ConsoleRemoteClient(consoleService, dryRun); - } - - merge(concurrent: number = 1): MergeProgress { - const progress$ = new ReplaySubject(); - const { users$, companies$ } = this.getStreams(concurrent); - - const owners$ = users$.pipe( - // get only the admins - filter(userInCompany => userInCompany.source.user.level.valueOf() === 3), - // group by company id - groupBy(userInCompany => userInCompany.source.company.id), - mergeMap(group => - group.pipe( - // get the admin with the smaller creation date, let's say that this is the first one in the company so it is the owner - min((a, b) => { - return (a.source?.user?.dateAdded || 0) <= (b.source?.user?.dateAdded || 0) ? -1 : 1; - }), - ), - ), - ); - - const numberOfAdmins$ = users$.pipe(count(user => user.source.user.level.valueOf() === 3)); - const companyWithoutAdmin$ = users$.pipe( - // group by company - groupBy(user => user.source.company.id), - mergeMap(group => - group.pipe( - // get users as array - // TODO: we may be able to do this without doing a toArray but just by playing with the group - toArray(), - // filter groups where there is no user with level === 3 - filter(users => !users.some(user => user.source.user.level.valueOf() === 3)), - // take first element to get the company - map(users => users[0].source.company), - ), - ), - toArray(), - ); - - const companiesSubscription = companies$.subscribe({ - next(company) { - progress$.next({ - type: "company:created", - data: { - sourceId: company.source.id, - destinationCode: company.destination.code, - status: company.error ? "failure" : "success", - company, - error: company.error, - } as CompanyReport, - }); - }, - }); - - const usersSubscription = users$.subscribe({ - next(user) { - progress$.next({ - type: "user:created", - data: { - sourceId: user.source.user.id, - destinationId: user.destination.id, - destinationCompanyCode: user.destination.companyCode, - status: user.error ? "failure" : "success", - user, - error: user.error, - } as UserReport, - }); - }, - error(err: Error) { - console.error(err); - }, - }); - - const updateOwners$ = owners$.pipe( - mergeMap(owner => this.updateUserRole(owner, "owner"), concurrent), - tap(user => - progress$.next({ - type: "user:updated", - data: { - sourceId: user.source.source.user.id, - destinationId: user.source.destination.id, - destinationCompanyCode: user.source.destination.companyCode, - status: user.result.error ? "failure" : "success", - user: user.source, - error: user.result.error, - } as UserReport, - }), - ), - ); - - const process$ = forkJoin([users$, companies$, numberOfAdmins$, companyWithoutAdmin$]).pipe( - tap(result => { - progress$.next({ type: "log", message: `There are ${result[2]} admins` }); - progress$.next({ - type: "company:withoutadmin", - message: `Companies without admins ${result[3].length}`, - data: result[3], - }); - progress$.next({ type: "processing:owner" }); - }), - mergeMap(() => from(updateOwners$), concurrent), - ); - - const process = process$.subscribe({ - complete() { - usersSubscription.unsubscribe(); - companiesSubscription.unsubscribe(); - process.unsubscribe(); - progress$.complete(); - }, - }); - - return progress$; - } - - private getStreams( - concurrent: number = 1, - context?: ExecutionContext, - ): { - // hot companies observable - companies$: Observable; - // hot users observable - users$: Observable; - } { - const companies$ = this.getCompanies().pipe( - mergeMap(company => this.createCompany(company), concurrent), - // make it hot - share(), - ); - - const users$ = companies$.pipe( - filter(company => !company.error), - mergeMap(company => - this.getUserIds(company.source).pipe( - map(user => ({ - user, - company, - })), - ), - ), - mergeMap( - userInCompany => this.createUser(userInCompany.company.source, userInCompany.user, context), - concurrent, - ), - // make it hot - share(), - ); - - return { - companies$, - users$, - }; - } - - private getUserIds(company: Company, paginable?: Paginable): Observable { - const pagination = new Pagination( - paginable?.page_token, - paginable?.limitStr, - paginable?.reversed, - ); - - return from(gr.services.companies.getUsers({ group_id: company.id }, pagination)).pipe( - mergeMap(companyUsers => { - const items$ = from(companyUsers.getEntities()); - const next$ = companyUsers?.nextPage?.page_token - ? this.getUserIds(company, companyUsers.nextPage) - : EMPTY; - return concat(items$, next$); - }), - distinct(user => user.user_id), - ); - } - - private getCompanies(paginable?: Paginable): Observable { - return from(gr.services.companies.getCompanies(paginable)).pipe( - mergeMap(companiesResult => { - const items$ = from(companiesResult.getEntities()); - const next$ = companiesResult?.nextPage?.page_token - ? this.getCompanies(companiesResult.nextPage) - : EMPTY; - - return concat(items$, next$); - }), - distinct((company: Company) => company.id), - ); - } - - private async createCompany(company: Company): Promise { - logger.debug("Creating company in the Console %s", company.displayName); - let createdCompany: CreatedConsoleCompany; - let error; - - try { - createdCompany = await this.client.createCompany({ - code: company.id, - displayName: company.displayName, - avatar: { - type: "url", - value: company.logo, - }, - status: "active", - }); - - if (this.linkExternal) { - await this.createCompanyLink(company, createdCompany, this.consoleId); - } - } catch (err) { - logger.warn("Error while creating company %s", company.displayName); - error = err; - } - - return { - source: company, - destination: { - code: createdCompany?.code, - }, - error, - }; - } - - private async createUser( - company: Company, - companyUser: CompanyUser, - context: ExecutionContext, - ): Promise { - logger.debug("Creating user in console %o", companyUser.user_id); - let error: Error; - let result: CreatedConsoleUser; - - try { - const user = await gr.services.users.get({ id: companyUser.user_id }); - - if (!user) { - throw new Error(`User ${companyUser.user_id} not found`); - } - - const firstName = - user.first_name && user.first_name.trim().length ? user.first_name : user.email_canonical; - const lastName = - user.last_name && user.last_name.trim().length ? user.last_name : user.email_canonical; - const name = (firstName + " " + lastName).trim(); - - let role: "admin" | "guest" | "member" = - companyUser.level.valueOf() === 3 ? "admin" : "member"; - if (role != "admin") { - if (companyUser.isExterne) { - role = "guest"; - } - const workspacesUsers = await gr.services.workspaces.getAllForUser( - { userId: companyUser.user_id }, - { id: company.id }, - ); - workspacesUsers.forEach(e => { - if (e.isExternal) { - role = "guest"; - } - }); - } - - result = await this.client.addUserToCompany( - { code: company.id }, - { - email: user.email_canonical, - // console requires that firstname/lastname are defined and at least 1 chat long - firstName, - lastName, - name, - avatar: { - type: "url", - value: user.picture, - }, - password: passwordGenerator.generate({ - length: 10, - numbers: true, - }), - skipInvite: true, - role, - inviterEmail: "", - }, - ); - - const companyUserRepository = await this.database.getRepository( - "group_user", - CompanyUser, - ); - companyUser.role = role; - await companyUserRepository.save(companyUser, context); - - if (this.linkExternal) { - await this.createUserLink(user, result, this.consoleId); - } - } catch (err) { - logger.warn("Error while creating the user %o", companyUser.user_id); - error = err; - } - - return { - source: { user: companyUser, company }, - destination: { - id: result?._id, - companyCode: company.id, - }, - error, - }; - } - - private async createUserLink( - localUser: User, - remoteUser: CreatedConsoleUser, - serviceId: string, - ): Promise { - logger.debug("Creating user link for user %s", localUser.id); - if (this.dryRun) { - return; - } - - await gr.services.externalUser.createExternalUser( - getExternalUserInstance({ - service_id: serviceId, - external_id: remoteUser._id, - user_id: localUser.id, - }), - ); - } - - private async createCompanyLink( - localCompany: Company, - remoteCompany: CreatedConsoleCompany, - serviceId: string, - ): Promise { - if (this.dryRun) { - return; - } - - await gr.services.externalUser.createExternalGroup( - getExternalGroupInstance({ - service_id: serviceId, - company_id: localCompany.id, - external_id: remoteCompany.code, - }), - ); - } - - private updateUserRole( - user: UserCreatedStreamObject, - role: CompanyUserRole, - ): Promise<{ - source: UserCreatedStreamObject; - result: UpdateConsoleUserRole & { error?: Error }; - }> { - logger.debug( - `Updating user role for user ${user.source.user.id} in company ${user.source.company.id}`, - ); - return this.client - .updateUserRole({ code: user.destination.companyCode }, { id: user.destination.id, role }) - .then(result => ({ source: user, result })) - .catch((err: Error) => { - return { - source: user, - result: { - id: user.destination.id, - role, - error: err, - }, - }; - }); - } -} diff --git a/twake/backend/node/src/services/console/service.ts b/twake/backend/node/src/services/console/service.ts index 34e27fb1..0fa19e5d 100644 --- a/twake/backend/node/src/services/console/service.ts +++ b/twake/backend/node/src/services/console/service.ts @@ -1,5 +1,4 @@ import { DatabaseServiceAPI } from "../../core/platform/services/database/api"; -import { MergeProcess } from "./processing/merge"; import { ConsoleOptions, ConsoleType, MergeProgress } from "./types"; import { ConsoleServiceClient } from "./client-interface"; import { ConsoleClientFactory } from "./client-factory"; @@ -24,7 +23,7 @@ export class ConsoleServiceImpl implements TwakeServiceProvider { } async init(): Promise { - this.configuration = new Configuration("console"); + this.configuration = new Configuration("general.accounts"); assert(this.configuration, "console configuration is missing"); const type = this.configuration.get("type") as ConsoleType; assert(type, "console configuration type is not defined"); @@ -33,14 +32,12 @@ export class ConsoleServiceImpl implements TwakeServiceProvider { this.consoleOptions = { type: type, - new_console: s.new_console, - username: s.username, - password: s.password, - url: s.url, - hook: { - token: s.hook?.token, - public_key: s.hook?.public_key, - }, + authority: s.authority, + client_id: s.client_id, + client_secret: s.client_secret, + audience: s.audience, + issuer: s.issuer, + redirect_uris: s.redirect_uris, disable_account_creation: s.disable_account_creation, }; @@ -50,24 +47,6 @@ export class ConsoleServiceImpl implements TwakeServiceProvider { return this; } - merge( - baseUrl: string, - concurrent: number = 1, - dryRun: boolean = false, - console: string = "console", - link: boolean = true, - client: string, - secret: string, - _context?: ExecutionContext, - ): MergeProgress { - return new MergeProcess(this.services.database, dryRun, console, link, { - type: "remote", - username: client, - password: secret, - url: baseUrl, - } as ConsoleOptions).merge(concurrent); - } - getClient(): ConsoleServiceClient { return ConsoleClientFactory.create(this); } diff --git a/twake/backend/node/src/services/console/types.ts b/twake/backend/node/src/services/console/types.ts index 547f9e67..3b0dcf4a 100644 --- a/twake/backend/node/src/services/console/types.ts +++ b/twake/backend/node/src/services/console/types.ts @@ -126,14 +126,12 @@ export type ConsoleType = "remote" | "internal"; export type ConsoleOptions = { type: ConsoleType; - new_console: boolean; - username: string; - password: string; - url: string; - hook: { - token: string; - public_key?: string; - }; + authority: string; + client_id: string; + client_secret: string; + issuer: string; + audience: string; + redirect_uris: string[]; disable_account_creation: boolean; }; @@ -231,7 +229,7 @@ export interface ConsoleExecutionContext extends ExecutionContext { export interface AuthRequest { email?: string; password?: string; - remote_access_token?: string; + oidc_id_token?: string; } export interface AuthResponse { diff --git a/twake/backend/node/src/services/console/web/controller.ts b/twake/backend/node/src/services/console/web/controller.ts index d794dc34..524baa44 100644 --- a/twake/backend/node/src/services/console/web/controller.ts +++ b/twake/backend/node/src/services/console/web/controller.ts @@ -31,8 +31,8 @@ export class ConsoleController { } async auth(request: FastifyRequest<{ Body: AuthRequest }>): Promise { - if (request.body.remote_access_token) { - return { access_token: await this.authByToken(request.body.remote_access_token) }; + if (request.body.oidc_id_token) { + return { access_token: await this.authByToken(request.body.oidc_id_token) }; } else if (request.body.email && request.body.password) { return { access_token: await this.authByPassword(request.body.email, request.body.password) }; } else { @@ -283,12 +283,12 @@ export class ConsoleController { }); } - private async authByToken(accessToken: string): Promise { + private async authByToken(idToken: string): Promise { const client = gr.services.console.getClient(); - const userDTO = await client.getUserByAccessToken(accessToken); + const userDTO = await client.getUserByAccessToken(idToken); const user = await client.updateLocalUserFromConsole(userDTO._id); if (!user) { - throw CrudException.notFound(`User details not found for access token ${accessToken}`); + throw CrudException.notFound(`User details not found for access token ${idToken}`); } return gr.platformServices.auth.generateJWT(user.id, user.email_canonical, { track: user?.preferences?.allow_tracking || false, diff --git a/twake/backend/node/src/services/console/web/routes.ts b/twake/backend/node/src/services/console/web/routes.ts index a14a19a7..fee4cce3 100644 --- a/twake/backend/node/src/services/console/web/routes.ts +++ b/twake/backend/node/src/services/console/web/routes.ts @@ -14,27 +14,7 @@ const routes: FastifyPluginCallback = (fastify: FastifyInstance, options, next) const accessControl = async ( request: FastifyRequest<{ Body: ConsoleHookBody; Querystring: ConsoleHookQueryString }>, ) => { - if (gr.services.console.consoleType != "remote") { - throw fastify.httpErrors.notImplemented("Hook service is only for the remote console"); - } - - if ( - (request.body.secret_key || request.query.secret_key) !== - gr.services.console.consoleOptions.hook.token - ) { - throw fastify.httpErrors.forbidden("Wrong secret"); - } - - const publicKey = gr.services.console.consoleOptions.hook.public_key; - - if (publicKey) { - const input = JSON.stringify({ content: request.body.content, type: request.body.type }); - const signatureBase64 = request.body.signature; - const verifier = crypto.createVerify("RSA-SHA512").update(input); - if (!verifier.verify(publicKey, signatureBase64, "base64")) { - throw fastify.httpErrors.forbidden("Signature verification failed"); - } - } + throw fastify.httpErrors.notImplemented("Hook service doesn't exist anymore"); }; fastify.route({ diff --git a/twake/backend/node/src/services/console/web/schemas.ts b/twake/backend/node/src/services/console/web/schemas.ts index 34db9196..6611b947 100644 --- a/twake/backend/node/src/services/console/web/schemas.ts +++ b/twake/backend/node/src/services/console/web/schemas.ts @@ -32,7 +32,7 @@ export const authenticationSchema = { properties: { email: { type: "string" }, password: { type: "string" }, - remote_access_token: { type: "string" }, + oidc_id_token: { type: "string" }, }, }, response: { diff --git a/twake/backend/node/src/services/general/types.ts b/twake/backend/node/src/services/general/types.ts index 67e96865..905a74fc 100644 --- a/twake/backend/node/src/services/general/types.ts +++ b/twake/backend/node/src/services/general/types.ts @@ -16,14 +16,15 @@ export type ServerConfiguration = { help_url: string | null; pricing_plan_url: string | null; app_download_url: string | null; + app_grid: { logo: string; name: string; url: string }[]; mobile: { mobile_redirect: string; mobile_appstore: string; mobile_googleplay: string; }; accounts: { - type: "console" | "internal"; - console: null | { + type: "remote" | "internal"; + remote: null | { authority: string; client_id: string; account_management_url: string; diff --git a/twake/backend/node/src/services/general/web/routes.ts b/twake/backend/node/src/services/general/web/routes.ts index 76fbd45b..6bb7d211 100644 --- a/twake/backend/node/src/services/general/web/routes.ts +++ b/twake/backend/node/src/services/general/web/routes.ts @@ -24,11 +24,12 @@ const routes: FastifyPluginCallback<{ configuration: ServerConfiguration["config "pricing_plan_url", "mobile", "app_download_url", + "app_grid", ), accounts: { type: accounts.type, - console: _.pick( - accounts.console, + remote: _.pick( + accounts.remote, "authority", "client_id", "account_management_url", diff --git a/twake/backend/node/yarn.lock b/twake/backend/node/yarn.lock index 0809e4ef..2d23c5f4 100644 --- a/twake/backend/node/yarn.lock +++ b/twake/backend/node/yarn.lock @@ -1456,6 +1456,14 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@okta/jwt-verifier@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@okta/jwt-verifier/-/jwt-verifier-3.0.1.tgz#10facad0424052e0cfd6477304cdc51d84ac60be" + integrity sha512-8rNvCxAcgGlSJH9NilhYTrbZjyTPPF0ThJUDF/NI8XV/4NcqOFdO946meFsXpV1oFdZP6ASH/j2GjVhU4cHpPQ== + dependencies: + jwks-rsa "^3.0.0" + njwt "^2.0.0" + "@redis/bloom@1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.0.2.tgz#42b82ec399a92db05e29fffcdfd9235a5fc15cdf" @@ -1703,6 +1711,14 @@ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.36.tgz#00d9301d4dc35c2f6465a8aec634bb533674c652" integrity sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q== +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/busboy@^0.2.3": version "0.2.4" resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-0.2.4.tgz#19922f8c7076ad6d47b2565da8c0a94c88776315" @@ -1740,6 +1756,13 @@ resolved "https://registry.yarnpkg.com/@types/config/-/config-0.0.36.tgz#bf53ca640f3a1a6a2072a9f33e02a44def07a40b" integrity sha512-EoAeT1MyFWh2BJvBDEFInY714bQBbHOAucqxqqhprhbBFqr+B7fuN5T9CJqUIGDzvwubnKKRqmSo6yPo0aSpNw== +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + "@types/cookie@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" @@ -1768,6 +1791,25 @@ resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz" integrity sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ== +"@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@^4.17.14": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/fastify-multipart@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@types/fastify-multipart/-/fastify-multipart-0.7.0.tgz#fcbabfb35e69af0290a1c6c83199fc7e03855a51" @@ -1853,6 +1895,13 @@ dependencies: "@types/node" "*" +"@types/jsonwebtoken@^9.0.0": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#29b1369c4774200d6d6f63135bf3d1ba3ef997a4" + integrity sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw== + dependencies: + "@types/node" "*" + "@types/keyv@^3.1.4": version "3.1.4" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" @@ -1870,6 +1919,11 @@ resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + "@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" @@ -1926,6 +1980,11 @@ resolved "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz" integrity sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q== +"@types/node@^15.0.1": + version "15.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -1986,11 +2045,21 @@ dependencies: "@types/node" "*" +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + "@types/random-useragent@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@types/random-useragent/-/random-useragent-0.3.1.tgz#1f0e1e08151f04d2c023ab77c8173dfa5b5049d2" integrity sha512-yVz7897JjjwS6V+lmxlu8pktzNnNWgtF9MGxfaRfI8o+hQageO9K+0hfwr8PspdFJIIRE9KkLqp4o5tlQqv/0w== +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + "@types/redis@^4.0.11": version "4.0.11" resolved "https://registry.yarnpkg.com/@types/redis/-/redis-4.0.11.tgz#0bb4c11ac9900a21ad40d2a6768ec6aaf651c0e1" @@ -2010,6 +2079,14 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== +"@types/serve-static@*": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + "@types/sharp@^0.29.5": version "0.29.5" resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.29.5.tgz#9c7032d30d138ad16dde6326beaff2af757b91b3" @@ -2732,7 +2809,7 @@ base64-arraybuffer@0.1.4: resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz" integrity sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg== -base64-js@^1.3.1: +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -3647,6 +3724,11 @@ crypto-browserify@^3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -4031,7 +4113,7 @@ dynamic-dedupe@^0.3.0: dependencies: xtend "^4.0.0" -ecdsa-sig-formatter@1.0.11: +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== @@ -4213,6 +4295,11 @@ es6-error@^4.1.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -5572,6 +5659,18 @@ iconv-lite@0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +idtoken-verifier@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/idtoken-verifier/-/idtoken-verifier-2.2.3.tgz#1758e9b0596f7036134938d63e107a72045622b8" + integrity sha512-hhpzB+MRgEvbwqzRLFdVbG55lKdXQVfeYEjAA2qu0UC72MSLeR0nX7P7rY5Dycz1aISHPOwq80hIPFoJ/+SItA== + dependencies: + base64-js "^1.5.1" + crypto-js "^4.1.1" + es6-promise "^4.2.8" + jsbn "^1.1.0" + unfetch "^4.2.0" + url-join "^4.0.1" + ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" @@ -6475,6 +6574,11 @@ join-component@^1.1.0: resolved "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz" integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ== +jose@^4.10.0, jose@^4.10.4: + version "4.13.1" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.13.1.tgz#449111bb5ab171db85c03f1bd2cb1647ca06db1c" + integrity sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ== + joycon@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" @@ -6500,6 +6604,11 @@ js-yaml@^4.0.0: dependencies: argparse "^2.0.1" +jsbn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsdom@^16.4.0: version "16.7.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" @@ -6651,6 +6760,18 @@ jwa@^1.4.1: ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" +jwks-rsa@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-3.0.1.tgz#ba79ddca7ee7520f7bb26b942ef1aee91df8d7e4" + integrity sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw== + dependencies: + "@types/express" "^4.17.14" + "@types/jsonwebtoken" "^9.0.0" + debug "^4.3.4" + jose "^4.10.4" + limiter "^1.1.5" + lru-memoizer "^2.1.4" + jws@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" @@ -6747,6 +6868,11 @@ light-my-request@^4.2.0: process-warning "^1.0.0" set-cookie-parser "^2.4.1" +limiter@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2" + integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" @@ -6776,6 +6902,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" @@ -6896,6 +7027,22 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" + integrity sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw== + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +lru-memoizer@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.2.0.tgz#b9d90c91637b4b1a423ef76f3156566691293df8" + integrity sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw== + dependencies: + lodash.clonedeep "^4.5.0" + lru-cache "~4.0.0" + lru_map@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" @@ -7329,6 +7476,15 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +njwt@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/njwt/-/njwt-2.0.0.tgz#da8b7ad995980de67b8069dad63949d2bd5df27d" + integrity sha512-1RcqirhCqThBEe4KO83pFg0wPBa1c9NiXNCrocD2EbZqb6ksWWDVnp/w/p0gsyUcVa05PhhaaPjs9rc/GLmdxQ== + dependencies: + "@types/node" "^15.0.1" + ecdsa-sig-formatter "^1.0.5" + uuid "^8.3.2" + node-abi@^3.3.0: version "3.22.0" resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz" @@ -7545,6 +7701,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-hash@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw== + object-inspect@^1.12.0, object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" @@ -7579,6 +7740,11 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +oidc-token-hash@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6" + integrity sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ== + on-exit-leak-free@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" @@ -7610,6 +7776,16 @@ openapi-types@^10.0.0: resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-10.0.0.tgz" integrity sha512-Y8xOCT2eiKGYDzMW9R4x5cmfc3vGaaI4EL2pwhDmodWw1HlK18YcZ4uJxc7Rdp7/gGzAygzH9SXr6GKYIXbRcQ== +openid-client@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.4.0.tgz#77f1cda14e2911446f16ea3f455fc7c405103eac" + integrity sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ== + dependencies: + jose "^4.10.0" + lru-cache "^6.0.0" + object-hash "^2.0.1" + oidc-token-hash "^5.0.1" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -8077,7 +8253,7 @@ ps-tree@^1.2.0: dependencies: event-stream "=3.3.4" -pseudomap@^1.0.2: +pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== @@ -9695,6 +9871,11 @@ undici@^3.3.6: resolved "https://registry.yarnpkg.com/undici/-/undici-3.3.6.tgz#06d3b97b7eeff46bce6f8a71079c09f64dd59dc1" integrity sha512-/j3YTZ5AobMB4ZrTY72mzM54uFUX32v0R/JRW9G2vOyF1uSKYAx+WT8dMsAcRS13TOFISv094TxIyWYk+WEPsA== +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" @@ -9801,6 +9982,11 @@ urix@^0.1.0: resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" @@ -10148,7 +10334,7 @@ yallist@4.0.0, yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yallist@^2.1.2: +yallist@^2.0.0, yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== diff --git a/twake/frontend/public/favicon.ico b/twake/frontend/public/favicon.ico index 5c56ac5fdb16edac10ff77d13cbf64aaf39de982..fd304422822862a9df3a32d5cfd5288db9233fb9 100644 GIT binary patch literal 15406 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 EAC~3-{{R30 literal 9662 zcmeI2Yitx%6vt=VLJ=$#l#+m<$ireRq@<6T*_NHzZBtX8nuyjQiA4AWniw!d{Xo$~ zGzigX)C4pV2)-~O5d(=qs>Em%d_)Z>s11ssVl2|`OaVLo&NkCbC!KwD3pMF>|9j@n z+ccWX{mWhs_ykZwWfY+@0nkn?l5w0__l_0&|`={+#?X-)HX2_0d`OI%w zd*i^HXQ0=eaDND$mvX3AbnTCu`eG|uH_B;hQm{|jppIvqT*Wi7pMmmr%S)ec$)P^R zQC~%0&+LeV3)}1JdY1^hzJ@l`u$QP6)b|7sJ9c?wE8(wi&4Hd%*!KodZb$Xe>>Z(A z;=T*UA&>TrqfXfqUj_bkKa;i$l)tQLJ8VM@TM@O$yQcYQ_esh=M;i**FG^Tzm!Lz| z4%rVg;VyZz;onU;=1pP^tM4-PVmnfupU&Rcrx7H?zTiIsALK^#tpVQwvFUW%kq!T| z>~rfoWBLT@DagcU@bh=m^g#$+h4H8+bK`Z8?pS2Q{{ZVq)rH2eTYb(X{PWV?d+D9%|9+T%;P?&qzt3j8$t>;XpET`F=F|}De{B<-wt?T%Y{O9D zFMieu#_O(lq-r8@#bcyD1*yhjDDW5GX&?LdJ@(x4M2yegFFtxD_n!k2M+e0iSCjvF zcpb)PTNgLgNgZZ&A3rM* zeH0u7UxD@bo8xoI*{civbHH{WHvAUn2`lWVI*B;9H(vMVPv;u{u!wkEL!a2yP3e@$ zHcvdJkED(Yun6vD%*&*t2A}Z zr;aaxyB^7z&WG$J>p3Tx;xwr#=UHbg5v$02dLDcWWPNn??XqHOX|DMC^)RPo4$C^^ z)+bV8$}?aedq=ZfTXk)J>l|}4j~Hbd`C7o|pufF-H!=P+f4#X%2k>{>B4^(};*0F0 z9bwtirC!d2m5Yrv#n|5cJpTy%3EVP%c{TaFT;!bX812|hJ9PGtrKI-*v2Xu=?v`=o zP~h)!5r5?;a2m+ixc8IEp~OEK&!A_+{F6-f6!SNzPcykc-2ch?zvmsQfBny-e^ce% z&3-;;KB8@C5!R7IAl);*RD8Y9CFXmf)2xx#*MsuuY^dc7Ut0-|0y+CmwVr$V1zk&D zoCACDPv*gYP`JBF#W#pY67Oy|Q|B>Yfgo(#GS&bK5z)sUy}- z>8}RWo9p}d^HbpV2;huE6W>Al+3kC2(=Xs{xG%xa4t$TEYhIb?lh}!ODiY&t1+vb{ z+>rkfIDr580Pn`GsEudB-J7?&p`wuUjs@7%vv7ZybCKy_P~t)-M4 Na!I$rP^4Wd@;_xLC5Qk3 diff --git a/twake/frontend/public/favicon.png b/twake/frontend/public/favicon.png index 23d60189738c699d9cf6620cf7d0f3c2d8477f62..de1b6912d61643142aa1fb13a38590d803f6a6c7 100644 GIT binary patch literal 107628 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%0DI>^$I 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 literal 31687 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 diff --git a/twake/frontend/public/index.html b/twake/frontend/public/index.html index 9ad1ae13..26e3785c 100644 --- a/twake/frontend/public/index.html +++ b/twake/frontend/public/index.html @@ -2,9 +2,9 @@ - Twake + Tdrive - + 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 diff --git a/twake/frontend/public/public/img/grid/tmail.png b/twake/frontend/public/public/img/grid/tmail.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bb113360514d4b34330e57db70a378be434910 GIT binary patch literal 114319 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 E0I7C*2mk;8 diff --git a/twake/frontend/public/public/img/logo/128x128.png b/twake/frontend/public/public/img/logo/128x128.png index b6bffc97b80bf9423bed3315fa1a648db2e07f93..b883e2ab972f4daa05b3276e7ec99f1d2a071d32 100644 GIT binary patch literal 21396 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 DNqLRe diff --git a/twake/frontend/public/public/img/logo/16x16.png b/twake/frontend/public/public/img/logo/16x16.png index 820b375edf48b52be521895fd12aaacc06fae14b..8fdd6a2523365b515308268b9b6ac17a0d5a4d1a 100644 GIT binary patch literal 1447 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBDAAG{;hE;^%b*2hb1<+n z3NbJPS&Tr)z$nE4G7ZRL@M4sPvx68lplX;H7}_%#SfFa6fHa7y03zTt^8!YMi3^zE zss$D>BiKM442gkGDnN>}z$3DlfkDR`gc+CGPFo2yDl#)9q9nrC$0|8LS1&OoKPgqO zBDVmfi@~PC3dqb&ElE_U$j!+swyLmI0;{kBvO&W7N(x{lCE2!05xxNm&iO^D3TAo+ zdIm~%TnY*bHbp6ERzWUqQ0+jTtx`rwNr9EVetCJhUb(Seeo?xG?WUP)qwZeFo6#1NP{E~&-IMVSR9nfZANAafIw@=Hr>m6Sjh!2!gbC7EdmoAQdG z-U511A0(r1sAr%LHyfzc1|(|bUzC{&v>9Z+ouLg_C5jl-9vgj-6B&$jKQ)v+5to@!h7^aJ7Dom+BgnzV}I z>`9_ml=*p2YRWuLG(NU=(vheA`;zv5+od9rqZ1on?fL5Q{G+QbpA2E2a!y+PrGfc8 zSBdKe#(WogSfmVZ_^^e@F+a7i{(f(JUH{yj`}P<;IeT{E%z1qw-IHn*FWlS|P{b*F z(=Ag(>8|!d>8)mG?mX=*@9G1I z4WCQ-Lk)WJv))bXiO-!?;x_fK%%@4lrx$PS5V4t&(Djoe@~&BFgM8cf!j~`2^!CU- zinyHU!c%SClUHl8=tc3%iu3ku`p1{ww4NQO)LW)1b|dc}`@5wF?k2Lom*3q~etzEk zijW^)@>7D6Kd-gd+->NzVL@l?UpcRZXW4%;n=}UnmRG5>iI+;Vhk#PJ!I4n?Pz zNS|-GA$vn`VvJYDpA%Qx4X@WaypNi=KgatwuL9q}y^m)-*J%yert;mu{NJmI;r0u; z4_9BaT@de97NNNJ{h>EM4cO%}9yGennZY7{%I}25?K2(R2d`Z-pR=#|aNGg5C6-Is zA9<_34O+tKcr&gfFFL$T;FLg#pUnQ-y>aPE(b@^G%8uFxyspwXon{aXDt0gOD#psM`|aEv=hrNwP?%CWO3E3tQ4DLk=EoS# zS(ZPTp-?i!gpw}HT4vSKFOg{6z5C8zt*vLT?b-8wp7)+TkIu5vtlZArgb?EDzFk$p zKB1vmDP`dT5`uq`fhGr`pjtARC_q<$CIboB6#1Y_aIqF7Xmd;q-z-eM0~Igl;CBUW zBUs-+*Er~Mm?}VoXdi{HAKl|1BG7|Dd~mrIk(wJI{!kSmryj%?bSYR7xZMfwG?*&E zONO=!JEA}Y@K)o~BIE@S<>Jc{Qnip?g^3bDnJ^kL{2H9|@JPd;9tI;e42UmBWHAf| zC=0<&$B-V&zmTWH&KR(wk>8A!H4IE^U@n7AEQlY71a@&?1cM%e$t1%%^(3Y`Os+D$ z`MbopXfzs|6d`kzNIM-Y;@eiI6z-)8hFTILV7zD8Y;!ym<0bB(r0)`bK)CIcL)lE^ z6Mq)pUMzg*!hSp!-(u@DlzhY^G<28s?hF0b*$Y6Cljd;dy>F`6yfC{8rPMy!gBCs+ zu(Xjnz54W(MVG5<^R#{G0}FAzrB%bRXInlDIyYK7`12L+ms$qhIwq|wlaI#CXI1MH zB*^8LMuw>>z)5`+|QL6IDBhZ_ff0wTrDepPCr?ts*9UyxRZ#!!hs4qZ8u$m*ZS|V#=B9|2wkhy!)sXL?V#$TLa_s{{U%1Qf~kN diff --git a/twake/frontend/public/public/img/logo/256x256.png b/twake/frontend/public/public/img/logo/256x256.png index caf50a8fb529c5d186495f18afd03b82f438bc33..7cd10b756ef257cc8c5bd2523529c94aab87fc5f 100644 GIT binary patch literal 67829 zcmY(p1ymeCvo^fAJ6W71K#<^&;OycO91`5!J-8ECT!M$if`veE3GOTwG`PFF!vbI4 zd+&F@|DSVa>gnpLr@H2xshRGcC^Z#1JZwsA004leATO-}03iK?NB~Uqf5O1+ht)rU zYAvBG0RU7d;2=!V{&+7Nh?!3*mqG zKWZ*|y8klquot7(QC6dqa(1(%)6vn1x>;BWYe>ufkNdxt7`=^$hl?;5 zmzS3prxzcmvzs*+kC2cM7dI~#FE7VG3l4W5Cl6C^4kvep|0emrJkpl#=5Dqw9=6U- zbpPQsHFN&#Ax2OCpFsb6{P#FLY_0xZBq#U(N$X#NT>t6e;^E}x`d{vUuA=|Z3ah%= zTK`1R z=#8}1hFA4VS9kUPBw)13I3NrCo0F}y1t2^)*k67Tc~Tr6D+|puF}Ebnj(%S-YEc}S z%Kg4rqc8t$=1-fqDrUqCOkw@JJOOgl5(WL=zH2fGZ*cP|F!F6?kQaPsh?JbVYP*Hi z-Xa2DUi2PeIH)ptj%#AO%cpu{@E4z%+8paPkY8?q*0A+O!*WHMK&z><&kkSXu)UG{ z1(DQwG06AI&FQ7#so>A?;_*Yn@yf;g;h&Y`Ma%0imb%N;3l+{rX>D)^fwJK;%K)MU zj^UaW_Qh+v`EspcJG`Tze&o2>Y2TKujAvv*-{BhdUoT&vuc-_s zh(6&D@*Qu;pwk3Zkwhs-Ehs0Py;*2xdGA&ovwN=TK|aK)YTrij(92urXlV)TD-av+ zjdb#3`|KIOQ{)Hpj7-rBQ<0|Fya1#?I}rdlfytG?grC5suYlQ$Q;=?8CU=LmpQF$1 z^YcXo=xKD?x$Gr>vF+CBcID~B^7HNT@Xi_G@!0sU+S^P%Z{kRQ-ySM0(x-!-=;!th zpZm4F3DttcoR;PC-0Je1oCb#(uf*=gq?SgBj_?fw6p4k?q<4(?ZxTsY6Gs&cHQZaQ zd6*J7oPhYmRC<~sa#!q(3)Dp|I)#p`Uk@7e$I~*yd9KhMhS~ZIgj~fJPIO!IHI4O3 zbNGAR^Q#Bg-5yybWn_a2eD7n+j|U`Rz5`YDd2y0QzN88G)#QD8RO|Xjda=%RxQRIl zGOt?)j?StY>)*x6_MdKqMoHs}&4e4R8G!wcJwJB(0_S_oICT}#J3$^)M8)^ za~a+1ml24sI&z|WRv4I4jHapA-P=BY_zgyB=;^tZW54ToF-%xoJ%MDI1>RV--1@)W z3@1H3E?n%YIm#{ge#_d=pmF%+qv(#mh49zd!!7;Ei8?-x}7DrjKYP%x!5qn z6+7l;tZ{qIK;nXRjPW;__m%kUAhHy|uKX&o#!$fpwWk}<++&O3<2=xk4D>5rCVzm$ zKCM%j*o>ZqH@r;Sacsj;m1+nt;d^p>IJ;2$R(ZVfRZ3iI1IP1RV#JmXt|xEOG?mWu zwJ@t=n`_~LoR^Tv2GE+74=G^ydU;3Cts`RTMFkd^Ht+Fr&$e3YmOtm{1#-GQl|}Ha z4|O&@TrJ7}&Dmca%zPf&-+sD%i5nAZJX)?dyg7L-mLnk?NNelLClerTXIwI;v2`X- z#cOkTeMc))tGC-~B~dAum4Mu^*2P`xHaPYww6w$sC*E9fIC&%!t?R2AKJ4OncL*tt zy02>MU4~~Is>lxV9B~9>bZuLQak7f8;-R%zT;}qv490}|hP3s8jKfc&m%<&mB#tAj zsX$0D9;uWj$mX|>xD*SVm0_0tGt$QU@C2ty$}?8;hS+Jonh(qx8@+6w9hna<=9bYx z$+8UOL-3hI!xp-uiFs?`_}?092W#nS-pn|?3E2?cm5Zm<4uoD}=jG6v?wDQ!6zU6j zC|TcW4e)i$IbOymP-t@64O-LBZPqpP#kwuy+BSM}(m1mM2D@)fUs zR<@S1sXXO7kGYM%iIvf2e`pA!x*z|rI~_iB{yuynIT^%N358s3v!$a&@jsdT;t>I%9bX!p8SVYd`%Q#L`(mCbT} z_L$Qm^@sCfzwDeoojSL9x}1H`*h$c+8)GU03)~(9MN5UF$67aL5|MNJ(o5`{oO21z z1>@07y-H8NcUIzj*>}+M4e3nUun|-2*)!n25a-^9D$(Mb@rQ>SScHTmBrtK&+zCZ9 zEE|)N;NR>boA}=PFPX)c`|q>pZrLg1qR~?P7%Ie5U2hn!*VzEcz`E6elq-0?Cu3+3 zj`BI8_p(XDz~|00;WvUqTW=YM$#_&quaE*lBM~}ky~D&b277zf5){AJRaXQ@&5YN3 zblV+|HjK#fmOA&7-g(%OHaQls~1-qby)2#?3GvMcfv1&eX2w8a}jGc zIXYLE8ZJ8+)o$teq9qBWrAxYjX{Np{?#Va0V{ z)H$;m@`rQbIwLe20i6TEP+CI^Tr+P@!G?b1L^MnoP0(JQ4Tq6WiJa^8zlvkj7vqc~ z61cy6w(dcspGLB$??iIb_DSve&ifuOZSy6mZ;QkEA!K^2U&ILibmauJ;_MV~;1qRV zlJ_XK+3|c`tXzEC4G~35UVFZ%s+)|3-FX*}inN+@o>LTP4z?loQG{(i3ia)y92c`0 z#u&SjVX8`A=#a~wygJ1;iPSKaYOg6^DS(hg&XJ%uaoESzBx_M97LgbK$k<=B+6}3T zQ6BO3p`qTF;^#Fx8RGLbfeD2k(4#s&FO92g6yzHZz&HWkbny&1&FJ!aLYqGU{ zUh8|!90nPPY>B56(F{iUDSQ?f^Ym-(Y4Nd<-Pv!GN?VlfnA?#AIPSz4Iy=I#NN@av&OpxBZ<` zA4Sd%H5coP5?TVc!qrvUmj{axtAl`kG~(4zO;$0X{~D> zP=vVN|DE&y?X?pdbeZbx!#ahy&iZqp$kMK;G!fPW8?y`?z1u-@7vk&+_{)dW(ug+V zs9{;ZZyEHE6Tpz(Dh~br%OF~l_I%?fosd;%%y1tXYlMm0QeR#Su0l3O)SidLdF0L! zGsi?NsO38Py%z+onZp<8*!i+Z8&>a>d*Lv`0%E22M+oZ*e46`2u3RLl>?ND0kyM^^;hZfwTAsza7NkR9%dX5z|Ra=8LNGGOIiHL2@tGJXT|R(?*{{ zP+{|GzwY$Lf%O? z;jf&qtmrO&D@wqF*TMv~RM6~I1>o?-m(-L8=Z;GZEl80;C3;mx(gz<4r}+D%mh7gb zpex87pDK9XIDlmRMb+hQsb=AYE?L}@@Yx{wR0P`gckGf)^L5`ac?%}D^U^S%GJ=21 z8$IuX2A#EuW>?|%K)umV3hFD-sof6%vq>JGp*T~{L*?*2Tax>^n4EoHn~i(TfbAWW zj=~~0p!f_cj@3Yn^`bQjwHSknJ`+!QD4TNTe_BcXVq z9)iH_!rkmIg|Ub`^Pl560UvwWBd$lniyB|ORgfFr8Lx&oykYg?%`eMIX&C6N!mW}r zVCPM)lfmHBU;Kd9VeRvaRXYoqMq5O{L{k`dDVWPTOYf1dz$5KRYISX0&$ssPZ0>1B-vvF*fb=@nxf$jv@NGqjopFd!QO+ah zM`72_ZKqjA9yN`DG|9J;D=Lq4eM8nW-c)0YD(+wWd`1JMS7W#tl%ruQV|)#NNpV7~ z-D76&cfGfWJN`=oZqhjh)h z0bf|rn{{pKB90;iz6sj#zcCS>Kd*gK(1L6lE8U|cNR$Ek3W%%6%D`2uR13e~o*mJA z*ca=`O-<&^fggPrd5f^kLpKCRC-qWAOFY&KA9bs)nn%mhgctLB3>-Zy zfCA-yaCh5LHTgdzq6cdWu(KXufk1YOn0uZ{hs`bS!tTXNR}9Fpf9 zX117oMw%LyJiAnT={A1JpC(`!U5s$vbnHood|%;LTJks{s=EFq1|GQVeLQLN{`|tT zS|_CYOzNe(JD6EEl4|YK{lS|f*2hQnmEX)wO%6urmTrt*Q=Qo5uGn*-8Cj%~E--$} z16*!C>Jx8@{Y#V#9Z;1@&kP!Ggn;gvG71OK#cX>Qq!)g(y!j>Q_qMoa9}55VWdH~f zZZac(rh~t$@|y`ycbkkT{e7s-RBA=^1w;AhuCu5${g|U^nJ5Q~_8ypZQB~AiNuvcs zt9+Ysn5hv2JxTH6IrEf8Z37me$+&*N`$I&`*NUcSE7B8qR*+ylq0Xce;5*58bSBzP z74EdbLtDUiR$Sp(bLwrUq<3C21_}XVug+&`11BWv$nn2A?y|+M_26;j((E>y%^y{2 zKT-jyg4^xuJDx9BN1;*pm-9$qd%}dRr!FVHoS-VBtIZaDNc-b&(DMVC(PGQ}lhK&DPtbRp#Lvx8_E-@{ep#fn9g(I!XUy?%izYdZB*iql-=0BLUZ*iL)$4LM$771?|BYw(US5~6cBaTcYO$1c)cy=uB&TgAKIh5-m zo0LDwQ(U8~(zgtH8Nf2|Rs&YsDdJJQUthO6V(G|8sd&J#QO@vR2=wzq9WbyI_b3FJ**U zJ1|v1F8NOCCBm~VMS=?C)&!!l@fCWfY7-jq$$u++`O$|gDJt8%YC9&M``6M~8AzDg zO5b=lz?jB z#emK)E6NL#=UqIOo&t^rYwN`K6dmv<>Kmix!Y-c zK8G8M>Vk+X{8(!2|DL67g6sF%czEgrn;NW<1gq)Xa!(O%LfQ8k{R9zl1c!;*M$gQ- z{@EN z@8}4)E*W{{pLV*K7C-awrpi_-mKk!p|B+1DC)|+-1TW$ z%kRdSrXn?Z2S!x!DgL$|1**9WMyk2cRvZ=jv)3NU3ZP9YXlye6U){eK)W+v=&O9_A zW*V#>IgYSh)iG-3x|>nHCpq|Hqv^eB4Pomcl~I+L_om20l;msL6OKU0k}Otvm!U2q z;iU_5E+arw*`7Yw0Sy+*pjdSB?pBTDeHkqi7?Dm#-MmOnxYtB8x=>V&=&5zgb7vbL zHfQUj`qVGScWFmUAY_rvt_IMqY@Qe_x3uD0?_!A$^e`*P#pOL*CYEC(UF!cU(JZ6Q zy!Vw1VUau^4KyJXN))sfNGcKp8`)%UH-bdMVp9z-@aAO=V(o?#u!HmeG6U*g=j&i#>jIb>~Ri<^11Z`CiBdhO95B3#5;cQC>9<_ykrRJBpxj3TGoFyK4V z4UNh%>W;ZdoNChJv6+q`{Bu!7kt9Dq`Kwlcju>_BzP#*V-VwU(O#jcZ`c3@ZKOX%+P;%;W|bt$V4fEcTbk*-Qvb8b3NR0{wu$OlZAzN z|3vCcYf8-m)2lt_E1a)&>KMYYb6LNSsn}3}H#so?f_iY)UHi3uyV+x0yBMbPp*1@8 z1=P9r4xW3cfvB_`4~pvT5dYyb6y&xxpCw;S;*7Jj;e@2V3JebUvQz)vy`=SZ zSWcO6%rI7DJWqJ~!uuOeR3=Qg3rrM8$ZZ_<0umJjB`$ML+)(F;Li=}e zwnc}Vwj$3Z4t!v-Q9;eZq4{0G0Cn)Yf%8v~`K84sbYF03wS8K>KRuM->RB@cZi zN1i$puOX+aQ2#rl9}`~76a-l60I%}LiOgNV?kKCp&$d-L^bfOa+Z1vi%D#F zrT5eT+SA)Gil(JM!R4IbJ#AMe$8tlXcAc`OM75gV3Vctspr<6?Ngeg9F`H6ofnW?? zPj=&-%|d!ft0U{ce!hpgVHrBy?`A+2>UlTWPb(s!Y=R!3N8?5>ZKOXSWT)*uN5V|2 z{yUbg?oN|J?iFQn&E_nGoB~NF-n354M6NP%wsKBRB>gDfeLU$4B}6h+Rn^$^JyT}> zP^yYsFwNBuJ1UR}XEh&F_L)Vk;kiNZr(ozZGcz;fu2ahI<^ILx<-qG?^TXPEf+^4| zigeXy{^%Fmm%U+7z3-4zP_l;KtL;k(`Zaw&KMRYuP~f^+*9lpmW) z8o5&}mSCPB7v?0ROvFe}0{$aNVWg3v@v~V z6Qi!(Z_gOB9x5BCDrhFo|hi*#iA%%Q;(Hx|<086=a4Sw;_q{*-iXS<;UWZi`+}&vJ-* zkA4vZDw2^>CUU4Tjra9r<3k)5y;SNF+O|d$C%_lT7L)8NO0;s!uN+=w(s=RnE#2r~ z(mSij=gRddL0PHpTYEjdt4Na94szQgSQtdfP;R$4|BB1f=0-Tg9}KDDQV-3&iT{O+ z|D#=~!a>fpV{K?^L?p zWfas2p=NS4zYfjm+EVrT+|u$cy$)CDe&Gi}dqhogLfhKMjsSQ^tvaMe37=}=!#UgR z{>OHH;?TB3X69L4RHNR{CkYT(OeeD!5_#XtUxA?cV`jO$_R!;>A9j~uy~j^pe% zq`>OioYi?cZb$tAeXwq3+1RK|#=%=@1H+;&Wz!KefkR@$uL2>oGRxtwt*t&zmt@HC z^qs)6yN17;oR4H)>}A3T+)AmyazLCL>aOb}N8{*!9|WxrnYFDH;D&`)Fqu1g)|6rpL? zP_J*4`cAf*Rb|si9xHq$d!xtd0w>GncE3*Kk!##chixVTm#SUE9`60;@0qH8M629oKz_}JO88YD> zjF9%BO);fH%*PL;lo|OZ#Sr@9`#Ui?I}n8C)VwLZ4l}(YCHxvB`O0WU%3~w&v-LfT z)@zA5a!>S4%*n4maPB8mf;ZGVr!y(BAMAr1tSvW49paDf>%|hqn&GMeZzyY^WIee? z6|=i{q4>Ay(QFQ1i+>ENzk@DyzOt925)JtEB3$^yuH*YVhG;jsuBkJ%Imp9*guW{9 z+1LFnIq2S02Nf)Y(|J0r*15ZWtG4?Yh4wAR#Dh ze`BtxFVs@NGrI8&c}$nuvku4VefII)-mdkvV(x-gNZ@%-Eo(eR_5i(R()eEjS)+9} z5u53dB!gOJ@z7ZnH^IMaKa0%=HPEsOQH0Es(4`cFW5aF%#DXV(MI-7YZ6=<-NtMzQ(8ElHL=4h8F(6U_znPYiZ3KY4cY z1e!HUMQ5I_2Mq<>F4cgWuV`Yg?qic*dTWH_I>i(p1 znGF31+4z`rL+)(%{1X*(XY&iVv*zJB;gZHoJ2sp8S7r`#s$EkvE9}n-_BH)V)YOQ% zkpZL+Zk~WHS-5Ne`#IS2NoghQNR6}QUHA)w=(7caKtFwj#mq@9jWnsy4z00Tsa zedb^$EfEflbIs2j>$UM+vrA~Gte!f1El`>n6EF2E91nwS5V%D-CC15tZnoQmu!%vqA4czd z9-K|RwA(LhHp*s%t0xgLij_c2BWc{Fah{3DxBmF!<^QHaPkMCpMwGnm_j?qp=KGeD zX*piDL+K|&W=KW9_?CF<@VNSD7ax!l43*qbhDu>|~TKyLtI~^mz<&!sGpFQX+aLg9MC=+&@N%VYI|) zGZXm~(d25o@tZ2G3JGV%hi|5Q8fX`MPe!;)3Rt+tXt#M!D3le3!E8+`lQ>l+K@C51 z3CM#&VUX(lSAkZ3CQ)4{Kz7T?o&i|L+&5c*{=+CVq5|9*yu$Ml{o$D>rZfDhjY~Ml z?TR7jWVk^f`)Q~;;{mmGD~kt=B#1x4`aUcDdQ&S1soT(FWo+Osn1J~!?3!V7>GOHP z#PqbthutNU%r#gimFkC4)jPj+K!md{Yi4=;k+Aczh=7%yRVSu?2Ewr8?6U&UvG$Ml za^3aq<8|Lu|CStsymw@vbemM9 zaYRJJ)q?^^U;Hc+qZYH*Y^)&v@>o<$%cG_g#_fvq-KD`0g>k*4ZbzCRM{!9_xCYkaZd z-&>%)WHL0ZV)#q-hV-WKLRif>0xuwPhn%flP$Y?pVeE@JE{XZMBK3p&)biSXeXfyxM)hmY-njJ( zvxolClrxQNKN(&T31yXJ|IC?81us!*WwgFy3%cizsfel)#5XHgDbY%jU;;4R%4UsQ$jf0Z2X+qK&(eq2`G3>p!?}lJ+nSm=tMEA+uw{sVX zLNebN>=P#gEcYYJB;Moud=58}?Wv8O+4vew|-lK+v$2!PY15(>FDl z(${Vzyt;`=x7ghn&}f2zLP5+np>hJrJ7&t~^EX3XLIbASs zHgGAI#q>&4xtJXCFTq4qNi@DunTTxMJ0s=Z{&7i$;$x=La0*i8cl>by2UZUTWM-{W zR5wu1CEU)=R4}>_8Rc9_!=b90+z;wu>LtPMQuNB_-oyOT+M~XY0-A!3xNW@wQ2SOW zLWLl-=4KmTB#CNflHYndwV!3@Q}Xp%lzd_h(!k$wjAWVaEz1HDs^NpZt%t#;>!#VK zRBeN&VkxUVDxwdEQYfh+4)-Qw1&xCW=iS+h)nARwJ0nH=|d2?cVEMP7*PgF>s z0;48uV@|efBUm7&0cUtC>irGt7|i}hE$`LFW9u%2BM>nje3?Vjw)JoSL_2T8_RWf_ zLqfjL9H&mT5HNoT=ZLGV*0+x2CpC>RB_@CWwCg~BrlGC2Fyq#=!lL9X#N2MJ=>78t z``Px28AB1<$I#x2<0UHsh4=i-pD6NC_&j)3T>27@|qZpSJjg40dU!KOQe2%N0&LZLik?reyybUUb1Oy}LtRj~a zkTPO2G`N^!q=7-%)I!Ta$BRa;SJ49Po8fX${}#fn1pCK3U~rFRKsfXBSj(wT<1Z~Z z)Z2>>%dh*7@M_$2ZBTTys}90@NW7okB%gQuD90gA;n|L$IsF)4FH`h>SETJyJ7_c~ zgjXEc9;Fau_D9kyt?wpG#>{Gl1JIxn+w3tnjkbODR@^_Rr7LW(D0Xf@kA1G>cuR;j zyxNkXZlqyYFh!*bZlO84HroQ$f3N1&EoC8Gk3m2KM9fFS7qQK$k8{N~Ic)B~wP63HTmR zN{I}-QQvd-_|~1M?Uz^ZD$~^OLJ(a_>^y}*sXi3Q5Y@JxOD~L60f`^s-;o5l$H=?df7|f$Ox<2whv*k*EGWs^Ew7y}1q^M4i$=6&0 zR_NVlWo81$#!`Z{Ac5V3JkQ@2hISikH0F{G)?YI)>D!>o`gMgc@z8a}F{|Zs1I=~a zTN|o-s);CGKNR5p0uJ5LDQ&6aX^mL9s1u9aVeZQ!VjQ|Not9%sFTLLiY$ub*2AYlA zT)+wXU4ULgmah^V#bzxx)r}82$XnVFnvYoFZm@OSP}fP7ew28yN5}_U60-16+t_Bj zufB+h@%LaBk97tAt7E^d2eom4_Jw(nBQDsptxqv%I_D*A_u{=#RtxJF4Ayx6c1W@f zw}0i5WFxnj*T#=@=Q`V+dGS$%$CuEf`MFb=n*i^@05`eNW+O*Lz}V0Md9d_nSP@+A zbCG38i1Ubb{`THN5t?9yM!Sr>#38x&#_gMip5gMr4FC9Zs=+1Xy%^1 zTW}v}M9%FSc}6{3;rF;~40Ij|+#2@3wNSRcL1oSXvg|qA6##i?FSDqw!*#H1F<;?a zeJ61OPg=I6OoVcR?<Em7nm69VTQ^e8N7GifL8lM3; ztzBJ{PST9<+6=bP^M}m!efQ^S?Ykz7NT+99Au`m3p%WRS7bWi-cs2Qsmt_Htr+<1{ z(@9^Y&RH@}`-J-H-yY9B&5BmDwEpq0{9(!u!mNH zlNEmcTT{3x7yFzc9&~}R^$`298Y7LUN2LK6^fV&4-4__&&$JlS*)%)wU60X1TkFi91}40!-7FpQ;l|ske-d$r0%T$vu6rVQX|4Nt>a){9kOyM2b z*_RTupwVXbjrHD(2(+tZ80_6w7FCpuj#0K1SjZN%`IbLqvx{!HcQak@(kHouri`{F z6j?TVw)5NK5oPrc`}%C*5c=-j(gEUmVrOB@xZ|vyD{vVShzMK9_{H0iuDywPT)^iv zLO5ey)Kc7iN_&?p%j=@@=#vW}c<}Xs;})mz&4GUpOM%&tXhTAjr+Im=sl-2wwF^g0 z@yKyyWrv-tho62uE`2}GRm=xhZuC2O?@Sgv(zf^jJCIG#BZBg`K(UVgN-ZT^`qi18z9U+bQh zqd9=5`h9wtYe-O7=ibz9@OnO*G9Fb5z@vqH$$GSo$&tAE3uBNtY|5#wX5psv3Qdyf zy1e+EewrL))>jE8O0SMAl$Tp8Z0UA;kmrdD9WqPuxvE1;@F$wp^x47!q26As`Qe!^ z8KOQ&(?a_iay3hJCSE_duVeC`@C=!J!|0NIho1sQd~*}}_Ugdrqc`aT`(J-82{#wF zrvaG0jv=9>09b8l;{ksRA;Fmy7)-*lsmM3Vv-cY_48Y1L)Feon@=KBuE!seE;Lw*} z?w8x~(cW>-gw2_l9TQW^lqkI1YgEbtiior<{JStnaBYGQVp^@Zk}un5OelCjkpgXC z@V6GbJY?C(9^F{E-h_%TJU5-*{j0d=kN21B36@AYG#WI+udT1zri1z zJ9#ZOK@Q<%prC6HGbHA?iims>^Z-qxQ59`3C=9P*J^pGSc}V;t$Pk&(SPykT4R=pk z_H4t{hSX@Q_ez<%3&ZFvm8>RkMwnhtkto*F!nVvvaY7tN$&xO2-rjWl<3w-^nvu1; zvtrGzmNe180H)d0Z(&ZolX?h{6^(eR%5(0(MoJ!i7_y1%Fty@JS`gs zj^O|Zp6MSa$;6(h28VamwF%afUcL%wv%>zADvu?$N=S5V8UnvCCdw2}o$31eHL052 zTL8%5-}9YThQh2u=_`%QwsBr8Ed6=aesMRm1Ust#1c~60MuUacaN%_&Hpy91K#Hx} zgtb|t&$Wc!EniEn7bb%Y{!9e|%n7h@A}(QGGpunrFn&bpyD$#xyFE=p}sEbR%SxQCGyba74i$WP)8*d}C*m4W88NK5d`d{ zel2@?Kv@@Xko2IlXkmb*OcS?+CxbgE{RvgWw_kXzjvvDR^~#P zOK+Hj;EZN^48Ip*ms{_}m_r+EO6qChO#Ca3RO0tFbb z!a{waOQ&%svOFMIrrG$Mn!Ag8AQ=nU)AK$j$yQRU-WTNecm21I2D#bm1?6|sZfa`L z1#&QMPFBk=>_eU7B|LDz@ICS2PvV0$xZb@?S|8~Yu4xFNQp{%ia&oM1s1HkVzp5ac zbKqgYq)`JF+qEmKZiePYBXH5PJ3N%Ho_mpe&0s)DB`MRldeYUb4VS9KpB(Ry3#)WJ zJ$^jVrUDD9XS6L#jIaHmi-L*T{pJTYeBqiczS~A385%%IDHL6Y${e?F>TjAI=S#m3*UVSH*UIcGcE} zcO%zh{UBcQLu9as>Ot{20kZ@{MIIGBqJErwXXC> z5xI3O6}$4X4kTd`Zas>Y*QdHj2Y{flBv=Wn)~k6nU45Es6#<24^iN4|C%9XMAW zS4|ikWaqv>E0^3GtV^Mb8yf}gvF6+;*Jb3?-^|p)%9oJyOplDJ~RZ!kg zh;=%Xk0E6zzmQPwp6DnCy6BQIfRRUy9rSAL>YnY9se;6Cl08TuU`FdIGoz+Avu-fA z2@E#Zs06pk1ZpllNyA75YhT>h(#YjtX50vGQf{4lM)|5Q4%PF25M53gy^O$Xfi$ym z*ZyK{l75M%k#M<(hC>1$sjB{BnB3v z^JAPDv&IgYx{bPC@3WBe$spVjaQm3EPJ@CHy4?nrtH7LT>KLPAM-X-X4GFtlwXRA$ z^Q5g|f0`6F!I6T8^0{nR-m4C>k2aUq36E%I3*X3I}LU?gejnYYw~*i9S;f zolByP^1Kp*x}~EmFSosf@Nqjv-k8xXtZqP6BwD5JNL1S!W63u2b>qx z)9Il(ts{<46s8z>`U`3w!bv0RZt|!8=0>S6EyHq$_Vp2%T4x@RJ93(Jii-sa!DU1^4tvguf!hHkC20F(Mo{XPF*;pby8o#6Pv3LL4teJCwR#85i~sAfo5LvbSIWw6GZo3e z-?tm!&M84_A7`A%G9M>YqNDCkc*fDicp~%5K=Y=6P7{5w>C!kK7H;5Z#F_i&#FG0R z8*fU0QowOVTfI(v{wFx{pI!8@B+1VblKC=O;o|HS{NxxiJB#E!AY@<%J&tl^;x%}c zL3q9KN1Is^R)q|06FcER;~igog{V}eaJ)!JG(O=0JWW@P-LlZV2(95+d1SwE2*Cs# zUrLd~A?~Vs=b(kVOVt?y@ld?n?>Ly)o;LS*W0erh>$Lgfd@dUI?N8fJ!tdTQ==+#1 zr*xIC$EpAY^W~y zdXpw(p^7CY3;7K-C!OGSA^oCc-@o6x#%&Lc?@|l$=&2}Mfem#bd@=9S1;^Pt6{aGR ztw2hY6PE)+1FfIclgLFspTBA39Qr*x!2hrxEds=Pn4pnM^}OL&i{jwa-~CcRfE%al zFvQyKzn?v&bQBA9Cql)?wsiUyI}J^YBgd!Zjfb?`>MMWVMNe2A`U0A7Wf`nA9meNz zBQ1mA?XmC!!lKHl{>~+8Jzzff#wxjzTT8yPV93u7VJ3#ShBI_mXB!O7#VU9}b1`v+ zYaEh6&8XWE@oM!wOWXuEEy03LuJ7lL``G~AEb)u+3keR}6Z)WYFCV|*mEl$I*_Mt; z9h#LVen{yfQDeeLXaB3W2PcgjkB3l|c699|{reeE?nJ_3j_nWDmFW^RnV|Ei(A(~1 zs9dy9V7dUmO&y7*U~e>$^%-{q>6gh6I31C~NcIFE0|xx$_jdeNK)o+CAWZx>;f87i zi?L!Lf<@JW#NbCP3JyB>Eu9ec-8kc`MP>nE!=*LN*1a0JTq*RXP;CXRHm_ zVWpUAYm&QcSl#$m>s?ahev$-xnP1*ER{Ud<}rU&KcfEh zoixngn=m#Wgx#oc?M~$A8butP+^EWS8cy1B_tjiZ|7Kr)iZgE9t?txphsp4@jnwRb zx%nA}mIX8=#@@v*qCGz{J86AZ?c7d?^&`%;RA$B}Oi0_CSRbQTATgOUhW;}yj_2vQ z`=>uUdt-U`4A9#SgrE-1)4NRb4R4h2(RC_f==O$`>Ti-xG9uKIrzae8P5d50^$`r8 zg|wY{qvq2;)_^8q6O*evP16Iwsi248;1}BVCX*j15t~ZiMW&2$aPr#ODoG?KwvoOe z_VRYutQYy-wJM-UQ4JMh)?suw%lz!2rKTb7&>8xIAv9+l&DBWVR43QJNP0WxYUOLi z<>c5$R^nuBzaY4I%iVCP|2WFsE>zMF*bU83yJEWUjAk)AH}*6uXUys^u=I;nr05q} zd4s7=L6)W&Ym?AEPO0{eR@vOuK0^Un&aUKJPE>J41q^|$PE-Gw>fKmya8%VJBLv_ZM}tkavvN>IT!j4BRt2E7O|jX!NzEuj*&vQl>uIaGa5y7_l7?F!cd`{I#i_;gBNgWN*7MqAkV@WV=JmId?u) zJEQBgnxNW(R~M$A15Oick--Tevd1O*DHbnrhIHyz6(fU^aH;fDmqxwfF{mjE0U85l^B_c?ErONEU|qU z=!LMv!2>Ic2Y8d-vC9`{?&A2Xs#x_kLSb#U`#cTfdD}Njdwm!m{^GcA*z&$VS@)H1 zz5Tgl>MIxs-!Ji!^8f%q07*naRPy8B#!|Eylt)gWHEcT*!4w!2et8Dq3D$OqIyMs7 zhiD{oPM%m*W+rj)?GsgLobi!!HA6pzz^E*S0Nd7}6OkiWPK1zWXt0t@`hjjA7>bc( zj*fa>UDOYYuX}uVV$)Z@7~%Kq%Gjmp^jsvOi|8qSCTE8~?9gv)P!?Bt7dCfdrA_HI z+OgWMZ}uI7w#!Q!j2o^#0xb=h-jXT2i)8{g^_8*Buj7eNyc+9l$#6OxS)Y_L>-D& zi;T&l-aH!n^ass2iy7R^8LsP?dloVH$_|qLh3*h{wCH!Pz;N;G6_IK}Sq#QntkYfC zIUMPcb*?k-_8k+i>I|IfgQ>0(>ah*FK43exhCSNIdJ@831}CaHH*5zRPVE$qSEq5< zpL+7*N5fN}Qn0lVxx^~5AXeC{uj1uf9mY61EM<4TJEolNr(a2*j7RVEy>?v$s1tUt z4wwjcc-n{@Hf*OKntGW7>kn<~P%FG_PmV9`KkBCK`ucxCfB9Ee?v;MSHe+0(SXjH~ zCm(amrK5u%r*j8senNzMGIsg}Zd$dT6Z__X)3dP#;ULx;9Jl@{4c`pNoMDzQx=h3) z))Y;5PAFsQBGas_;c(h*yYy(vc?m7)lo0W-Y&qebNQ4aw@?z=;@}Y@g+rThgd6R>_ z)uoN<(Dx0Q=#J?;)AzrSWIC)`bn*owzUi3hhnJ5lA+n#RqqVQT{?wxAB{l_&&8aA_5dQ`sjwj=LlTU=QCHLNdp5c#|J{KvtFR@x<|yq%fvbGZf$aOL293g)XuQC(-8xkd~UiLb8GthSd94ME;IgX$thVY4i<{3OT^h2DU@trJv z@H>1w#gMu690SRb7k=xf?J1X|%iQ=7QI)}B z3~f6R%nDn^Xrg5YL%+o3C4QO*bAZw(Py6G!K*pv_DoRHbs;sfKTaxy*I&k8`Xe*Pk zC>!(hB`Fqnje+7MuyZwGFfD%ib+?$I#T*d9RLD}SeC^oo&H-M0bv{Bry%35Pe2(fT zEb)1#ADs`uj$v&AUAw`h??U9Q^!|JsJcDcmJrr%e*Q&R_B+QaYGZaCx-hr!5v9 z*oM}D(C%W80z@@@y=i`{3(aEBf{;fyZ!nb+%bV>8F5jdvbGIU?(1t$dG}eZ>CXvG@|5pb)OBJfZk`WF z2R{?;95@$jjKc}_pqKH5UbAOx zsUO?ul^Lxxd5NwvLexj);-7g@zcO?M+K+XVr+hWT8~$peCnR)~gdSVYqvG09R$D=e z5Amb)%8N7m88x~No%HuB(%?2Wp0zFf7LQ}mu59r;p6WY4&QtA)75qT;z5n{8PV|}X z;ln)6_{6pj4Sc|Mi-)op5j*zcheZANgp^!(jod5m9Ab9Zb_>8EGKXaFtN-zBpU2tq zxdfE&;p%7kN8x$qMZ%BvQkTqh3Nxc?pwSU9W9&d$YV-#mxW;>-Xv zA{Yb9;KFae0Urr6&hpA-&w}D&VFE*Iffr-+S-w+)^USK>u~B{|a)+n=E7UiqX#60p$24-RaOf!I&8id)Fe9g0oN{iO5C9@fjyN zor}l`ujB6WI_4g$SNmYDj2XY=;Im6P>Cw^HB#+e)ngVw2W#o)@>eDqA>CAh~12i|bp0!mUk4t#EK z1B@*47N2(Uap?Alw1YE2^YnXrj0_(M2DfMZ1Rzmr;er#JF@mWUyNMbIZ`mT_b(y6%RuoBoQ^q=Y@G6MFc73ak=N6jwP0 zZJ(%yk25Ydkr{djbZ0f-yC9MhKzk;l`;3Kp)^TiWGuYI zCbAyqUl4{jWE^*4hELj0PUWaw8d;E;9&&TDy$6Bi<@`sXVSdb+@@#+XCoVl6FYjW8 zucFEqe&7%u;;efXywH%PfONJFJ5a9?l$}BHjKQ8hY>deQN$Xb+H^(_$IC`mtqwNS;b-}=`D#q_!PRs zFnKbZTxwPpe&?ySc5%iFoG~%=k>B`D3_Az)ceLmHV^n*YSLZfuFVm%YkDEECZ6Dn+ zr)@iKX&TdR`n2&GIaGBbdZ^-iF*;6tEsani>1FhoD>`EwVyCDQBW-(iCU#^RJJ0%O z&(^ujMkZ%^BoU2{7{;XXbi~t#$kz8+uvIfpu&0dnXz&}qJ%Oe@&YaVq(j5+boHvef zU|~7S7P7O^2=!*fP9r}`s$83!D-Fpih#fw zv$)ICz_#_B*y6FVM%M6hR8YN)q;{kRqnHi@Lf(Pz=Oc`kF-d}x9$+`D7K`c9xcZ2E z4?p>{AJ`)d=VROB*+5CK1Wd7tU3sUfMW&5D_SH3hkbx&AuP#6h3n2Lt zRxIhJUHK@Wp_6pffg%7~`2$Kf!fb=0~9j@8jr0`oT5V) zYykOiMcguHh()#$rmUCZOU&i3eDy6L7YL(UGl`F-;7A;lLzT}fUlieoPe~w$2q?-T)QSSSJmMUO@tDaInCu~?M4TNQ^+)HtM)v0F^OXQudf*=a)eI| zi(Z}J*`H%N^AK}hXGW`j&(gYA=0lR8RC`z|=iynd2Tqw0zjJJ{4wt}gt*kM^=W zg=fqYW^~m;3O6HTTfYkzrgRLm?milJCUvmoRnN4)UgV0m`ASw47uwY>l8cKH_%>c(n$GF5#mtHCV?%j(kpcDcwG z$@7=$s|(y*21h*h<0Jm{^)(>)@7G7PALMHF>Ib*m>-^V=b4=Z1ZrQFbU0N;Y&zX<7 z;t=`r>-w0X2gljLN5_%j^cYieZ0M=7qR@5$F#>A&d`5}J+>@>|6GY=hGs?~{ZH8T5 zV6zZOj)=0E6OAVR+Az2wv@mhrzB4PeJPyXWL)giydq(Dzjtj;BLQE1WBs-@vM3yF= zCU_Xgysf_A&0q41xBsy#tKU3a4%hpyxsvKQ*pbQbs7t5nOpfo6e;U-VHjsa(Q?pT(hL$4!6ux6cINygqWr^x*Z?_PrGA?~pCO{t$(I ze!aZvj`iv#x2>1g-mzXDbMtz2(@pE;QJ2@tEtglzv-B6?0YaX8Y2iySC?P&r|k&El6iyqp8;cPPl8et-)^?z`@J^xkqOZx%oE$>)|Ae%}6a z`(yT&3oHURQQS9OQ2V2AUOmk1GFJqbZ?bnvn>>#n{2==Ww#!3YUA*g8Hp~D0&o|32 z|Le{2?q6P(_xwK;7g_w6C%7Om3Z8Ep`i#d|5%PpA=uU1kMwo5Ec%il>|^c@;+$0b`Pe_9cqN7F^^jCcW}DtOUDS2B7`|7C)n+ z{fsSsOdSG{$>as~&B?{}rS-|?eb2|-kG=c0ySMv(>8Hjik>``XM_AY+m)4%Qbbb#P zEhlAsG2dKNZR$%%$(-R71l$-#Eg}2e$hYWt*{?fpf;qgzZ&w&Q9v*OsZEk{6EM_!4 z)G{h(7!)6SWK*iepDO{lp0Z43CXCXh;w(5XB&K7o>#hwTr--vinML#J0Z2z|jCGu; z=tz1M(Yd$a+>A{wMQEP57UI0A<294Pi@q|-7Pe{(aNOS5=Y}N(Dx8HHUzMkkj4~)< zu~29vR~m^#Fpa^m#nF-$0KWbxpGBik0zqT7H=(O{kpwUi-ovH&zu^phjpJ*ca&Gyr zzVzJkGIQ$uMAKD*eb-1*|( zHvGn~ZdSkiZ#K)n`^C-jFYiBDe*Nb+tDA0JZ7)8GD}#%S=z20mi1?6k+r}0d0?l~I zOJmYepM%l{OC&mj+3 zLsN6YTA#*B)2T4a!cO8N-Atmd4e~|T<2`-oS>KRBTzb@``Qx+iY}B5K)YvMMF(^A} z!HFxW)8K@sj+tzs>Z4Vytsc9u44U?W<8YK0Pgm^w{XyExS3a;nc+EpQILab}tbbwM zVwa}Rj)AZ!AKkWDHocO-kIL{!i{R*|_um3RuU-7*$%Oj!vnqwo9~0@T-@<5N4_YP! zdir2A(B=Cq-9H3s8q!X_6qAp1=qs4jkr(--ELKO~YlH)0dBA$}&)!Es(R5{aNRhM{`;Kp<83`Y;|+GKardGXSWZ-hyUL9Y?fbTG5D81bF#eir%smN zdi%0{)U&p$i(Xmy2^W(SIlXTJTIfaPlprnsn^Ch}S*4vc`DT=@Buf{JCIr;-9J=js zDH%*~=sF>_p;cwv=p^}r8>*!#s(UtuMJWfTulf~(G#rah zC5q>S4qc$V7C;q>KK0!NzvP3VMt&?$=+FhqBKIusC`IY$#7G3DLz>c{Q)|q#vJ}hE zCQZ;Sr~yXSD6$-(r$cP<(sd0pO&smTHzdoiFQKEQUPoy)*Civx%2s+3P&$hMf|)C? zI9vpfzf6X_kCVgy@ldW_R)6V>FE3y6^h?XLpL%Jz^|A}g*f3v-4neA;t>07V6MGc@ zBW;Gl-H(hvmS+#{&$)Ad`TxFpv;4xpI9a{p9~~{f^uKJk=O4RW-SjxdYj%$3;pegdtd6!XB)!ie%Oe)#lhr{t zz*Ilb90f|YYKn%pubPQ%4%4)PlP)jujTk+7`0FH08IKOx?*%mL<>cxCqPoFA$eEz* zurrq-&*DBIKnEcnU?H8V!5PoE;;3GPqDh0Jo=X62g{%~cK@GYVtZFF3^T$!7*a8){ zAhDs0vf{#te6?EWoXX*MRC+A-&W438A%0uPaVN13Xy~W*%c$R2H)sReg(BMVAdcXP zRyFNV@RQv;KCU`^g>eDa(aC1})9+ihFTU;E@>iaJdG+OA_^9RSpK}quQr#S)oA%9z zN5ZBr?rvxO`>ZFf7xx!_>HhMrUpiU+)SIs_|JR#Y?09H+^Am~DF@xcpgH}R_dSIMK z;ZBd46(*IR^3YMjIZW$x!h=zLGeEAfx3J9%rwXOYqc6{`i$V3Ic!?;h3qr+BEgTp& zm2E~!uq|$E%zkE@j^rE_Hw97h*I!7x3jju+gX9GyIR|+Cn&KAP;vY7k!7OA9 z!{HYphL=SmZi1SV4oCkmM)y4H=#!g$U)!@8kaTM*qm5CAEMq52v3Lg7p_Wb0+}yiD z>7pPfZJ*S$d41t&I17qMo)Y7}=X_=P#ZJ!b7OI!hkcxB0HpGloP$b&5u!TU*Ac!~m z%DP9uacJ6pF4G-{g37yw7zAwE5DxjC`4jQFn0FQE%k;iKw-YUTam3RD)-|1`>E*tz z!Ly$;zxe1Af}4==3B}tVI9{IqsB_Er{L#m(?s@KGmd}1HkJZPHf9v(-=fCH8Id~jzOWsc0oqiu0W@OF*Z4}QQGqH&v zv1Wqg^CHEF!}i9`NsHCG5uS4*Uhqw2wqn}=seEY6U)bV^9=U4dHJLK}lIJF^nDyff zHU#l1mrMWjcZ44vp;DXy%FQUhYCOPmb6;uoT>SDNkGrM$D79aL{2s zjILGTOeoJQ$2?!iQBtEAwj#mT*iKfk!H)g(vbbv`z&@ww)?@5itAnb~Zu6*DGIz;M zOEd0P0D0*xz_R*=pImO)+g|)pq`wdyK7O&lt^zag@+q=BiKfcox* zCe+WvI$*qX)-EI~MOh!tWxADdO1KS(zVE3|8EDAL<3XZ!wT0hPCb-bNg`h2-U!$nK zJp7aI!#clFXy|%XG%%!5jqv%j42JxCR%p_94+yp8I|H>#z`*h>4_@fB6Rh&l_b2wE z!vnp`TowElb^otID~Js3UwFs$ z*k#%Hek~K4FqSJFWjgZ-A(ka`v+|g!!MUIC;TtJ1o;?syk%72qu*HIeHIMVvEBsy^sBeLga51fZhN z!5au;5{phkKpHAB88bVU23q{IuRZK{@`NZoBw%Zby%FE2UM%Z)^=*9-0OoA~;! zj0-{Dok_s;HTH5P0bA3-aNO94DdV6Q&~lkYo8{7HbCO|! z^vge*D9v@W43B{)$^^FDk(=QeMJKs(DmVc~)X8hN`nJRKwO4y$GjTaoFK8|gW?(SI z=n%wZ>%75hUrDo2BO0)!Q1s3566A2}cZAsH_Up&*fBgRbdhc-nKNd(n%xP^V7uC%; zhjqX_{d!N&Mw1N(mDZUC%BEMJIx_U&5!4ZwcuwC%L=VNvb!*Pbib}C?7?xmc937(; z40r~}<%{KzfMke4npY7nJLCQy4TF~AL$^=*$HPB#^3V|Uz=GT>h%8%;rzcm2(z9_F z8y7I$tBwsroNId8M&G3;!_#@gz^^c&I{*{VwIg)LoAQ+-sN!szO)CMA>^kWJ2Hoo( zNk+tX2^3_c#2x7_a=p>nZg0kk_a2=r|L3)n<=gLi!s<`F_;Z)rZtmqi^D-9Wz5!3uu$JICa2@N+<3y(W*@QY=$q>MJM58Z=9_ z8w4ydXyja0j;)K^u<%*?2iw(SNtwq2`ff6bPi^Z}{7wcUXj;`L4*nt`xF)*ER)>Qh zw~>w&dKJwpRFC@B-xx{J6iI%Ek;owH;AtDTI8ZYdpzBnvqoIG`_6+Xah^G@4K2%-f zN?M2cRl(bSsBk6FwiIezIzN!5>8aQ$dX6v>+UPUHo`EG(#`5YgWd#P{K0~N06zlML zE(FO22AM}6I;%0{om7!HX23%ZAEf8aOFgkS9t#BRqgLzReL!5TzT_Wd)4<{+}`o5 zQ|(RPd8%#R#B~zhhrP$C5^U*D``&)_Sl4ph<578zv_~MHQfg3fG>kTQs+Za42*K#_ zlOgJ~;gOS1nST6@oRSTfc_o$0>&X=9ao}DZG9acJEulW7M3FV+jI_PoBb!IJPVF4O zYKs?W+^C*-mmt!2lM|Hz9XZ9d5VHi3)l#Tu8y>8Ca_@*i)-AP_({j|0+hbU*xUMFzG5U>Su zm1;Ep;gt0B1j=>IvTdhSGF@N3fe0miU%-!7O3|ih%y$U7&T6?H+RMW>Z0U6e3D-M% zQ2~(#=X$gL;6aV%`eA<1;*F2)@}--_TaKTZ{?^m4Z{PjWCvz|VfK9fK{>;t#Y4{(q z@i?38zD<7q=Gk9+q}}k8eeIY2$?jBFJwOMuj^R~b_htO&j8o%4zwT@rP!DoezC z1WUXVWr{MX`0FT4l2b~FNFjB`%7>$PV6sPKuO!AvX%J*QwXDbC%U-%N=}W69As4qJ zoO%tEtlkuNc)Op`ffUl}XJg(>(aJ0uqRlSp^qRf9PxiB);*vPLVkATWI?m-3$H9-K zVQ2>#K+bVRn|;@fV2@^sMwF7+@@h6AxVJ+=otG#*h8>cv-Xw#Ps3Ks$42 zuif**+im}C#Gl8?{_{wZ_3$gg@v-dGlcS-A983>rq9&s~9L3{az&KkcRtyYeEUPC= zbd*+^nO^*3G-aI|f#ROhh&LUHe9_RQaaSj76zjXeBmcgQOFp31)(DSFfsphEs^>wq@~AC3rO&TQ!Nx(;Xx0s=;$?6_T}os!8gpj}?q-d0HP9 z=VsBD`ZQQ4A_PBqYAVA3o`xz@=lNDJVq;gfoZCCgW~Nt1EM`UFjBev?g`>QAWbh8H zB<*-e(xrZ<08+4|UUD9U?ut6-bnT!^@1j_dqLCp{N4cESM~&M8s&b8m!wuCg3cC{0 z~CJ$j@`1^-ugF>XAszQ0?Fa0<2e{4*at#*C4HzJv>tftJX94O5;BmKU>#cY zkWq&_HM+@1_N3Gq5zzy`$302DE`pqc1o0S?ZY-CsTxHj3eJUBYdpr=veWUBP2;eK= z_PHoQiJc%h?C|j#@YEn%^M`6=O3=rZqNu!xWu}`d4(beR0fV%j1!dt02bD=#$YZto z#09$T4Zrmv+XuP>oE=a+_a4BOp1&{)J2M^$yBfPvY!G|YGFa%8-A1*bq%MO11pSO1 zSSx86)Gq&SvRvJp%Zp z+i?hO0$)Mg@;ZRrM>(3mbLwpS!b>k{KmXOwZMR)@DeU1%cWQG^|M4Dh3GCSK?_qz@ zUpU$>yJ@Sv;Uy2Y>DhpMKXrcX*n`qldDx&z>yKV>-0XHJW@?`urOqp{cm$8}GlF99 zC+Z2N%>Fv0NKZ&cjH4cfs=(L?ENn!-s}H=3pi!Ubu}XPR<0HX)*KX0?t5BRaQ)#3V zs>GoM8b{tR#erJVvN)Kq?{*pJV0qPxi0wQbzLs=lwJ8Ezi&p@Jterd)70^;Nd zU*xf(m%42ogPFD?qHjpLt7awR8;9)7C`E64_6bF384&Z#fed~JA@Z=&77tsuGgb?E z@JG)%Lbf$p^PtdXJ4(~veByNbmK&~K{QWO`?sU^-N7MH?1+%ep`V;j42dAQhV{q#i zA8PyFa(Vj?uYR!Y9pOoj!yEx#Tmpxo!0~X__m~)!1z1DK13Gv(m>f{cq@IneArU6( z_|KBR^B7#wn~Q>$5FI+$muLABjN30r%-N&xHy&% zVK%hixiN!49&M2pJvs#)26^xzJWft3f<{#gQ?fH0d3;R8PD)+MuBN2xn2$fg?5Q@o z0StRST~-ha5cxaL(5t@Ubso+dzzhBP#20095|QTtV$U)Mibrae`lB1r#a9P|E|YTi z-x*)OMjaz3_MELtpXKpLkboWZ;_qdA6U4MJw&fA{@m)K;4bJX%US#vM1q~fKyPx{9 znOS46UCd1N<`XB|_de1o;N~wl)L!|zD}A(h+I^Jcw%^%R zz>&|MFSaF)izWgEy2mlc4n9VGXihBZ&9up0{)GIg654w=R`KU4fCEE)1Sc9$eZfjNOLzS1BaHh8s(Iz9qQu#N_&6N=ZBLj`$noN@$vJ^_IS zqpxTMmXaBIq$Q7`0;s$N-txuz0$g~@F#wcC)gZ!iQ32T!pabl-rvR;uyt!B(b1+xn zb+nCd4g$m020Cqj4g|A&2XFV$fkHj_3SVU8&p?nFLt5#gJ*)_dhrGNw|KDr8MQ8D* z(4g>?(g9fj-OiVc7Yol(CV>>gwgG=cS*s1s8 zpYmC8qz)Em|Kzc&9C`Jz7yA=mhsdZRDC4L&S4<&+DTtXpl?rf&g8@5S0@ZQD^V&3C z8oa4TM@|7KECH=v8wVd?2M`)Fc;zwQI}(GD=>ti?ok4;6^n8E%UR%nR-ahc)6TIlR zvpR?bo%B9aho3rKK_7K}2CqRNvK_2xmjDc34Km%I4ru$TYnRN%&if0*$Qvl? z8NPa*Am!9qUmxsxiqQS)wCLx%`%}B~^r`l(*Im8%?w1z$z21@oNT1E=)87LIm@9$H zZ#mFj`p>UwTMq-FZ3buFo|4$jB+4=1xOzu`FiR{^uKEH#01>3{dA!&QYWIFzrb{0* z_kMuRYH$cXY+vyff5}sYuyI2SmHl2G^<|^R2pY3kcn!e!&fuho#l10O2T%nn&kv|t z16T)Kfr1M33yjeRX&_|lGYGh`h<^XnZ9aV2yQ~cW6X+TfsO#4b?4WXy#-)CbUoHvg zV0SMapectj%jjg!M?OCQeXSf&dRibrbFIT!IC|_b2O0I1&aPj5>7$hGhm7KamSv#> zmHgOLr#c)&^dr9LL-a>)e52d!yX40zz_N{k7k|7afG;}F{vbi}0I$n^_NA9hfB)q# zoi05%FZ&Z+pM}j>30!&G!FKzPU)A>BX~=u5jTbOvUKn@^$1%)#cc&4unR$)XPyGb9 z0@}JvIAoM#N6aH2H3$UEo-dbdcmj&vfbdlZMy>#1(EG}5Ix`!8u%Ien&kz}ZXC-}psG+6!KPRonShPT#m4CY2a7o)goVxwC{fwgj95Ik6%Q zJj$DVk3H-1L3d{N$dLCUUrsGbPi&xIU1yh#&RPLfTpM%Ra${b-0shD{dHEcGra< z(l-*mV`qE%4QBqwUvZ3Mh2`q`aL=31P7jQu^Y|BC+>Zatv(p{leE;I$%a}4wIvE%@ z9Ib#YSR!AM36wb2BSOnpkE}V-mZQu8uMm-(D#{gx2^F*v6;#xU!CdGDiggK`vZ3BY zkPdVkMGIdnZ^4n7)C$2Lfzql*b&3yRB1;rHuUh9TrL-AM)M+-UoQze+ok(eioc`9{ z6+kT5Jyh5Q0-%(bF)J`J5WfUZ)z_$EolMs2UHp$XGHSU-r_`w`M#^7jX*9ZRcfPuV_ryRSo^ZfzKsVjf%n*wdr_kqc00Cd4N2yolRED*w=*)IXS3X2bBXbuRL zYcNO~4|BQp7fw7pz5b=IT0Hmhw_?R$%do5PoIaa9;34&xv46&2xUxO+zBBFae{g(p z@Fffar-=pV^>&|3AUX0LRpKT298mrB5cB8#{zN_$`AT`J*`%z+Bt_IT_6|7FysR&I zrZ+PBV$@0tg^>5!fl4b1w>&qEsVYYe(eA^_2&OIZnqZD1*}Nd=ARuJmNu#>p(p~v% zFz4g=XEVt}0yUBpAPZ=1qlN-mYfa(LK5Z2eW-@(KiHLuiE`1pi(ie6*$~YFbBemTI zH4^aM#soZchbswvKmcY6ww;|Y6v5D?N$P)cp{7%nmj_LNo%^=!KXuzQ7Gl z1>s2JV@q$VrO_9rsU70>%bQL;(*Ds?pWR;iWZvFJsv*$aoIWQ#;4$@3@dG8#`mSrH zN8f*@oqW&sV)Igtzi${afZ1eEmT2qoXzUoM&fp$Oqsr4hIE@G!lTAg)vgq11Rf!h0 zliVewQ!0BJRfDG-TCdnG-pJ|~^;P9{Gz-*Zgh&Mdh!4(v@dzFRPIHM{YiZBb6QIlH#iX(Xp>VwPw3>JT&9xer-)2@JSzV~f*v1O|qo?v48En&1D`LrL zp&QLdfgPSz$Y`rN_>VvKa@hG+-^TRt_L;?>KX%RZSDyD$zQo}u1C#dV^f~PT1Dx5U z9X__Nec|7@roHKl?rIw^CWf{X2Z?`=c0W>e#1b$B1;m^L8z?fk+RNT1<>*t9s7g73 zWz?DR_(SbcqCk}~=3t_{_3V@HIFxBUYGB&UHGuFsPnqeP1h1=u0+On5YWNdA%lxAz zZPE&5uar74F3VuzZ zb`3@PtOmLz;1YZ}+hR+ODrbJy1n@;In=}c!_UhFmI$(=ZBR}~#sJ1vWTBlp_7pnTo zz6BL)Taw20tLNh*c^i~Enyv_ce2=faefRYAqhIosJm_;I{>)2%I_Eq|yC1I8jI1l|T+{4mQD;n1e!SRR9_u#mkNgW5D{5iG`ul z<{O`@B)?HsG-FRO_m!NjtsE2zWclj20%JkE^e$`+ZslN?Db=1?ARIB>8|vdWg)|tI zo*PrrWHGq_j(aJhTTsG4^>EvI9fJeGfF*t4pcni?lY`U^JFg0;GRgC)0x?O5s#Hf+0bFM`vMWYfdMsG5cDqVGrQL^K;7OxbeK@4SoH_nj40GVLN4qW zzy!oRFOoLf23Laeq%YF&XyQ>#p3>Nw-g@%E#sB`yubiHK{Vn=2pZ9xo&a*U7@T6B> zJ>B`EXT~8(l6uWT^z5 zVq`)XRYq$(BWem!oxf~ARL+O{BG1GfCoFem3~mxtlyeviYba&zce}(l4-FoaK*5mw zC~z??;H~$9NOVM3@hcp8c)jlCSv0amQ*Y;07dFc_GqrlKU3RstZ)|cOKXR@F>T%iV z0J!l-Kk`wZkjF;1oBQ`*6aIQ00Ne25mgi=5AHRH6SNBaGb*pRmst)-}j&>u@#lYg} z&l>1kbkyy}=s?d>SK7MQ_T$Y%+b7#sAG>LK)fe1OD@itXPUl|_a9lhU*yJ}6pYa{n zwT=5YR2*Z%srGv8Twts?iW7UrV13M2Svv78(re&gpJ|e*lDG;slyTOmnZwybJ?bv~ z+H|E^q2eSrbo+&%UYBoT zmEXwe8q8$$Sd|msM%`S86h${Lz$7_r(h)JW9SL` zl-(MGVPVTUo|>(IKiSl|a*eM-L_ZLZaTS^o+XB$1?J%b{!WMAGb23>2EbA&mofxo? zY1RU|R3KS>sU>5D9Y79$x$tKj>c8qrgeuqA3@A|3Zz>>F6A^WGj}qJANef_v*VRBR z&%=%$_Acvbfo;`TJ#Qd%aUi3a{@6;pO@9CTAd({@#I@`i!aa&IP=%M)+Zg^*w~~!D z^z6YN4_1Ct0UjI-#edpP>c^MJs zFAm{7_@Ru{FTaRBLnw2jmkko#e< zH4p`R#um-^(X^gRWMERe*Bq8*#B7;-F`PE>{^XK{Xe)c2nZ2EM&7mWUuYTH#)H-JFjhTf5`{i*6ke6ZDPtJ$tMRi5yDgwqDP;pgRshkBU_Kp5iZml zI*@zBAX#;h4Fm|dPE!|Q>2#LlPQIuxLgPei!RHG>iePA#FY3}(q)--jobReW3ba-n zT}Z-6Wiq8$#VFO;QdM(hj8;R_tmv~g=P#aB%UOs50B8HOFS~rOQ4WwZyEALs zMFO5wR;Z6mCTTkdf3ie}DY9rOJ!HlpfFZ65sHx7tbi)gNDnW1eKq_UlxP+%p9z1mL z@P|DpBaa$~Ikxd+=*16PM!VzFK2{bVKKo$%?q_~eyWz5HdgGLx(}mCj8R>EK`sZEI z?)t0uEgt&i<8A9|P_~@_;Xqc9<&bARX^cZ9446udy~J`wWwp4D{s_(*Oaf3gN_GJO zQBk=BKamz5^$>Yk<7&gmXYXx5YLur|7ldi09;ihS52lO)W>hwK z1x%)^N-j3#66BoPpwpqFp6|=)!C3CY<7K~CK!s}`uOzm`J`DNOGS<27vBtF&?T17k znD;qAeZdY}+ZkOp&3a_ed3xtm`}|98XkY$$FO&g#XH99|ocBH8;bh$35+G$(x^GegXy_3_~y@%V0y^s6LQhZs5>#T@oodD0_>FRc9 zx@OupU9>pVE}8c88?2if{8kSxWmTaf+s&Y`#d!St+Yh$?^3VOncIlyu@gJ_$5sw%1 z=KSvgF9@2hf9|n%*I&P9@!(HBGHu;T{P^43Mh=Mso;?ATBb;!oiVAoGJj_8x@hWF- z85b*kVMvr4S%hfvVRmXMU{rnCGq^}x11M+RhEhfHf!9(^AYz>>6!xh#V_v~dQ$UxK zsHg=?cU(UlNnnZoxPoN)TY6KY0tbk0N3cgmTctf)iQ>rSqDE_8EEC42l20}isrAVS zNXgO8mQ`z*z!Av+p>;aWn{h{Y&Gy-LdhbJRd+(uK&pFE=dw{Xv`a>^kS04O=cFDeL z+LZ@xnD%cRYKONjMz#hKA0m46+(UdGT|9F3;pv`JA8Q{!{rijGKlu@E6&~WtJqH*2 z76+$88yB_1e71LY+A}V>rG3d0o?TAQ+Y7b_5|o@hKJHalPxt=-FBN?dYD}$6G6bLm=d4O837?7!S>$)VdPlCPN z%~(L*OK=507`)Nh1tL>wBCmfIV^=%L;?V{_BF|jxk4c``d-sB$)tav4H#KfK^iA#h zi*9R=yYxxz)=U3fyZFH6ZEI_*?dKKT`}}Ow4{xY*Eyczji~nuD#(Q?>Y}@ABd;rrx zEWc;Y@#T?6?rI-=-~-b~9=NOBb^NaOQ3i)MoOpYC-538DU-zA7|Fu56AhX0}{J#2G zSF|g?{gTB)Z)6p4HK&JO5Tu5{B{Vb3_lO?NOkg_WrQWa%9sxBvJ%LTpS>61Q3S^dL zFo1IF!ypKhMp*_9g;b{QA9~ZYO}_ZLwhk8g`Hy6Ht**K#OTI*C4gdV1bd@Nk;B|mc zr9;szJ%UN$(v3B*hlM}&U0vx4zr7cAf;c=X3!nA2rSq}x-7Q`B;PTvDTj8~NabbfQ zc`+SYoZ7i#I?W>B5JThVUGi6^XB_*=cKszcwHq(FtsUH|U()R^J$8puJHWs7b;9QZhsGV1XvRAb7OUEb-E(bTp^`Lady@PB-9r8DJHOqiyme*1gy)d zb0q2E3|ytJ>f}-X^gq98@>hYWgPo~UB&|jkX!t?74Ax)}(IS-T08SOk#_xz3__j4P zO{dI0{OV0MI+Asukfe(2l^uEA6~oqdx?s0nV)kbH`F#1L1HCSKEX!1bKpM;vpG!82 z6Wi~}i;{0U`b~>xUj1d$=U?;UcIm+@nBfm=vZvASy*QdrF?~GP{*Zl_)R|R6{y!$S zVxDssTn~7xImTx`dA9xLx4m<5`U9t@OhjVb zU$P~4q#fURx3uY*$NqAA?sflZ`@E~4JMH6Kex!UEh(ev$ciY2(!Su)2FTMUlWaB$t z%n$qgF*@=>V(IaDkaNhZUVg>&k)QoYn_j^8hy5LHQbDdqdE%nLYm6?DWZ)Q}Bk~jG zt_bAGNA_Y809}u?k#c7tN;)MH*{lYDocmKBd6?rCxB@=705gPA-hot%MZ-nTnW;92 z$&;e@A zP`do;h#pD~9KAhi@a6~%=`c#lV3fBu@(XCwiJdz+r*G|5PyCndIX8VBSMKZlKBJCW zsuj^QZ{{BOwDf@SNPuq~*l1V0;EHztKe}gXPX{f2RTwn%nHw&XWp)q?C=3!6^U!kL zKV>$xkCebyMDz&!UKR!n1Ys$qXc9kC3O(*~4WJ-IMb#@+ZfJ)Tm_qW;|0SKRjZ+O-!yIjS-up>MP&#CbFKz^AzfDw6pX-X~qr4m_KO zz>aeokfkh!jQvDAd(wEvA5jT)0N7CX>%18*g10b7mOAhITN|RA=z^PUHtZZ3D0|u< zhZ`yRE8_Mw=G_Smv* z@jIA=UTOiqK=)r-2~-A#zHqm$w5gu=GBFxl$^G|7+IG8d`pPH#SbNURf1VNVPzDAS z&oh1<$9el1?tzNpcG0aDw~L;4QG4{KA8ea9GyT=K1iiM^lkrdV1~$F}z@Z_C>l&yt zwB_jo!~nPoN=;!kWi)kO^!l3l!DDSSa}8h!3M&wVL^lRYA405(&F~hZAa+1lPca>7 zbJ#0`OMnVpYCdtXs^_ViH**hs=6aywwO#&&$J!(R^u9LTlIgVDtEr0uK^|}mON)to z!EQ}aq><3aKBEIT9sJ=LbG<8rs$k+x4FW?EW$PFK&}>cv-ZINcJ$X`QY8m2_gsz|u z5{h&S5%0#F`0KWyqUKdb(o(Jkbh@ppEBM-?&Z~y(vr%yj$TJ-1q;M>&JDX)2aF!jqv-3& z@Ju;hMjHkBNC7z!?&GZiHmJ%za0fOy4Ortfn?VAl&g(Tu1nfxrufy^+Ae+BLsH+LT*`OD3D(| zB91i4LxoN{1L2nG6yU%4;;(IA{j?u$7ah0?K1Ma$Ic#ZfPIC`@4tn6=rF>uH`A6FJ z=`)$}7y}694o=V&Amf+Ox=L&3?OxO--2EzV>X9%p8~_LMh1SqIXvm92cg4G|T&xBg z&eDElOrDIDotBw9c?@{Bz?r;wU0&1@BV{(i)4Y2x@I?=V$U*n|$6$-B1rf}rbb0$u z+a=Ec;P-Tpsrh@wTRfW>*=XnZV#6)d*`4>dn=kpA_O(y{U)I1sT87d&%{}lr=z-u8 zy9X{l*e-erx1)de9KR_bAYG;#+k&^}M}WKUb*Y!fGW1+&?=pGM-{8$C(B+^J`7qbr zgk-~4?!5;_fuGv&MWd*1Q08zWjkX;=W~gVS5*OR z-1P`^9CQq+h54!}YL%nLyQM4IuNwT&fIb0l&h{t1$}laipU!N5s9kgPMeRR%+K?yQ6Z*u z1lbUnvOB~^&*Vu!eTZogYen&N5Oz*kN@XXE9c&^!MF1b?&_G7VAZK7n^~w%)qM!QJ z5U}KjHw}zSJ}jgbPdQ>o#eHzu`H!{^O; z)dPmE>EJa-rmbi3()csnnyUqBfGJoDH+9Z0j3NLzU+-Pc&o1o&0cBVKkw{x&H+1FH zw_N@QXe+tsW#dnS2~pX*ie5G7?45J-Uu=b3*nIw9Y30cPJDgCiB>FYZ)J1=o%-Jjf zt$YR#37wu?HW?%GMj;0Q)QmyEeql95+K>D}zK`D)FL}~Gn~om5VFv%I|K{BJ)&qS6 zICR5BZQm{X+Szw=9pDnr(hDPER1DRZcWN3G;EoHF1Un#sH^8p*`?_d2Fea?>sX?Ib z7MO<`z_4X-L0!4xlYoW2Ff6ln9EI*zMy0`!+jg<%i?o#}#Y$u_E4f_w>sh&&yyKgC zBM?1`uP28Cn+wg(P{^#5E?&0^88|jv`nMZ-hu#O;OP>65)0G!Ly^PG~{OdhB=g-3) z*gUka?Z5WmbndqvZ5x;N+h0Vuv$&8LPwREpmnbQC1ieCvcwcc8lRCf#fJu&OhZNzn zd`G?_-e&Bn9tD=hN08NC2}Yt=Ec{A$IWEXMZ=9v5(WIiYT=#^glca?apOm*~mDdEw z*@kRuOcD1~D-EG`T|j;k0&w`0-{acp?GG%Te%(KwZoT@eQy1;Y&6~Lg&hH*LboG&T z;uJt+dMl7R)4TK+9t9tl`K}10unANG=6XXXoPh`xSs|ps@*)pTGYH7uL0vj6K#LWP zGXQ8)Qa6noDyheLOEJ}v%W45edF#|gQxS)$y!}RoDN#I#iPI$v7!%X!9Nk`G9Y;$GSM#N`w&TQ@2p_Rt?)T~3f?$`!O;W~&fX`)qr-@w=0!4u$CkulE z1yusDvzsrw{w_ejnlC3H4;~Ti0;LPdoYyN9Jir6Y~ zR_+;W(#S68F5^I&Q^bvpix#_k4^4;n@s{Q5|1;H-!dcmQJNLl(-UB^c_g!|7aQ7Q} zEdRYwmpFDbSUvU&0s=6>1-^lrSMbee)KE@xARtYYEgumkpHl_r@_;zCUDiRQE(F%E z18X2$8C_x)d6bWFphlfCUOee%b(@KNfp}>Pat#jf;5Pa2u7h09t&0k6Q5?FwJYsWV zq1p)H(rK4_{!h97N86G4mY>}=rwg_$U&uNL}a8b-45S%WpOC`DW(^Ykz z0KBNNlG}Z1k(&)G2Nxt-a8wZArLJp>M(E=rBjlLy(#2x&v3BvHqwNXTeNB<0HQ9MH z_rL|!1KwieHMm^(_W~d|$ZQ$Zb#wxf+yekDfWlB0Lu}!c-#sgcd^=DcKO!5XWG^~v z&?w2Gk6VmtS5KY5BmS2^6bs&|@5HKCE(+il>LpOz z>akMIQEt;@Mx9An?Nv#`H}b6ihuW<-{cykVC#_c()4ZK~;Qa4_9j83FtKaP+9-ICU zPx`fX-4!qB9z|K@=k44B7hn$*zJvucx&AZb7e0gy5)H{_rQ7H0|l7G zJr}eB4dXwtA29c2JKydT#e!mhw=f)#cDOt5XXa0%OIc>xV06^=K_b<~lYvHrO{;4F zsL0bpj63mB&NZ-WVRd?tI!PVPy;Wn9FKX3CPp?N|++PZIc`kl<9W;=JA2lVLt%cKV zAN1>vy`)#DbWU>*T(~{pMA{A*+h#^Q3;vXH`W|=}>Kz(Z1Az$T+&^Cs>dX4{L=Z1% z9R%tWAu9=17^A0LBNVObYXy*5Sm2Gvf4fJyDA@C=pgx)$bZVH8)e zyjTB8L4tz<003XYSXxqm3#^t!a5v8ByNKmv83>q6^Q@q!7hPnz3r*G3#IxklZJ7&B3;NE;(VP6BB4kf9Vc4^y`vmP@NQnl1hiNB3@RomHn zq+Naat2re(i157px4-6eVfVmdcNf_6BAd;_3tnbrtPdE{uz^I|D7ngoK!M^lfPUQ| z9IF{$39wfKK?YU~t_*2mXEYS&gUSP|Q)9~~0 zfsLDv-I`_vgJ|jd4iN|dp81_oAhYq_+G&9D4ko1KDBz987)Z}CHbkG$^%{U$Q;#u0 zFCfDmMvWmBlsjG5DqTg9!-Hgt%|glQxc@lgjP8J;n&=5vzFAnBqqEcvwy>(>;;en%RY-yosED258_dASR+z#T zqyTb~e6#$}t++yfU{4~PrX&L>X- z6VR6j@A@@>!ch=E&hLd&(9!q7S~N&TKBxezjwKd>o;EBiCmsuXfux{RB{jM3#@B)K zEjzy;d_1**3DzzGmZnDZcz7XfQx6SN|ruF$8A;fJ*DtL{d?k+fz)UrQk9JUFW*b3`W z`sR_vMMuAC+S<$sLsvZS<{r54dtm#X2itT6oN*0cV5wTQ0&JB7Bw)c3KLZ8SE|48W zCwh6s51>P*gbWQ?Pe`yvxjY}hzP@-g@g!hXK^SPofldrX=ED5oDWH}^N_pXM=d;Cn> zz30)z#u4Y>TBQfBR2Pfu=Ach@=3N2ok1`+DJ5^GD~lGv zI2H+HSpgIb3#l16wAlgN5nMbDLaI|y4Fb`K;+o3Y#TuJoRtA}COv;)A-l7d|m0=WZhF?L3wlBh9r{@LeAtWiZbz5vUpVIC~9@7 z@Aw4ltOk;|;w^ibwJRFOniVy5k!KbU=etz?R=~{c^9>>KDXV z#jkEhEdle8jizvxyn2eIejTOi9g?=&7N`DOTX9jp;C~LDlk$kMS{cA0BE@bU`~d@-*TxBtu%?(@pfTRS;pKsXw*f(0`sWK zUZ96vKo4+h6l{7i&>35888G6Eiff=TC*a-jF$wdoSJ^bQE*?7lqkm~5YWxu-?vtW? zYm-v}(omGbyqSC8LhFHmg@8V{+s@v3FY!!_@7Ami8fqdHa6%zq1~Pu#CxKspA1DAm z)WH{s^}%56odN?ZqD)A-aW!5AcF={fIi3SZZpid*%>p3y90gXD(joL`2OL?@zp9Sv z+GKeU6RON$g1uGaMJKKTr2qm>vEn1bg$)X>&imjHC{uw-F_V2g9T+e%I8?uQ zdhbOs`O(h;>ngl}Woiteq=XXaVyP`m4upSN=lT$nv@?*50{_FL|ori0*bmmA_j zam=C&1l%JKt^5goaokr4_43dq%?Z=N!@c|w%C!LTXIZ+46Y1fBTYcoS+{QLTL%s~8 z9hpnQOrQC$RkkR{^s-Y2vPi zf#6XfmA;`=AVwLd0A+P$EMJyr@e`bA*g%sp@+_do~Msds*`O*eb~zaw^QhBo2@nhvzIvw##FQVz_EB%+|~ z3U`rArE6-)&cpq8|3p!$VGW|Xlqig;u8VI2A|?ewJ<*qH*i$mh$5Sqx8+&xd$%D9tb9;cIJH_Z#!@M zSlhUU+gtr<+qwo2=!ngNUE*Kli5Ch3j5a=X9aRNYNPM3lY`N)Pc?Fe2T3o`4!qPcL z1l4)^ZFQhI;1+_lh$auuipK1W6g4&OQ0E{}_wUO;d83O=cS%R;ngV;3<$6Ka!3d?d zgNOZY29{}YHzUYtB<3{tz=hib!rFA^19!K*-@1P>9oYhdjsVidmiO_ioP4kV9zxqS z114Mz*NRvyt@s5GpJ0^7iWl(vc=3YY9rS1Pw4uB_u~&M!?X^>Y4)WO6fFDK&$?m1A zLVApKqQ#QY$yIXbh_IEZuuQgeb%(pY<*o(^mNyKLhY`D*TaKr@+NJfCkvTW_!1>+- z2EA9tPoHb2f92hajT;ZNX?qt`0Ia}@;Lq#~K7?A@W2{#abmJzVlmc$1_hN`__yaWc zqP*jj+jU-4tV?vELE!G%Mpo_Ig2;0Kx`^GN6QxlWQ#Gn|W#ShWtp>&9$HhP{?dREm z)XAdPgIQu!maqzRA}IwLqdX%`_~OPccLgqI_CLjoQ~L@)nON_#^KR~e3#bRq-TzQK z`;Xt%HeST@zh`|32+j)?c4Sw;54{IE(6AVI43@Mx!v`{+v`b(kqnpT^twF+?j1gA% zw6|Bc7d;K}61(^-9UYnFP0>19Yg9p-_N&%VH>N-*`t4ZsE!6j%X( zqC#CkL=+8fg$CNx(UUJR)Va;^gmza*3mwyLeNUx~<_g%rKWu}|3r13=h^?WO3PnS0=T?*Z^2Q1_0X zZl`|fU9CN3Kd0`-w$YsADqJoSD|PWewD*9Iw8#@BqD>~VsTUlokFvhT4+9&K<9|NI z9ctfnz*5WeJZl&4GN#Dx3|;%WLr@O56e)T+DOEd;8wFy;9Cut66mLlupAA{$;@-Fb zIONn3KlI2Z@wYLZ%V@HD?w+_^ntBW7-P{8gLJx>R(up^}tL^-o_i^=~^MBq3yu8pC z$an0pD)7uaSP3+xvs~~3p=))qCf)mLp$Qi2itc>ur``;tY<)sv@`V>2%fSaYAq&mP zoEf?Un|%!k0gYBCxp5m$BP&5oknm*_?yA#c+YB+Q6;}r71N%XG1`+ep{kZGp3?{a33`QFhFHC@G z`^>-N7nHY)d*04HaKZFIaM;eg=R@u64|4JEMqdBDy#pqsJ5P!SXW*LMEAFl9GrX$- zJ^`+Sg-`T%UTHmY?G2KvhBU~+-Zq25}7k4`0HYkWb752ve;?#ePT*Q}eBMa|mUazv^Rc?p4W*)F8 zzMwXQ8`V0jEUl{Vq;8A6YWPBsAdZ_Ck%P#i|SSxzfyIQB7!DZmI zfT-6=1?ak1hek})^1tY^3^11holz-!E3=Bo@?QrYqq{&47c~Jt4DO-Fj^agE-d{0j zi|ym@mfU@>?7W?O;JodD{@~AvfBl9wJ&wrEN?s6(-^{ecxIoS_Js08#{sM(`!Qo(# zdT`+BKnM6^z5y6SfG?55e{`0-I?w_+-wmKH7Yvt`@PL z%{_2F_CTNgPyWhpwX^?(+5eV{7SlFA0vZ5kmIf0U5jqC?xw`e@E~ABj7dZ71L@C2l zuL=uJz~7+57hIIC32;kBd0+J(1O|0>C_DnP*!9D+6lQ6hs8v8J zvlQsSM`_(Ppk`dui-PE3lTpG-spyZsNEJ0C_XU?g1C3AsMy`})_J>oj z%4)pVXIYNeSn_|$z7G~rk7Nd(oFb^B4=h6;%DrH?cIDk!I@qpR91#Zy2Z0XCu@9G= z{y8wHM;;RyRuTQ>AljvgUN11`jIK&QV@1H8x-r<8k;l(2x_NGTo5!b5yesnMEtPYc zd*D3nffGOd#>MWxecxi^szVC~0OFXLIJ16cWa79$E8Uq-_z3>N7aRrThP=>7Jv_mN zKncBYQj zXSO{1yYFug-TwC$i>Do#rtN}Eq7{IE!nL5SEL+1oAq}$0B##JG9t~19iMo!kz_jRL zkGPPaLJj1g^8xmyx`qsNS@bGG%)yeCyM9x_Co^(HovGsu+tObuOSPo9S!Qf^t|sOb z0nE$m3P8SE?x%0$3vU|N^^R2lBG~F5n~-KmakRW@VimAB_sE;clUChQ<#{{zz~{0D zj7Nfd?~xPj#6SJXMZ3D32_O^ag|C{|;Dy#N050>!IrTu6WqR-k%UHT+Ptoxtu`edo z=`BLw=E~lSd@zh|067|=+T=OEqeIyZPi**55K!iy>LI!UqLd{l$qV#Rw#ub@DXkTT zLx%MQ`f^eSBZGInKIOXDs8woh3;PTtw!WKHciGEH!gTh5e@~Sn4jXftd*J-)fs;S? zi|yS1`u1tMmf8OtU;Ih@0?gd%69-PREZ6-6tW}q#zkqZQF#P4OI|RhK^bmuEK2U^S z*s@;8bkM{mv>GT>RyrLZ#vp*5Ox9FRpS+_^LbR79d&jg21u{ttlH8S{6#GUQ9I@2- z$iyQy+D7J6rNWpBhaXL78|^R_;Zt<^E9UK5OnkH*z4cvf>!Qzx+4HA)An1o--hHlm zz^neuW@q2=?)K1&Uel&$UA$;~jm4DkuS}0{3kmcNi4GZqpR|NpN`fAAIB)j(J0KB~ z!E%>XU(OV|4rCoLz*5P_k{Iv$!&b=Dq=Qj;N`+W1vvE^sBF7&U;#Jx8Re<@lQrQ@; zeOMzK>uTurwTD$Zz1gaV5O>LhzT&U)4kPAS-fh5FsXzJSop}bo{Wz!3VGrcIf1~a4 zUH{|%!;iJ;alY!yP8z<%=j*&VAxvkYzcL z%a%59PIC`@7JI;uOLX&9-+%qOcINwjW}04p-PBH^gv>sxBUL<+uEbIzotzuzPe3k$7{Z8 zp6wAEXAEJ3yx>%Et%`M?5#>RP(1#F~s!$kGpAf04a)@v^4Z{xX6s@xaIp81eL{C{| z-j_f6STtJ7NOlEVu9eYTs3SAm!0FH1b^bRFXP3yOLG{4gw*w!8Nw>2nt#TQ`uviJ+;cV6HraVI_rPbY2l^HN z?e~4Cop|B*E~YQORGfh0@wl&+4aN>V2ZSoaCD?bJ!InG)BY)t-i+wOhOtAGqA~FGA z(O~f2KgxXWhEH856VU!aVndEqaVF{*)2{U3(n@`Z4&*kbhwo^Q@)n?@o-OdV#HAn) zuYyWwTP-~en#E-vGmnu|r$S4;z0mb_RcZ*+s$50&MwY!p#?qg*5Aree-qQ{~;jL}+ z;^&Z`PX!*+e{DmZ0`@q?y^P`*s zOs920ajWZ-veY5c^W~^?lcP-XxS?}0m5imNrH-O>f7vBc9zwHls$ zx5;~g(0?M`cJ8BpX|dS855ta$j+}Fvd*IXD0|WdYy1O0!OMk1i`yb%PJq`eV-&7@V z3|oRVGnCj1&D---knbO7cFX?iFGxbbUj;V4<=5xp4F(|A!#aY13w%@-mWMw1UGfWk zc)Dx=q-t$<`#M)Z)QSEWu+O1p}O#DS_VF^;!x+Iy8+a*ZGvU z9%In@;1C}v$iL)`XtagDcauCJR@>wL)Q{e6HFINX$0%2Y5Ag?~^&WEG&tCc{8P&7MmL{K{_aGy_{ zOkbx=&b>~SZ1+#Y?GsS1nYQo#+P3@P8)YfR$2KYCc{BIGAK3#r-zU=e9{-u2`02&z z7k~GnJ^xB389;K52YovDf+c6>#29+T9-Z&130a2|0 zir#6#XV;4zRt8MA)Me&}K5S;7$O=F(Mt~jrk}ZGs_P`yYdk?q*`2C5t3HEisS0@2A ztk4}w$HRhQ2cs*2kgf7lbnTVgI=2c)R`pEOMtLWNj*KlMrK;~89HQ2;1ryt{a|W$k z6r65o+aG%QwEN&MmX#W+!a8r}9{3}Bz>xC8`TpL+kF=Bj@CVxIzxaJqd-07GoI5+*hQ5^9kc?;R#&v-NaO&5V`7jMIr`{$0a&nGd6mXkQ zJ%K?~cfZW9eHS%(2=L&t z!7?kvAVS`@Sm<(TPX}!HWpePUp3u_BBB6D(krby|1fgaVXnagee^l)OTy)8bTnVP2YIVgMXMHP&ZtE1_Bh3u;4u_qp ziq5ajFv(n9Ra`bjiTJ5NvDtc(TWXWnhtjVG>6Kz{;UK_W&31j;{m?5GyZ8NUXMk(I zMc8|4-Yt7TJosVOUz|D9&iwSxwG%IUb=$k+y={8wG+adGfpQF{sl9ttm> z%xUfcdcaw~2j0&6KiE$GjlaD(^YwqdZ9MVVV!E8y&Yj^$X^qPzxD2>u%qQ<+woV0H zrdtP(;CF>>p2DCFS=gvsUBna9@>D7tf*RvBx=^8;#j}TI4ax5XKD80*;qP?EgQVI; z4}2OC_*`Fbv;gai2dR5tV`sbF#}me%QFBwT<#!{tj z7uLr%s%j$@$91LJ6sIVq8TgjI>-y9>G*<`62q|qDRZ(Q)BxG-nuW6v_A%3~!ac%Fe zZ(i(t@V{Yg$Nk$30{Xf1wVa!`e|CCc;KNz})TwsnwLjBNz4BWYyKngQHoffg4MyJO z=hJ;glF#1v(5l;Q(x~YHELQ*^SA9IaRwD73fR?E~4g$HrmwNNe?8~qAE(ZmesdIKi zr(hcLD1wgC071CabqKXNnXLFFoQ;M7dXr7u2034^ndu}05fdqz*^psK}S-r1J;c{ z+UI{nN>1HywX+aEvS?dRoc8Yj!M6Q>zql%?awGTQE5+kW#~ z+R4B6J?-2#ekV_r^UFOq9-F4q{0J?41e^iFUjhY@L|AB1kvjDOQb!ERete$4p3hgb z;=JmVvK(^hVcM2zf}lKl1cY&JNS6cy#;Vkp{=|NQK7zUB*cIbTc^yEY!U2NS339Z- zd;h9+&vd`|#O9f;dpD+Mw1=4DKhERzx}k9`mrv#`&}jm1tq8#3?KHs|iDIuTnxd<# zV7DwPM*;b0?3*g6%2f5SSry&FQiP0l_07S&iy>Ei5GAR7-(uRjk#B6>vDkg@a~8WF z`(aiC4uEn5S>*8Y)|M_iL-xRggb!$G0$y+QlSfhN3%<~^Isom9doO>-k313-a2N2-sK(6#mB8vB z-O;v#2+9RM>NNvL5Jp|OHaettRMk^ud94n4+A;dTIxE!`Md5WU%YaDLAMhnKM7oZM z)#-`EXmgux@Wf?Wd=zb$;rMma-bcT^?f%{?7JCo;dK7eaboCiR6?3|IJIA*% zJMX!(o&NqGXs4e2inj9;KRdOT-#$&3F!OWq4}cIh1~ov+^jhI+So(2S;Uo{r4gOTf z?owTGD4B;deSx{ z9RBiqm)zY-dEw7R!tX77wAqOs?U<7-tkzd@MlXjfn>S@#wMkXR@JcSd22a;#h4q%h zWw~1v<@!v8sccogm&zyW!e|qh$vUKCuQbxAXoelmT-o5K#rOhI+q}88Q*Up3cfO!4 zj(tztxb9oqbo43kWi0H@#mrLuoVfscV8jkVkRxv}aE`z8&Ud!$H~v!Fd+qBMdmp)X zn!fn+nRtn_Gn^tC&PEQ&$KopbEE-T0)x|ECpXH%2B2*dHo)oRG^L{ctm5xzzuRGCL zDpM8GK#W62p5IrCOnf8>ErZ#0JXH=grC0BxnV;?&w1`00Qhrwx2AIOhDkJ9;kvY4$ z*t^5r7y#bUf5B+n>*e_bhgP{^zINANrxi;?}3|jM#P4 zbUknGIde`agF%c{TtUeM6k=v{f-)K_DD(7RL`qQEd;oq=s)`F#bfIu0HsSJAolsIt z9ocsW$P>1LJ%ZGVa)zdgYl#jt4pJoTxQmX?8+A-`S${CPWo_qDqIm_N&x zjNYM6G@$9%+tKZ#?Su5=m0TZDGW0m0#h%D4`=zs_2KQs8e2ROr(&99!2r@}hg1l}O z&ysGdQXLPv&0>d~PN^Y5H@f!HB~#iP`Kqju6+68-)sEr{ZHuZ)P<)gZIewUx0XmNU z=iEJf^NBhuY2? z{(al~^*1l}{=*xm_6%nGYp(X^xp)@`%X}ZVH)2Q?nd8K9gl4K>k%xbxXKBRI0=sfr zXLyCjt-y=gl82?_i={`NL0=*r=whJL96m~QOvqRI;x7vHq+1RUs0Z#YNo0+m1^+A* zGE_)K4uxEqsPkJcP{6;1wU6!|-FW^rzwob4#$$Dyy`%k~`wvfFwSCIB2nG)LV8cj` zM#*T)q{EdPyAV34JL__nR-{4kr}wrRyN(hLf9yzJudX6gtX6l*YqR5^tbC$Z7KxoN zGV;kUtuoaD%}>)V^qc7-es*l{p>$>W#5 znA4xA2Mmz)v|e_0|3lJZo1coh>mzOF{qN^=?mcbib+2uEZ+aU)$ax#b?aJ0J;$A*) z>}~KBKn<92pjOAobAXY^^$;nVa^gO5LS%$>$uE!f1bu(U-Z=K<{z`8&VA@s^o4v6$ zt4BuNI?xd7>0P4aGR0F|>*He;-7b>_M5Ac5 zA$#s){fMWYR@qP75#eD-XuROT zQ-gLfPlbJg;QFg=`hDaMyo`%Q&nBo|(Wb-PO*laR?Yja+e|TVOZ%%*09vHYBVxLl8 zJo*T4tvJCeAI|Yy$A{bQZ@snc0{q4Mey_D(`OU?GmHqUz7c4fuj7PwIX5R~dr+N5` z!%Gc2Vkw|744Cz+qO28eDmLZs(}<9g=st`{5&cylpIU=n;H@X)+<5NGeWOi$nuwT0 zsfy!6k=Z83r6u37Oo4}eC@7?Ci8=F=tv_U<92VNl?F*Y4R>fe-jm6TUZkQJP7$e>Z zQ~RlJ_=e4`#uuF|@LI5Uwo`iU><=lPTSJQ5?$wU7QEoAeVX>br+uG^@%b}*e>hyso zMZRpv9xeenq`Msj<<0q%`ojZp_+!1r^i1+~_+Y3Sb|$^XDXo_^iE(!2Ge17)&k(ov z2&Yi|s_TJU89I5Y@bnuOi<56;jQH=`-agzp{L4IXzH_(dLOKt8l?0Q74Fy5dM^#$_4@VvAEjgP4gG&CT``Wt9t+M>C%H_& z-S!0e!(6OAeVQ-iJlOV*pKOay-q#lIe@|Py_qW^LTX>Gc_r5&whSm;WQlGD2fcD6q z<2(9ixsPx1ZkyjGNg``NCI}#S#5+9^P`wfs1c*hq$|qP#F8qWiHT7>Le*veJ;L2KK zO0uNBP5eqlr}8Q!QA#j}Rrewp1LWdwl;}`oODD9f;vI^#z+e!gd0FvuV-V6j$clrhQnkiv(_Y z7@IUIex*>XonBHYs3USIl^(Nch`m5sHe#8vTa$WE#Z)IDTYTB}Ll-47NObHdX^(Cl zUNVDLwHb!Om2&Cy8tHy)vN~8?1g`1QoxAL49Oy2o(T{248Srvl0lwI!JGATp&G9B5 zPpmYLy7*B~j@Gy#zibTtsZ)osV#|%QlA}zmN4V20YiCt&9yatyOP$Y$b(;&`N)=w^ z)B}%Y!)5Sm*Jdu;8=fko(Z%LUPJc>=VSu43CR95;^_oGcXRIN6ar!K?H8b~g`Z#0m zy?g=ZUVx8VsrgZ_%E~L0EB;dO!MxpU1j`q5( zBh%OHoUH2r)x2`7^4%9bUdxu2_z#<$#ZV)ikrC<&G?cwNuZOmy>t1CwY0!@v6_6mT z>j=M=NB$b+ly?cq0iUl0GvjDI9LQlwA47Bh=i??Sn=j zF3th6Q|LLtij9{=XfQIc;2c)dNcXmBlt%Bbt*(1#5BVH;hs zIrN0jD?6UuNtj~;b{#k&keD#L5@N1#0&%9+I^gXd`g~Tnk6Z6@|d^l#L$KvLaBp(+~zX^85BI^B-LSi!(e53+Fp0XTVDIE zF8{yrwXfaHZNT>0Fsl6jYCDUs!6~xU%p5eUwHRtSt*3FmJhrmej$TAWyC!7uC=8v+ zHl&I&SuIjdcpww-r@A)9s>D*Cv0*P1!Mz^E7Fk@YJcQ(69{ZB%+|dtfR3Q|%x@>8% z2}5)9WsZ+f=JyEDm*xo+4KH{@?BvBl%KWP-poU^sm7&^|+sSi2$Da1eAr_NtuOLbr zsgbS^Wcg3Gh7-PYoeMko^RQ=WC^gRV`Zn|mbSbupw^93y6q2Qc0~DLK3VyZ@3{@XM zBU8LNRGglA+z{fk4tVv1FZI=<@To7oyWA@oowSFH+VF4kl)y_;o{`CtO&yo?qfO{D z{U}FXSB71C(<7>W6{r7~1ZYy>Nws|DayYv^c#G`N-&47mHtSBOd#<13-0fG7g?9+L zuPG!3Q-p#CW|tcj<{v+#cdvbVumB!@tLV)fLGmtvvN9Y+SitOebMnV?`XGfZMAn(*w0ZxDb#Xg8O%A1YFJB&NXj~fx5&f;w^34^ zSpxQYj=14q?+SKEovvU{O80De60uPm%~~)GKFi6wAz#PAZE@Kroma=g-FyO z(QuF>Hfw3GjQ~wRvcIyc{?OC~zzW!SW`49sJ^B(Gz0LsuowZ6ZuRI;7oN*xtYmh)# zTiEF`#T)79ShiOk@z-Xm!vj*Z=vej_`m9l>8QTJT^oG!FNzTj&&ywC{)dekf!q;{4 z3uN>F06+jqL_t(ZH&ItQlPOySw>Ir17R6z!P08qb`nv1ZHU3qQ2CbFjcUn+Rgr~qN z_nMrgw9{s$Z{6BIa%ExU0H6t5-2onb_+k(G-}#l7&rqN?qemn?`WTwd>~8M9@XBBN znS0<%k2-zDA9n}8uzi5t8@vWavfEV`ZF*BFerPhEFsP~;wd7e26j};DM(nBIy(;c&aRpjyG_wv>PINRMAwk)n^JE5(4jYISeA#ErMsjQ%_p2OQSNu9 z(XJHN{T+Hk>wc0ii(S|{doV|kJY~&QyY;MlRCG9PWgIF6@|s3{1|%*%kABda0&4?R zJW+0Zy1c-$PO>@n_LhC=q*xhW2_pDrd3;E z%!Fu)P77?XCuDmRy;4P7 zM}}N%u%ucXg7lVSzxFftR%2?L0YE2N802(-{2Tk=7boeT1d{DCpyFfKKoyb(L>!JS zX?7{2JKVrBwZ*80)R%yz(r3GqO1koETl81z^2<`ZK}Y_(j$)3lp_EQov^pfSx5lBe z1g*6(Y)D<+?yLHu%EAYld}*P^l`xUp`^lYMOA8qPkHY)IX9_S9T{0homujBccoOivRv!hUX@+d zlSKe0k|Ns`K&o8TSJ8Z@rXx#GN*#)!w0O!J^7Kv`ppmdpvir!}g`lJIy$sQA$t-4r zhI@)DSB+eC)l%)U1F)$sKp#soq&4w03OEp^&|%d{>_}0z=om8-o-lMBIww`R__=gw z>2v9kDRo^RC0=UAIxPbPkwt_<(AC|&J)Vwgi(kI|b}j;y{#pU3m9EhW4`=jO zk9D2W$`{+fKej7)%4TGSinVQR?pd6PDWj{M-m(U+>|K|;GlK+#J>Cro6HM_ zQ3$PiFuG(QG2?XKWtCQRY$a2EWJc%}N|7jaL**9}S!DEU=qVM&n7k@RChEF>s0zfb z;{&xTvsg#6SH(7)A((Ph_Sru9=_Q_ynSPRSH9J5J;I#Gf$2Qm+T=H05-ne6b;xWvygY4X)CwDwhT_Sd_zi zTiAZrC2#xb_b*=a8p7%|!wJHAJ$*y<1mZvC;8y(?>q{;y_rukXmqt6waITo`upF+X zuPIYPLDdYc>6&!^QkPYkx!_D|wQDbQZCy8%Qc}^O?!nQO>zmd*!Rq}MS>^bsb8I7# z5>%5sr0{qyT?LP^B=uJ1STU5XR1H~0JcQ9&~~?9{XpdA(Q(O!DJ|qN-xE5t=dragDd-?heCBm z#ZMPi_h|1>1BJ9a;%Y%j%6J+6c(BwgEw-$~OWRUCsrvL3EU5QCjBsg9hm`D=ZBGcXlryKJ}7E7U5D}ir@XU|)iu4!`um*IM_wKc46P*zeAb zbv&xkpO^m^!QVL=U3~2Dzph@*-3-q6nOG?`aO#9?JV6*U?yUC#f{Me)X=U9=I|syJG4>J5 zd9q(TjW=%0xi*^*Dkwq@ZK;dT(e4{n(h;|!L#6KxX-KBOvc{`2Xzf-xnMAUh`tgyH zlS?gq)19#9f!;2gg7qPi*q5OFR-UnrZ3c1>D;&=w+H8@nI=yg8Wn$`8`KD`QxwsS+ zDs7C$PS`8LBgSRp)NhQcga~D$;Mb{4VU;@X|ee2U^^)iW_^Zt@pwj_i^<7u(;9imwAIk)=$tRsTP7w! z<0ol$70Zc*uj{i|O$ZM@+RL9pFoKzw$WY0bE53O54F~vee$`4G))p?G_w(@8ZCeXc8c!gUTdA0 zj@U|}RTp4tZ6?CCI@xKPaq{eE?ETHSIW=}Z z(oefY+z{)AZY4AEu36*4NSc@v4}`_r;Wgwl9*6*H7hmy_Pp9QVpPa@6e0%|*oZeI9 zsYgPf!5NM-uJCuEdDW-C<5j=zhks&g=cYXR4&cCtf|AyoXXpR))^A)q%m=b~{@~Wr zg0JWsM5@!TWK*{S+atmVPEqSrrXh-w&5WKRHtOJlZSU30CYM?u)>713$EWE`7Co1x z=jh`Usf{U9&B-A%;U;x%^^Gzk=jJ>0u}nOsH)CD?_;NFD|3GG}JriQE)p(46|a6nX(s)pbP_2a`N8IVW9@!=u!vYACMZZ<5)FRq!Wfdwcpg6T*=~IZuL2S+mG4>W=2y2PE2uv zIH73JE7Rhr-(`k0yRI|KsN4Z!>Ita)<;u%LG(jL&!GL*};Pd{xOJE$DZ`p=Oc0P;6 z3e+ZmnFZ=1qODEz`mfJm*^@FeZ1|ZhNY1%{c(I0)O@TWH%=zf*`3JAv;+?(6DUaCz z{L4VxU%B&(5C4(i9z6Ilcwg5@7>=yI93zYFDL_v3B+Ia;U+4#2toczk4{gOJXRV0? zwIi4|l8qGm#vod{ZG_~P^`wq3n~B?2OE_eta+0>L$OShnLPTPiTE}Wx;g0z2#iABX zMCsX**{6j_9YwqkYB=j6p2qni$a$g&s_x=9x24skji&_fBqU}dEKSm%DP}ts(Qp`q z6}vORMZ7Lq3$*y!Z4Cmei|q*e6P0utTfFH$L=(prPShu&_#WyNN3~@j^30#c8V9B% zbn5Jvr3vat2v9UOsk-R9OuaV50-JO+44BMQ@AVq7?-t~SIXrdKl@RN=f&hh!mfLp7 zc#_6Ogx@?eXAI3(3&D{V&(#a}*RU2Idu$R1qP_+o-z`2;$=|YaKmXc$-})0jcX7Dy ziXZ(oj(vH|2C!EW+CMnlB;EvKFvLN@xe3{%R8FP)5>R7a;;lkowVNWLlRt${!CBr; z+67x@ZM`a<+O^H#>7qI(u3V-OtnlSR{=`yrHKKOD5vD+6G-V;qiH$RC#$6bQb{1h* zLmYshL=$*gG;74s8jr#K;IjFVrpzLMr9Akjov&2yz<hTx8(KLqI5paCvv&9Y94$U*U^x__I0z@f<4&*~YG_XbDZ(pU?eg@OO z%E)z9#y-rb(@==#*fZTdyRd=lSANfcv1F8qBOK}l$29*t4D82_w+{bCzmHcQZv!9> zzAWI69{$7O?C_f7-Tt*OwN;|EVa0e)17fs_O*`sLU-ckw5NnC^Te63{8(OXu5mVO!#gL1{ecSR5F8qVu@fNmjKL9!|0G z5Y_6@XjLc7Vr*>qC7Ps2MkyqdB%Mmiks4XzF*Tana1hccm-hB&SimRNvW5fvt~=<1 z*QR-B*i3#E$oV9v>H?IIc^n&ZZ@z#2{Z}T-SbGq#Ykc`eJ z1Nr*Uf5<*!SNSgSm5lZ=jFpuFoim&5Bt&fJFsV4ZvU!+H4QMzY{HpVmX zDz#56O{$zqgdy1?-)zgNy7Z|P>msfpX4vMgLt1&HT6{)6k?Ako;Y-NXY|_q2jkgU; zgtYGCZXBIi(l|XdK&wA{rY|+)Q zPU1>SO1L;rGqQxCKfOYd?n<$tf{s2M9)>-z@iSzXTZ6;EI5!Tkjd#njGoxWiM&j<5fhbgzMzjT<~xMX)GohLmr+ZGn=LY3SAq}x-(D_;-uG6V*$@w zeu>RC_jJWrwLZM^(C%A?$h`bP=K#_I>`d}>JcIW~j`!bxc5#~*|4v<8wcDJH-w{23 z_u;k2>xY+I@I4K{xZ~*f@+w30>7(|En6tf3zmsvpQ|XLq_yO8#0iG@pwZjw6EQkeI zyqDV8>nHh%Vtj_26qz@Ev27y3SlMjGf0ZVWjyA-Es-3#%%ac}aw9E=Ewf0S{{v3St zsi)7?Z|&j$U?Yzm)~*+uylW7-u>>=I>r+4A@$GD;WgYwS8IL^Ec436WXMIi&ZPrv- zHsY}(>c*kZ;TikkFSjyd&#-&VF`34%4f61lgw?)$F6J>Zdty8mIgC3__~?dlb;M9E zo&K<~#INyF^eY#oai(f3KejTS7^zpPxvUzixA5xSz=ZHeI8g>8xZFiXmsqqOyYPh> z83>J-&{@pwTe?fnT;2Y$2K!^~`O_VJ0|ivxd} zdhzZTy!ofTiO^Pd6ZNAHx4i?{K(FfCgwVcx_XNO>IWqaf6X=^s!?oDzTDRJsO&8Dx zMM?r)hfJulWcp|n4+}8oZQ0Rw$IIkX*Ho3%!8E4559vT@PpY)`unkI{l>atXhiWboG}+??(C!IMjwvJ5+27E7SXSRz`K)4ihX5Re(A ztkPv(+B!NVGurr#;m)T6y`c?BUh>J0c(`k8iq-j6AB91z21o#OsnpZ2_7A#Yh@WCZ zG=9v(wBd1`a|o02;B!Y{!fdnLowcl8VJ1a?JTeCoH8Rf5ZeZLY^4z~O3{fr%W8`H4 z*T)~`aPBAn^!s=P%;Oi`JES5m-gWqy!`;WPIp@nlc#FY(>tq|mV|h9qhT<`p5=&xt z!!{V(>pgK}XaswHtiX6ojB^$ds^KYOgi(+&(mb=aVASE+78Grg%SdDj7>fh6Qk{G- z1p3_%F+=LyL5W2wEJ z9Ij+lIX2+1+I$2{SDN`$f~h>Y&A0~vgYm@&0$u8Ta$3Pq=&Rm5)5Roklp1=)7qKhl zRc61m=G5LGqwU6FACQh#ecFzcRmV$2h9^6WcNs*GVL*{T_l-y-L!%MA?UhYEa^@~T zoAjQKAV!w^F0sx8{;A=Szxq48<=)?S@5_$7>W`6gGL+Ijx_tcI!9=bK8qit%{C0h%_PxX3pgif7X%nLpheBO zu{H!<89#4z`^lWof^`q^SJ{poV8+9Vsh=W`)Xh#GYKM)n02x=xMIUP&{))C7cMvh!VLAPZ4 z&^(g*l+*{mJY19ZDd!E4#V@xWgQH<~H|7a0iBO?a8h}}^Y^7eudC?AH9~w(e9I4CZ z54q%3eUJuVUh^~|P;lMKo>h<@~TLvN>b*WF|M@|2ekU4x4P2NaLyoK((N5p(M9TbVaJ2K z$zeq%D;!K`YK>>}kC5Ly>USJ~&6Op3F&jwsQl^Hj0uRgtU2OtnVbhk92vVE2tYQ** zVn~b*v53YfBej%tsMSy?uBwbq9s_`}^E+bO%J*>@@FtScK!x$Bj`Nm%X<+fVmyXl; zjIAMyB>o)^5yH4vZNrC$wz1mcMN-|%?CwoIOBi5<3nH_Q5!Qq zxU)r+Z0on4;ZG2@>{g89H~IvgAj(_P#^ofG##n$joFR+ES2_4itRhI#EPU6p_inU}F(hd8pu_c{w zPA>`dsis@jfol?R+sZ-}4i^>elz>(vtR1!yabiZ};RMOF+!zvCoD@;t7=-xb!ZwI> zWw>&hdLqt{#!zXeLiFXTPeRcLYTMRH{6-a7DS9I(5g1?EanCnL32Gt}-z!!;a!?IB zHvGWLsV-xuS1QOIG!eRvO=DOc&nyEBRq?=LHW3Uiq$upeW?I_#Nk{Evd`J;Dl5Iu9 z4R8u2CY3Lnb*2yE#`!wiOdKi$5MP@#H;=6>wqWe3kHN3A37RCui1fFcxaa^+QcQUI zSyrq52n!VJF8=rkrx!l4pMb-TL9R{d~z7P7Zr zL#&-0nZ0`BSMLzScGcs{KF`;6x4pk=*C+D$mY1|+@tC^`dz?*CZt*}awTa5v7a1Ni zeax%AAy53pu!gzuUE-?X7R)Sxln6$lnwf5pU>8XO@=w+@Se3p#Mby zb{4-a($DV|Uidrb4}OmCz4uK&^HM@!*Rbnb)OGbZ$4}@EKwFbZuvhs@!H;nD`J0DF z;(?Dd8=$(K&z1O`S15#K0+NIk&FI7}o2ByX)VhR^P=%F^Yg#9MU5(u`r!8!+p?;ZX z^QTb=mUS!v^IK8lDnlj2&l1@qFtVTsqUXdxTUkawi>An+!-E&tilu7oG&fZ36MT43 z0Lg0ysYU@u~6C8oV=rXH&3s>$1ZY2$@>>&jD7QGeC-Efjsy7lGCQ; zM*w;U;0}L0Ji-^Me?PwSwqIjN51#Pw32y*0;pkTWmDr08{J-VH_wf&QE&lP)^pRG( zX=ZsiBP1&}wWlHeS6b*3-5j4+TYKCx2DUG5Gxk0ZJ^EJ#*Z7NIt7gAGPOai>=i?DPZi4 zKXc09jeePMg)%T>XdqC9ltXH@51apAoGY8D(Y}Hb4 z*(6)-Uk#{}Ytt=g)|n6?uE1%Q`5T=*9OHuCNyG0&8{3rfe@ETppH_+R;1RsEd zIRkNOr?yEKc%64w!@TGwdN?7b);XZqb{5`XoVO{N2-WMy0dlTqz60nmoOq~Zd}_>b z#bR}O6W@>Oiwql7-8A$Qk9&LjwSiI4_S<`v$&=Vb>`BpWebzSil2gA#X8TmOML!rX zA3Cs~Cy(Mo#9618GHY`dLv%JlnGJ}n@gtvxo>x>cL{w&uI-G!3Tnnp%+BPoH^2w@= zy0ksWSb@%OQ#4wN(rC_N$xrIZw?zB~(td1Y1_;OMn`g0M)hafVmk5`~=`KwPGM3yi zKo?Z@2Wa}LFEf^E&B4s#cTs0yXYQ(|1z~Vpb_Fp&z<8EMJ@bgjM3;$Kpd#>NQ z_WfHwKFP`_y#d%kLda7AUIF;)2makUGT&gKb4`Aa_PS}yaGJ{Ld0?k{XV(O-82cC| znQF6u${HA;=*GrWXY_0v%@iXGxmQN#!)!2xi{%%&2A-Fl=QQLJ%!70F+Q75yf~-%l ziDJW@q8e&@C0C=3&}7E99O13cp!BYZF(wi#v=)Pv#%3+F<6t$M)QH&#{ zrp=e8x&urH;sk697geePIVPgC)6@rL8;NBT=chR4)4%B>A%%ohngBdt)))H>WDVT( z#n%Pu7o->U*cq}Nckz28(Lh}M^yHkEFQS8(ef{Dp9zSw8zxnr$Z~dv?_;{c9PiG$I z@JVj~@{pK(XTb4G53l1&{at=@5NUCDs~eim)NSzX9Bq}`f$U7Z=wR$1@(xSSL#gdH zAjK%!To&fwG_6%e-`t;gtff`Hcym%m8X0wOr#B8&$mEu6}m0;d}S4`WJ{;1k!zua60{95ndd@h#p0>#ZKAe;Zc2xIrD=aJ5U= z8>gMmz#4kEHQRSmzNL$i0SQfty|ihekS+o4FUVAF0!K>|t2C3O!A0O^nNoFf16ZMw zJUpy9sO#xf7#D4!Wdh%Um=OG2z<5Ce14jJ~An(HHBOHtMbo;IiK243U5x6$;vH+1g zqH@(b_E|edi7r^QrYe^#ZH*2|UK^0-EU)@sT>O)J-u#AlW%1wUZ~YV96CAcKJ^}7A zYP&~g(us?A9De$6_u*?V9`;+s`IqCXYglD&xVRm(k$Xxj!y=|#RF*D}e$|7JgGHGa zTp(DwlZ{CYRni58jqr)_m2MDAnwpDg`A%$W#662x517&?2RZE z{Mhx%}F)*gBI!lkTw`V?J#j9g^ia6{#FL7y8h-cv_}t@X{<@;TFvDdwaCfDh{N z=@4?s%F_gUaq{m}G?tmFoNA{Jt6L26bUIIeV~4Fppm@h+Vy?XXt(}hBZoa8gGMdgY zYP!zYQAq>5?Z`c8q7(bC@$faW2|OBIk-GRrFdXs#z2e7xIrk5I96fJa&cNP{_zm|w`1-%v zfS>&FN!jlp;qsUDgY0U64aaah*$*Qbx6YJ31Sh>?L$yJV44-SuBl2;Bu& zsoiQho=bU&F*FcFs3T(~KdDeXJ-<&Uycg$xr3y%V2F|+fEM2ouAw2Gdz}OR zXZ9L=pmXLrW5J#CVn2%?GiH>WhcmW@>(qbg{Ob94*q21KI`t&ZPkIB;mqF$OLSK4# zA07KNxBleDR35N{$h(BrYT$dHj6%x(#O8OkjkYzKQfd> zS-9gHA162a>I4<`92P9;U*d4I;V^<(U3Iy{6A~Ah(R`JsL&I^ce0HJ*uoTeKtNQ>mLhMm;z2ulpw;V=PHaP>^(bNP)@H4 z!ORL&X$PHf=AfWL^@~qgVhg3v_Fo4)9>Y>6M%I34VZs1!+)S#dp5ofd@V?&-=A~(&Z^_0D3*Xg#Rb}_QSQ~m+;o$ffohu zHYav`br9(!%C2c+b1Q2g?RHGC@4y$9;~F7!%Un!x!Ef>t@!}cDAQmgBm`x6-+F$n2OE&w0@B>dV4QaHmZJQ`g?e zvpG;V-WXb+1rJY*Nox9}|8RTY9wE*%{&DJ;c1DDnB)EX}lC2(>_{@gjlQups9IP(_ z!gGF|WWD_EH{Ji13;(^>lYHK9c&j|+4L~AZ47`~?82XaKE6zW1_`bsp-X-Ak0c+fv zfy|y%W3wXY?Q&bBBgu7II8{44+7f{^X$VL?qdNx9XWB7d#KC5?A~AnHGDwx^Ob%Zk z2=DT6qG)ZRsTD`5jN7xq`prIHPK7!fTv`UWgbIuux1hA)$zJ*FA6kAqV~~?I?IlQ` zsVed}eM%74g9>t5nRwW3loN-T*b8W*f>3(UqGv)IuVRsov8Rb|7}Qf0V2?6{(xyzS ztn$}3I9rM+rc)=4su7exa!AaS{!Rw%v?&<#e$%raD>A0rIq6$Cz}LRgaa1 zK3R8j=<|CK5%)^nE-E2C{IQPMe*QAfbcZ0j1p9}J-Yq?^?lbf*cy|ZP-0F1|D7I1| z+}s}@&&tVDIh)3(rR*mrFADx!?gakK;Uj)t@OZ6hxQ!dU zJ15Kti9HqT&N0m00XU{Dsy2 z;8rEf2!qaxdSi=hl+s9cgNu`93DQtnJ*CWKMZ!K>Udp_mo8|O)MI~1=>m~= z3B~T35ziz@IuvNI9@B>YF|w%EL|%U3Vp!`=n}D`{g`=TT-RT`E`<~FKSCwhMqKoZ@ zfp=R7)ZoEoF!=}i zU21DLGWe`x>Vo1b3wb%JQ8HLR;q<`bPd}(I@WD$GU&^Sak8Tq3V`5@b4^02UMM~Gp zJy2xHk6Y<%zkbs1`~_g&@{x=4?}kM~|H@C^r=>h?8-US}$NYm)|6btmTNht{_)Y%F z=ym@!5#JZ63=L7^;Iw90s#_^8|Lp?20gJL+q%6U(|m6i+T8ukPg> z^YJw;sT0AF^~4dX)*0-rt}OT{GcyGR*qEe+Z;J7#&9sGwK!B-Vm^sg?5L8w zN!9EqPL`INoFf6Ra_cd5JVaGXw>BY+g;CkqcaO%z8cs(fqatmlhGOmdf}i2ZtIqoJ z)wRgA!TxTSh`w3~F86WR%s!jQ?3B+O954H*Ulw$j-8{S}h#ew1@z;Acu-@?I_5#^W z4DZ3m+dg{ZuD|h_Z+g>*4OXA&(9?8yS~q~CwEtM->hUWMALQl1ujS*y@8vatYb4Z7 zfcPo&E@uv2b;*JfbfBnJIj6uc+hCQcKKN24)ydxQ=}O9~bKJbrqK>MPY!W-=s?Ir~ zEm;H9M`8#^b(uhkdfLmg82dRs8A690d!OS?2#tkfi_?eVq*NGo1$0%A6+DBG&@)B*rD}%E?%gR&yi(pyACObxh zNgKp^!Oi}u@tD3+*EANL2jfUwAWsvjn)-4wb;)dJ zS&Sb`Xf@Bl9=Y%%@M9eo`>;A8e7F)L^5iIn6Fq{g!7W}%5@EPxC|sGu=|FugRq!0- zAPkgP$ur*DGC-r-tcoz)+UBg0Ka+xBFvRQFD>0-xNIlquB$pvPrlj9Xx?ZI}aS(ue zNV{MJ&4B|8T{7V1(qv7;s-cfI(HMtuh9-20g&NX^rhS@v)KN$b3_D-3mm~7x7+*gE z>{9@49O7L5ZUl14>qgQAf4U>U5e7HG-V5J*Sww&9_|~`PW4^chuRc0`s^wF%0T>jW z=qB*xhyTqL?`wEc@UGkm_;f(M38Rn-)0g_Cw&Q5p%q`krc4NKiP-lEVY~zv|wiz}} z!yznnZ-v8$U@NP-&ZE#qUy4^<=8`I#@b%{2Ud~+cy|GL17{`8bifeHqkN}JX$To`l zXv>WXkF#N^8A5%wC)&o+Bhb!N8-`%1+M1oARhLVgb9!lim$d!HL_5lo!(l`QlJi8N z-N_v>7+@vqj9Md4nwGGB>q6-%kF{QXSRuqmxREU5cG)14#E_Rh?u=wx(V9tyjh(gb z!x!p22Nz!2p)-7FeZGzw%oaOsRK2B-p@S*NL!EL*lV=ba!GzZ^q``eocso4^^Hz(+40@=gHN%}M*^@Fr=Tm|&Ag zN2J+y#2p@axAdwL&{R+5GOH<%-B{6fSix=+OLZYVcMMB2@_3}q*$L`Le?=Kf7P@@i z(obyLbd;nKVo=7@F(K4G!qsVJp!{)$LQWoAxQiegOk-%=DptI!Ke)%*$Q!++Eh08l zr8#DGpHzXwHY=;P_MP8GHhdwIL0ujRS&3zxg-t9{N8H_LVCHm4!9FyEqvs{*} ze0X#*?{V<3ro9sH2;yW8$U75U^0Cj6%eS2A9cP2%pkq2Te7<<+lI2&^7VO*%96c5{ z9F9=#1U$<^)Hx?mi3!lV2xh_~$nNFw_8VvCfBEdS_fx`2y zjDe$2tcIk2csZvwWTMw2e#R&=54*B(a;;MTv$!2)Uuy_u&QzT{c`FX3v%pZY-MEnB z!8MC4cLG$9iRl@rxAj2ei?Mn}&h+GJZ{6qpenzGv%J+QWi^t)GeCGGfH*TK)wRPM7 zbbQcf_5JbApYjbr$0V5#R#?t>Cuyu4k36S0~D;bX9G_GLoF0NIxUvn&U8?6mK|&R zQkL+>ukB8o2`n$~24*bUdR8ENWL_zPR=EO`sAa{cJMpK8YlJMtDQ;c-vavb(K>@9j z~M}S&Gv(0vRG=&y^1;e_Y+ZM>k9BG@X2vKqC(#&bBbJTo=ZlH-lRHi9@GAxMnI`<|QzBGGm6fH<7XLQw^AI%Q14Mot*HbuZcZ3 zqw>m(`#j77ab=pG@M$MQ_+NhZeOE?F|LiNvp}ftHv%fwC@gtsD9?!$0w|vYwJRUkG zv7?!@*j0>QA**vq^)DwEaTIkKJJ-2!C1X=-zfDQ5ExAlIqZ%iEdoeVVrP&jqX2~ZL zveMF|k34y^Z6x~DMLt>xKJMHg#M1W4&pGztW6mG_9u2?D^9QfL@h$&|v*4%wtv-1l zuRJ4n0L%H&w+LUEFAq5!Uwru6e7oScuqtjI?!4enh_e%#%PdEdWnwXP*ht%qanfl@ zQ|U3I7%UbGXKi1~R!bKqMIZGR;P{JlEO!*KRNRWFlP|e&>?}e$oXj@BW0&cm&2q(A z8_V*NxeQ(`c6;ceiThbjwO##P@#*zaiI=be86BsI%yrbj6I)q4rnaMsEJ6<2cfN0w znuH5Uxyb~$>Esxd7P0fu4GkM5K8ibS2#F>)1?YSYz(wv1a4YpE`#x+6wbvbQkRSc4zQf1Z zA-?0cYw??jXLJM5VKxENa34F}i_d?E-SrzTe(Ufn$Lkk7C14Y1(nwcQO^(R8BQygd zM~8dWW}vXhM1sJ9GvTpnjb<07Jp7)D*bZt;mV#l!oK_xAWGrL2z^J%7JIU&=ShS3- zSdL!3DNCP-6ri&Y7InrXccipAx8*TCSHD=O+Qk(Q^5SKq=sHxx5BpG$HYg6mhceZy z7CS>2HRY7ZYOu*@N=bVGwb^_QPGvnupqG$onD0&)bGxN~j$(xIz;k}aD6)QNf1-{g z=)IL@A&BQ;5H;lLz4g~wii%DTf%X|EX|8cx>>)Y;r;H~*=KLMBtHk$c_i^*+UlD%A z;nl~xF20Pf7=Ilv4&FghxvOLMw9McJ9|0+Hs-T$37lhN1UvdmGuLHzFFRl*98#7Uh zQNh#^hfb}(GWx)9j~{;wd+^SZ(0W#ck=|RgIYq(ROD2|J#?iK^1de?+yL#8vrKnH# z^{CCNZ5u_2LuWLmAh?FRxwWY~5+_9?H!>UPq}BAO7U!{=3cv!S*vW5f>S$;SB;o^7~h*ank{?9gj9 z@#dd+#)H^Q2Xzy@&kEzaXP-;ES%d?;@%cXkf`L=?kpe*!|MMS7jve9_7{ zW8r4OnPYDMy@>+r;`bE*{$&@(GtzW7i~nJGe(3reANt2}=|Avz8vdkLt|wd4_a|%o zblH(QK3<=xbhvoq;j8!z;Vbx_!9QfW(3xQVyf{PB1&CwUwQ09>WT`tOt2i+oddmz| z$IN!+TCBxbSvWh(I;5LzSx~JP4>K*gxMGVBtP^DxM;BA0CXW4Ad1bL}F(t~x;pNp> z6BqvJG5-m|y=~%D>*g_wRqVE?K${017?me+Ic>9eD{qYGU7%e8F17L)v$ndFXYwSU zypBNn20ld&xx=O2)VYMjY45{DMZ2r7ma_pS%1Xfba$X&}_^szpaH~&@iH8{Cd)dJ) z8t-ws*@!b7kFWzs^c)d*+1HspH*R~Yf~NzWZ(5*d@rPr2qo1^Adrh{pLC`yGlYLz! zTlnxR^7Ma$f2jR#tiI>YH@)rc`ULchzSyVF+ZFFhe%p&v$n@uK;42Rgko>P?@xOxI z^T^*5`rQKFA!HQHrW4A%Ivg323`)9z9GyoCa`0&{(dZ)2;zu8h_;s}`w-SmTCBauG zaVNCcD40geGEPoyr&nSeyDcv5#yk`rU@4(CRnBweaHOa5Oh?9*v9};FjvT{gUGFPS zgk*vNZ+=Fu0jO9?6m$f(DC$;mh^*Clb)tD8vtRbIb{@(YiCde3iIMP^h%b|IGsd|oRUHnAv(iLH%g zY+Jo?cWaA2^30N>|9j~sKJH>-OY#GEo?U&Ji$4L_J-6UzK_QN3S0P(h$xh!YeAD4i zGhpA%pA~=M;iFy+^CcsWU}u}hS+ou(cC;PV)EuVBGQ>_et~?HW?YmH2Wb8AMxo=}Z zD>-=#7rI=59ntV)L0T(5{4ix>>GG)0@f{pj)7s`9Mn(*fOl*03(zcvDqSIfmFDMd2 zb^6cM{)Bf~8sEALIMwkxSL#!KDhnodlQ$#mG*5nad3j6@#n}fl5}dw`-;y}2OrNtL z7g~Meu77#ZDISh!sn=pB$5qJd*A|xD#}Wx`Z(6KtrM<3mjRr%d_GRU>^_(&A%fz<;OpM`0>M6oWJP&BNyMrXQe)Lg>M=H>mv3&)C^+>xePA6 zZE_E37C-fM9x;N-;PN@f%pQUH4Q$Vq8Nk6=VM%_=5e#v`PTO%b`Z+;8OAmF@NZ!gXVs(+KsrJOLE~iHm z8Au%r$JSfHO4F4}=|_-pQ%^dP&>vlP0e4kt-GZ*YSgyLEquksCwaMlSxeIalWq zOxo(?1w8-hm%e!i+F5dM+O`RF_51j+O~Kyprch>w`mYIQ-#@Kxav0wSlP6NRZ z@|}J-GLgI-#izW9N}gO{7vGX&HXBKCwB1njx@NU!F?zb_bA|JBf!o`mr&(41E#)I$rWhp+@f6Swgr&6};J{6Krr7a_4 zjJ`;irv*3fzvHVAeDBq}4`1$m!1+xEn}J{?=N*G>=p9-|HrE}GYk?=;4E@wtJWlKE zIkE;U8Z0 zs%^xTJsXQ7^qeRpK2KLjbiQ@y)@NV+vkdgNU%B(}qRgj{I@KN2;xbIkhRnE3ys2lg zie$D--I>!QI1wFR&gz`pNI0iX%@L&u9I zJwi-mnPw-Ou~pjzZ)`5k#26c|Pb+rhr?`zMIw!aIa3oT)xs%N@SeWP%HSv$H^fNdY z54@85b{CaC;BOgUI#U2v@V>5{g}&mm8my9MM0ta4G(rX|UMBlbB-)WO|GcJI#y(@{ zd=T1RrQaEaSF=C%8tauxv{`L?1 z$7AKubD|iGC-7OS?Ux%>Hab+{as$*}+Kd_%Hc;w@o&~K^b!@|jF8A}Bh72J9U4FV} zFT`p~lU_9yBTw(?UlzYIev1)rdiceL?d5m|(KX_}28b`a<%)mh_|I>=?xEKkljYfd zyWc1;AL;XRuVjQ@b$Wf^?XNgod(r3L@e*Dk{1yiP>#y8%yn{bGKAfH9Ra>Vfqr+a_ z`O~4zWL3kkvd9?V)}1oB`fEgeCQlX$HVfx;>IZKk%O#;$d8o%p^j2HI|B@lXHp65hbka}TADu+5nUtV+Y5+jK?U zt0EPzKJhgAFz6X8*L<{AFpW%I?lFq=h+3Ig_|1GjntnW7W2d=}<^LfQ@4Ry5%0IjD z+PT#?lKb+gcle)6r6clOiuh5n?mtPW>XBDpd-2t)$8Th$|I*d#htFXsvtQpjJNj7y z#*f#59<{(TE7s(k=}=52lxEJ;T;a0NvWRIrWBg!HZJpyT4jIaVTv=beK(wZa=Pa7x zUwE$G+HUd8v^~WFUS@2&k=UfIAD?c_m6{u)*&Ni?moDb29+^Iv?8c!1dIp907k-J; znB-P2z)ua(y~snb)nnsg&ni?GOjVF?000I?NklIa&Wi!OvD4!)QNvmxaGITJIYC^x@NQUAgwB z5dS#_`pd4~d*##eqM=U_SVBD9?bCnizR`nX>!G^NIv4wz=(@@D>KVJ*EL%)iWGFFR zS9Px=+JMbem3DOa=$(Tq>_E;Pf_Ph(+g)r-_h>j^6ImqVXS-u?(mVU1#eY&XamcNm z3ncpVBdn3-&V~>YLu~5NoU|Y9kM&>{7Cx)R=^M439)07fUZo3nEYgF>h`BP1b{j$2 zuDXXAwO&FV4Ars18FvWzY0rY3t2&v8WrB(qKiI=3FEZK^8xnt;?<=eq$6uoU9ti(E z?>@cug+KeYUrRUgGJ&=9T>9s9>EJx4yKp)9?az&8BT#$s(|3LW7ssz=N_+#O{F1BJ zj(2&HbVE3MggMc_LS!|00nf`m7&*T*_Tgmf*;?dYtwo4)(RZHb)<1eDXcnU_)N^}& z;@b0}pBDhbwHBQY_8ZCav0?(Zo`xho{N?sP4)t$va3_Al#b>Vg*%WN4v(x549hK^c zx_w%{1|!>Pvl8sm6eRz8(9Y(gkaBv;p@UhhV%710RM;imrNxg^{S;Drd9)au9Bwd3 zcF~Yk-vt;MhUq<)M3j3bH%D&m^J!CN!jZ4uzIZ(&`v8B4^1$zY?K^(auq?Q{!ma+n zKVpmEd2;9gJx@Bb?}jsm_VK`7!S-1KWj}S}b9n>z8=0$L$CUX3K!4!MJs|zyCNJ%r z`DUZj!)v+Y?iIAN&necaim|gyeHTAAnVm?iWkZNad!`$dUg2Yxz+%^hd6~ya9M14K z>*36lV;ZwbpwmZX>WIRtc`*9YUKh%0YqN2Ohuiw->>Cg<)2}QPbjZNZ(w=(I!OB~1 zvmjOm@#bW7QM6~UswAhL)LToPP*>ZhEtMkzXD{TN8u0lDZ*1eI%bhBuNV)PuPp89dRLC?gmzqJ7vS{FKwT=cFd;}|)5KCvFzibu{aRAWqhI8QxsT*4tYA_=ICzIICW zHJeemY73NNtg#J4dB&fNy*>-1ZYwF)pG|+NBNHPrN*6wT@7s2EnCI{3`6DvFj^0=B z{g96To8kjFe+M~vC$jfkIY0g!&+C6RoOAHGJ@4UfncC}~Z}pDI^Q~8p)1S;)rw{KS z2w8Uq3(gCQ_ul-_J)h6S`*LJo%yjxZ-kbkiCeUY7|2=p3e_C8r{*9Ms?-qDv$bSpT z6+TyDJ{sBykG@wgFmp%1nFj1x&{m2aoYNR0HEwBr|B7wFU*)A&j(x2wC5vD7ce@UyrO8pFB%Wv&~ zAUy9M1!?1Q_q7|Jd&MKCeBhe?*rlr+7+11;arkv!^m{+a`c<}}_ksIwK!5($`Pt9i zJUjb^&$|D;zlm%sS@5STy>i3(9Z}5X@7UsJv=3j+;{#07-D?K>gnZ~<{jN{Dao4Ti z%MIpdG66q>=j5Nq%>4b#5ZYHhgQ@sg)bHUL+u zY+7Pd)@uk|j7G|@1lTriPo<1aeATwt+0M8KW9A0q)j78DAEBypQuC)J*YLPAXhJ3H zmLl8`Aiel?JbVo4Z-V(CW8m}l_YubXuAE=|Uu3^>##NrTgx}AnL_hFp_rLo?;ds=+ tMSuSXK5+aK_uucU{wsn$1bcaaiP$G>qQt$ll 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 V0IrXWU(o=7nzFW1r2;JMe*k_coh<+W diff --git a/twake/frontend/public/public/img/logo/32x32.png b/twake/frontend/public/public/img/logo/32x32.png index e28beb27f5c8289f97c119d3d20332d64029ceb4..415374f18515805cb174b31192d80f41947962d0 100644 GIT binary patch literal 2975 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 KpH=0uBl&N~HJiZz diff --git a/twake/frontend/public/public/img/logo/392x392.png b/twake/frontend/public/public/img/logo/392x392.png new file mode 100644 index 0000000000000000000000000000000000000000..de1b6912d61643142aa1fb13a38590d803f6a6c7 GIT binary patch literal 107628 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%0DI>^$I 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 literal 0 HcmV?d00001 diff --git a/twake/frontend/public/public/img/logo/64x64.png b/twake/frontend/public/public/img/logo/64x64.png index 6bfdf13b00d8cb1cb04344b85c1514b27fa3e4db..bf625a780d85e302bae9292c5e5854f93bb07751 100644 GIT binary patch literal 7498 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 literal 2231 zcmaJ>do&c<9^S^F2ZF`bqCur5@|+mM7z|M%3MD!&5(-1ok;o~EN|a|}LJz0p zQ9^2pR1TF$ITcdmk>_`&d;hxYu6y?S?cZyE-&%X^_3d9ghixG(xmc1ABF(fkw--j^ zAA6Rl&}WoK_X`8n$Hc~jkkS)UQyyZ%ddW^pdmBQ+H3;Fw5;7rd@jeo=pGHXU4npW@ zgeU}@zinqg2&I{0&1DDy#0JC~g#B;-pIqqw*@XCi2K?`-HAHMcwS}lHh!u!2C_;=8 z<~o9xkElGzI)Wm+gBd86@HmOTK0~;AKEv}QC`^cQAYuVx0>e-|dWGp3OitnPYZ!-v zn1XBug@q-axLk{w8B9-uUyo(p5V3-k9isCwJcg-hjE&FAK;e;!i1a)#D#Cdf`~P!R+zUH zGF-$LKv0xj%4rAaO{&gN=LZT(;A!uxe=3Xq^jxWP# z?S>@}%I?Un#^4C9J%ol2s5S__h@nx)Z^vvqj87u*D)R1PXarh*P;`Zs7sNQAa-ish z=mLl^5S)p7&#^8DB24J~is}}qdE)FX#19V~K%!2wK6p`{B}(Xcy;*MFh*1=a>)&l&U$qNg8J7G~MvU^d=}9-0~2Ii~ey zEMi*fNlrzFdgHoR8SX;{>0w4;K0{TVV=8eTEY_jgb~$y6MAgFvNjljUiOP3n#!^$t zj(Zsu`Sq`lrHx8vX*MKkDS69TvFfkQ*SN%tjJmbuVC=)`8RqV8YRDnxFSQeGjSc|} zkyhqru?xECih7$ude<0Ka)Ri2@Af#jsMVf+ta#RNxnRZ4MIjo6!gOhzo{M*@Uw>7U zK&2*Vz$jn2=|Y{rgg>e{=orJPQ{Q5~;cTsd5vdR)khmWvp&DE=x2wbS{)xYI_id~( z*|Y}9zC1Chy{3nn(~U=KxOBFM_I6Dz`hulp%F(xLQ+BtFuLxNFu57%n`($p`!^J#} zD*@l-JR^i{MT<$^_5KIq&HFixSxwoeo90uJsP&Di`l^+b;32Pt50=Qf9L-B@ShG>? zyuqycq$BcW2Ob$5NxrytU+8N}q3>bppsM)h3Q64}I=@{nOJ;aZ(4*PXPRd_Yn#Jkw z=SZ_xkN{63UjI_lq)QP6#8dl<@6Z}4i2^5OM}3#ybL3@8y7S-WoU+}JYR+X{R82O^ z>2$qqUUXGq=-ajqdW&gyYxy+iyO@u#a&Fek#ZSq>$`~9n` zLZoY4d=82xbNdZ^I&LkZ$5h1J3;W<6;PIS!&W{KNH5B~0g5$%>1>tr5@2%g|940i$ zb1jTMeZ>u1tx7(2v$UnxzU2O-#H*m(tGDSmGr0bM%I5Q7w{C_dw4G8#m`|s(pKF?20|#W zpM6-Eb+7X2WT5(B}79 ze6o5AUrv~pEjhJ)K(5^2vP1fCuZW8ob>woQX-!R<)XKihHy8Lf26$ZMISby4H5n*% z9u>3&HT|4xxZ%@0i598m41U4&g5Axdm*U;S7d=02Z{t)Hw?)}7H1&^kH%rN~H{|LO z)2p>gf$N-)>Z_1hjLz_l>guu#dU zulm@K`CypyiAAsY{H$p~t(`1w+%@xy^#P~J>g4c7cbaeP>aqC^>c%&WCwu$+Tm&uV zD}6hkM~`Z`Om~cxI!Afv+{-9ci=<{$O@H#asJ|^Oh@1Yv_wnj#%GAxF1Iyb|kKNzF znRwUKL86Ki>jPP4?CkjXl7y($IC_6>rlYfbf(mBJtrdBB-Yfl!wY9WHWzOA6lsZ}b zC9jxY*#jZCVgH}7kb9dgBoHQpZO%8{5%V{Pe`~h@ diff --git a/twake/frontend/public/public/img/logo/logo-color.svg b/twake/frontend/public/public/img/logo/logo-color.svg new file mode 100644 index 00000000..8c4da057 --- /dev/null +++ b/twake/frontend/public/public/img/logo/logo-color.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/twake/frontend/public/public/img/logo/logo-text-black.png b/twake/frontend/public/public/img/logo/logo-text-black.png new file mode 100644 index 0000000000000000000000000000000000000000..5af3c80e690a13a33dcfb2927693a265dbf0c30f GIT binary patch literal 40845 zcmX_nbzGDE_r5_JNDHVaJwl{JKtPZjF&G;i5(7qehaxB`Fg9Xz4HzXYtw^WD=#cJi zM*Mib&-3}6*K7ITx$kpb=Xzh~+@b1f3J=H_$Zp-b^*~8c7JTd09n8)5780VHch#|l zm75PzM@3ziTeoQ0{(0S20<-Sk{CV32tRQo%xbMl@%?|=gX;tZ4w@Rb#U6>Hwx|PPP zBr6T^yuEdKuflE=`ZVOY^mw2@j;Axu?gIDA_b!1sak4+7Y_f8Xv_+fs1&!552H_E6CulvRxW$|Q4w`c8PC2#hjsHZASUZ4lxaS?YrqyFGDxh zF3akVb|(yaIi4s1YLt*HQF62^Nlxfm+!)`t)4gV9d?DtZ@>BMNQ!i<|NJ+W=1wVx0`{v@%eh7`KEc_Hv9(9U9EtW^zi zo^a58Cb|ccp--8;1|kd?yoy+zaUp;_Btu3KaFuMGb!fz8aIGJNYC?6c&akp(DQOu3 zQWU8oqet9cutvDyGY~`>uFcj#<&7)N?Z8J}@;uz13cGQm!kM}sxQeI-bU-d=0P69~ zV}s~FKrtorh0M~(T9w?Nfl*&6>qLxaL}zCtt~uQUPVq~U_x}rnJKt#d82-4p_Lh*j?pTPLR>*Y*`dA9 zF_<{A?&Fa=A0FIog;%qBZ9)EcKe~6ZS4&6e*Zq-*ek*>5)JoGj{v>8`l%&-7Zry>| z%Hmu1rhw?-Pya^v&(h}@?aT6}t5$Ap5 z(!U>P9+uCygI!e-Q&Q)KC#M<1k?WBOZ33-U`qQ*-?dPX)6spE%DRX?dKdgK=~QG7-%yg({Kfi-2ho{ERr=G>Q`7Xf@2pL{(IYSK?!SR| zTnvG;WvBUWW;i4$Ezm=!NXF3?_LVY+QRuE3y&C$IAlJs1THdp!QEQ7i=g+f7+-n4e zV)e$SNwJW5APkbCs3xx-saG0Nl7Tp104tj6r{y1G0Y$)9T|d4JUKCc<>R~YzUBgES zefl8+QaXLw<10OBQ}S{mjX|{&fc$%ib(kMV&MxKkqF=5&>lT0Q0k@mN1`BHDP)N8{ zC}b%RdF)rXO0roN<+f)KJuWd&R_A|MD&9ZsH~s8?*WEEFWQ}(gA8+ruD1SCo-sRP< z(qfMeH7)wCP2)OPhL#}=MlBV2l*f%4k{0=8zZ!(Y+&$MM3{Tfthq?DRMUGMjp)FE1 z2&~r3NqZ21Fp1T)8dTVFzaT#j@dGRhWc%1Wn!?{s@1%25hL3gBRo`*=KrqF-PX(%_hmC<( zaz%I!enU1#0wHP}F5ENKh;uG)h04b@)VTbbP0cgcR)}z~it8lEP*llmB5r3o zWA-G5`9LjSv#Li^Q!cBeDdg+^Qr?%UCqo@VDTucMdR@mX`%3X`xvp#Rey}sj%Um}@ zRfPbaQ6OIJ*-3s*k#R)~C`7WPR9FD2E*rLGb)+07arSjb^kRb$8|@!|0|?O5oA)yB}Nx_LBx_# zX)6`0p3qz)AZfk_8bjApst6+=`oc!6a^r~3kUg&|SInHLXf*GQh{RIi2B4fp7~8U* z9kTqD^bwehuALKj`tnDwC%`U9IE3@}iRxMM;05*is_bPYvyJAKQ2rxqk96lyuQ;29XpH2>fizDNCBc8G?R zxnO$&?Rf0)ZU5@uewE)G^uCQ(%CWtmTeW}*=X}M;Lm)I}UYV6dQ2UzHMS#d76>tVy z;wgMw5YFE3l>$d6chZL!_N(?dl|9mk=U)(2jxBk~I*SnrBFm990|l#mm-W|F^hLc# zwAmP4xNXuKGnMikS;Y8{V=1*>V@CeKY1~q2AV+^xfu@&tjppOtSnhtnYzupV>~bNV z#GrZypB!H=3-dE}nrU8+!pn2`H@z9!!*$D(`idjwQK9O)0dT`@rRl?# zviiiN&1Op9(1=0TIm@-ixUpag4Xd-97#Mo)JOfeXKct23pHxIu&}Xv8U4O>QXAdt@ zW&V9}KAiyW)xba$IJgjj_y5FS7GL-+;SGoz5aX_`ie!1WM8~107Xi4d{ zYM6D$=lo=}M4CXRO*|G`6Jn=`ey6NXx}=O!A@?$KiLEZvQhEQ zL~xaEOdwV4l?hXv04J>{G8f+gJMFK%TZPU|PzOeA#_?bI6tRapvF%>|7y2cQ(g9aZ z*9;9b|Fseh21X7H-{r4s3ricl>+(d~dTLaJR*iER;)u-kS*rmEAxdq&4g$H=j(VK^NtgNikS>Ev+cw z0wCp{z00H!x6s>_jb1uB&pXgzdlAdCg%5|v9hD#Mu-tjqoLHybi9wWcF^F!4WIMFm zY1Z`G-g~~lE~QPWzgEq1`GVwXs|6~+OtvRBMHSoTbEmL~Nw`WsdqW)Ni;6$q;J+F! zkexl*GR`Xb{htI3ZIusQ3->>bx~hg%UL}>+dS&Tu+_G%xe6``a&4IA(0k{AcKnqa3!xYRBBqvO)sz^ht;)G zBCMTAUkyt@b$8V#NmU77;XrI0Dqg5CZojKRPs33#gSj|OD+E&WRue?uEz2BIO!_ft z1uQ)kEA9bg4@6>Qx<(PlXn9WjGfj2j2jJd%u$^I{XCOmT$tZ~+ROhFvejM-}>an+G z%s$KY&}iXo;QuNyG?HQ{e(Iod_BGXjLuzLRRez1jj%uu6XA3$q1NEWU5>fuT%o^r_ z_!GL!?&B+vX;uyA%EXEaa^}pF>MJz&ERy8~yIFJp)-GN=-g|tU3baOE;YL2kAHE0h z*7&|HmfmimH`4@02It!mH`coH-ZGLU|4r4IsooJuSgC2nm?ea58>KKgnzcD(4IS*r z8j^t7+^tn3;3_`!Ion5Id1|*DPlPXx8;E(jPF6!KxSKo}pL>0CtBdTJ3+d@rLB#W8C85=1NJE8Lfn|{@X_Zuq(zWH!OX&Fas7n zuPs>#M~8u&%Iq~f-^S*$)r?y$on_OuFY>ELeC868fCsI+RQaV`Wt(_%QTBh%0;0@R zKUsXh;&X-GhU)r1=3g>X7R|~-=Y-KGN3eKA+0fCkN$z!uQ?d6O9Cd`4{Ig zQ0pgP7OU9^H6avDm-7~R~}S%T|X9_0N1@I+Ga-Fs;q27{H2pw23Z_}iD(C$Yb~{=o7p!1`b9 z(DL^kjV4P@zt6=^|KePwV@YPjbYt+4Me`Y3Hb%PJ<*)}jzx3hX>VAazRv&602p93XbcI&AowB$>kSZuM)b}$kuaj~_p5+5ZGBD!%~uLXe3IzDn) zPv0>N;CPyBM)hl7iPH;Nuj@JM$_W78F`R8~EF8a4)pwdr(^g&Xf@V2Tk(jO^*d}%G z`(m^b*a!15_=)&GbP`1rGvuyymAo-6 zgeI=BNM4aM9d?d7+m;@85Vc;1(mTer!x>Fj8a$Xl$#yZiMKenT>RkqS>a;}-7HG73 zycMJ=$&1)N9m|O*1RB*p!IRo8vttv&Z~1xBOC+C~pTPqM8+oGKr8wTzIM?#D;#&ZR zUvk+1+tm6@DeLgk#+S;MRxCv4S5U;TnBwuhs$y^7|D{Lu@g}`~pE>9(e|b?MtJRsCKuJ+r<2NGVhkVXh^kV(D+3mK)eb>BU`rZ}QefX>+Ig zug{{euyYFz)Ju}Gqrm3wO`bI6xZTfI;49=v*YncZX}eI)V%DD!>B*}$|IlODX``*w z-Zc6SV<;iSjNVfY%%yBNx6s!{AIpm>WIp*+T3&=Z z%ze#AA*-EQ?Mtg!R@otwpb*qK-7l}Gh+O!y0zQ0k3d9lC_c$ee*^eWmE8Q=y#*A?S zx+7ifYd^bwT=ABmgusx3=$(l8YXEUSOb=Y54AuU;g%KT3{Zt&pkbIE=cahZp z`8AFaPP#3JF572=*Y?X{0bLzAF}*;@h$b2})xkkW=x{PYyw9E8U5 z&?9+?v1zL;X|iqu#teJvN{#jHFK7pfzfvK7-yJm08P`XD$yP(jo)2hgkH-Mlvfqw; zjCzCnVaIXX;eyflY*qh%o)phsMCjVeWe44M59NwTO(JQ``>u>5T8tE|#>gP2@Y_Y_ z1j$;n0_fqr+?N9v*{J}owLA}Ju}@3h9JQ=(p(%#?^qy!LxS{24qdNbV-fin~21}CfUFTEH$uCxM*tmqw!P-HeN$W;!R zGoM{aP0cPC*${1|sjT?z1KWXELk|4x-ZdV3U?wyCFNyNE2r^?zt}?WntSZ?Y_yyWY z)liOY!J0{0qJhH?79eJz_0R1=0Q2ovI=tJa-;U+=xuy4;jNUxwXhGI zk%I-;#_afgyg-A4lvW(Zs47(xzT{>HWFIxpD&QNC6RjM*pQ(gS3=%TEuBn%3&(KxQ ziC4q->CU2d7u1D@Aoo@+TOc<4KO0wm&S=)XY|wk#dA?VDecc3hX#KB6ls2pT_<2g@pM+aDVa=D5)ul-T@=Pq4e81By7u!`(VKn>-=*9i<)$}k;?O?O`#;<5f zTQ0*3(b{2~!4Pkck^ax=?7BeE|k&aAc6hW;WI;H&R*G>x08@g z`Srkh`4+0oDZWU!&5dg6=7jx`lz~Tvsv@i%qPs~BcTPkU_o<_{9B#k!6=hL<9^#?@ zy7$978)S!0nvNK6TYL%Btf~w{YS0Kk8W*iMNhERJp+i?{prZ8L+6oM<$X4)HhG+L}O6RDwn)tsGYckpC9@b7XYn&D9vK!2#`ms_qG+0VV%s zX29NAfVoAovD7cTLT|mfETme!dq-=e(UDp|5j5_!9?{25Z#r&L&2 zZ1xHVIB^IbuxJW11J{AV_is`2@R)KCeI>4WOD;;gDj!hC67W6~QfY@t^yYEdoA5!ZL@9 zr1CD~1*^{Zj)=iV!sl&>s;NQmJ1^8ODgobBrz0PdY(e$RKQtyKu^xZTo>l~i-5qIZ z{M0%&XjS*u-7jT?_APg=!$n^TvB&=>CC7o5L)3}yNH|CGwFO^gLHt%xkg?&ZjS?00 zLIRd5VE^w0kT#d5SH0&|Q5VLu4c`4s)v}2~5+TK#;rcS<1KpZAuz)`Viec9eEBXkw(i%`ArI%;j^`aL=Ef3j`$7wLcm}VlSCTES|AN_uTyUWfSQ>?VmRY=%NI+m{4i`BvcWb|Bb{ab zV?+5>WtcSjlyUp?ty0#^z+`?V0)b6g9?NP;2t4SI57#AW?RZKlT)T}JCp%q|euwqX zFV|lbndxBCD*8igft&~_b5$r80IIoLo8~h+{Kwz;I4O~pMi)-T!~80MtL7SLS`fpU z?$1ooFG~Myl#(tu*Zyqco*$I{|0nw~oEc;6-k;mxZWBD}C6y10R-u?pfEbIG+=8cZ6suglie>{Gx4)Ny+@x>6z5#qBH65B=8g zYPru-CtBZcxh!+I$i6mYW`**lm-nU@vG}>?^9?~X6uHfaMI!$Cb2tvPlkq$`qvcPA%C;`{(e3pu(|Ixs5pAZ%;U1N+X9b}Yi`mJY_4FagHM@LP+68j? zH|vjvuwG>lqq9zG8k6EIgTN){Kl^4U%#|S?kNFw;_4bhkS<*u?Zo+PK!=h$nv3$9b zsgUGAntpqM%OagAE|JKDT~-qvgeSS=$~3(_OC9|TWS+k{Et?oCC=_Gr{0en2FT_M+ z)9EIt?y`6=_$@F-K9sWl$i+DUb+~j0IAK=4tZG%4s1ia4ake_$HKiSMOT4+w-SaCowfMn4E4Bs$#xOt}JDV&$V@lRD14?CLNhnn0 zNoC*gw`6yq)x9m^P%Gr*BrCfRAx-ZOR@UE_EdZ{ca|!+6t87Ch$@{7Y06f-yS1wnJTb19?mjcW`>l_s}R1{{Wx|#LW_Cv|Q2~90@7T(njXsg_TSWGsTp8 zV1L#8(@wJ|yp={ts34=t*n5N43@hHo#_*&k!SlEA(x&;vKoPdCkj3GnG>axUL(LyA zv?){bX$$Q~$JI%D1-uf3g-oP-Z#La{eSGOEvB9392|!~AMmHVgHB^N=l--3?j}**;po2;4pY8k zh>z^AyTjNXIqITxz4eoQsOc&5Kvw8l^c$&%o*fLTfNj|wojF_=Tu67sRddDvP>&hi zwwpVdq4Itq2zj(*_3fQPW;wBNaef~0z(XAF0Mei>jJI5neHY7Hy*1H@qhf40yD;-) z`ENw?jWrdSaHU<`4Lv7DLuw0vSs%#g?(MC0h!}!;DP}k`2w=HVdyNP5ZOc zAdULkVs{E zVMVD{5$(q}C;mcD0R(WCtfP9LlI)rp9&Jiuv6vvxl9oM!`#a(|UVYbgU%IX0FG%34bIqCG6C`;gbc7Ey?jXiDjXEA<Zq zM^%M2$4N##nYxS#`uUx5?q8q+R1n?Onaxfwci7Ozzxo8vny!l>U#eiql`hUG`=ZkNXVd4D z?|CBuAju;*T9MYzl~c*?Q6FpB!24RF?n8zp|G4ce5RGADUaML#Vtp}RP9CPy*s3X~ zBh`J?xPvCj>k)Y%?DRC72JpTa%~c8eM%zLFNRN2|xw>=*VhSB@BId2jKNK$geQA9n1^7@{;BnQmU^T$kEszwI#k$PASnrr}|&5#r_5M z;Z5Rt&r%wHi0!rJiiaM>i@|%~Al7(!ND3>%Clu!zNQMQ%nUgZ1)XM+tWUw(Q<)?t3 z4Y3s$S9W5`qs!Fgeaq{$Aj#N@p!2q^*DR2@BbUTgal>2_03Nh*x%-rz9>J zq0VCWXwwPxHBE-G_hcQ$cONtC}SS_HIX!+4l}_-npU zbg<+$cHe!u+wbvBym|NbQ$pjmal_w&iq-Dbcz#&Lem0zzE&M13VLPE2Gc{vhC!9iK z>eRRlw7>}!OiqU`-*C>@1_Q3BAVlhQDfdul8<6YFb<4((m<-<3FVEUqy)!jnCnw$T zHY|@XV&%~DyJ30U%|<{?A!M{kQUB|UiyR$wtvqL=h?l(vW*3#)EsNIJwmp(eb32kF zi5F&>R(%;mq2`ZS3%F6wPu3)f@wT5D(wA@T7jkAAX(Fd)ySs1Z z`D*;Bc?recOhu?us49)yw%K^r#+kMsR0+_HKdy7w9L&lxc!B%iosrpR{u2P!@W}Ha zST}g)p*IKEEcRM{`J*W}q0PEwY-;Zc0;S@ZNVZi%PztX!G$2cq$a3>VM~FUEVmuUk zG;v6frqL+td)v=KZi7l3JvmXStF`hvcw^kbsj7R0Kduucs_WE@07W?mnzJ^bR`ZeW zeu=DF6rfqfk_Qv>dDsL@i@hetCrC(ezp7W7Ip}iw+y(C6wN?P3KFb(Wt`khlG()KD zw5W?@%Q3!tA-dfIG8lPadEhpu#tI1L@rHlaInNK~E~wJs>iJvC(1K=yL_-mW7r8Nz z$-XkwhkN^RXKgS4LE7u^lr!-448aROE{OAa)tU3dyLWRRg+CjTx^hT8LEwT)QrQvr zHp~j0G+-DVix22}?P2pDz&ebh2_GN*xcSCpz0b}O653E?@{`{sniS=F;u5I293^lC z*W&9PTU;^{+m5t;`Tlrx_i-L`(N`h7Lb;S%*vyFQu=azIl=FcAJzY>XvCsnaCAmfZ zxf_br4j;FL?cRT@i?Fu;`T(m_LAmNbMCD^x8T*jpO9r!3Q_U=Q3`Dhzba4v*l4JN> zaPUnqM81Kp{M%EUI-j9QBwxrM+_z0UPa-s|IE{KdmP}rnEfJUcp}093Qeq}G;K0`d z=?>&$SPuV-!t(uAjzRMjT%v!GA#0(ME30#O1oOCEmoZqJA@cOlm&%^&;jI_w)wq zX>@K(u5>%}#0%cw4yN-+)61Yq);40b=L`dU+a>F4`h`86qfm*RQ8cBq%Q}oABRN_2 zj%e$1AJ5`^iloGtLd+{cxx`wISm3@1eVU$GD(11W7)l7*Sr~+wlv0JLz4G(wT?1)` z=LCMej?Gh9>sWE_;qPr9VGYVjtIHSCj`?_gwdnFZF=rz!=PKg!dI+b;yWg6cN6wSY z9X#3wpR{Cl;%*~^5G30ywI+Ilec3I`MA#&&nsf%ija+r5I=2V{M0Bxlz?e2Vjc%;2 zYsve4tesADO-XB{fe;VuAt0{`q0U@Y@`8?T?YJOp6x}X(uB@b2x0Ap`juq?f>C{HnPm5(9&r-#U0oNG&(@-LVBrk@8q^zpBQ(5H zWRace5Rp%>J^~)7jjZXkM5;kl<*a^&4Z3ci%vnB)JhNh{-ZhKaBDi|_p0wA0Kr4(m z=~3AZC9Rc%1^ePIS5OSswohl1pa2R}Xz`=L+Ml`6zta}{Wzi=f|8*?*QTIeVV;5&f z{+5r%@W$RIMJ0KKh#+ZJ)tLFGh&*id`Guyx4{EmJ6^Q0i%yWE`Gjn^=!}RYf$9`Y> zv#Ptq!QRb24~ajQ*Edq#fb5o%O4C()Dt<8W)Gz-C=^e#c6NdI6Dn^S9BxC2MI}i zQB7J(hJO$V5#`0ds^_XB#fos9tLFIEF+y?a{>NBC={GDiKSQ&>8@uvm`|MV-o~t#u z#kFx(_t(L@?t>89j{N6*su~raw=eVMU2-?GsO_*A^O<+i!!H~2MdxmdNW2hKh>gZL zqph>D1MA3ytG_3w`Q`aY&eLYex%m9aOo-w%{p+{QelE3Rf&pL7O~*Rdac zX)d9>J@6j8d3KlzJkDfRKK&2?s84=LdHeE-bk`MB*F3grlB#>R)czQ)m8jkyyXd51 zT|88#RFpfS@LkU{pn_5{?kme`(+02Gd9j`2$CWgB5EgYUmvozK8p#<+DmNXxw7Z%S zQAM(W+Z=xXs>V8Ozs7v@QxE{ag3a71uh?4Iu!`R+?pD(<{;ocHPF zD4BpH_uZJ#Ycdjv7ZkQcmU}&ucZi6-JwPP%NsX11rfL-M=m#uOv&h*AaZaDuWyV_M z`5R1qG|kUu6^Mosti?tYHBYfh?A-_JB_pFZ+p5ZphdW;~^90Dy{b2ILC_O2vrja~{ zxcKqQ)O~9Y4uZ0g6n`HbM%)Uk0;ognBA=<3m?=nEAID_gthb=E3~G6Kd}4dJNUdhS z0$Ji_b2}}ioOp96aAWa2$EN*~m7N>NAZ2~8p#0m$c7CKk6N!9{ju3N0I z0q0F5`V&&H>>O*2P8W-pNPu!R+MYDZ!Upc4CGv&D&l-6gDM%d{8_@B#Lg~b?i}WaamY_tze-w zXH5j*5aWYKaqC6q4|jOn_{oDwQ)6jP3cgheq(XSUR{R+gq?aqa%n`N?=mIxsmvJ}b zNo1p5`aoh)7j8?c#G6V-e!NOfg?UDu+~N-mRg&v1o>G8u288Snz4-MqS0G~t=%w@Z z`CN6~yQf*vEm^t9$y-e*M5$(~3D@S|;5MZYKwoA2!GnKPq~~&;^%}h`t$6+Bjm8XW4q1D8 zy?)-G(mB{|jc2Ok@@tOuB$S$9K+Vu_c)gZH{1$Ieib?({ijr7BRw$|on%4UVjpCEp z=!~Eo>(;GRKhU9$b5*9hxkQmi{=d0C>OPW`vFvUH@3;mbPNI2e2aGlZm#7D_)s2T# z-h^BX18s%DvZH-&+23(7=5g%o{f~Jo-~*G7*)@I=|I$a6trz6$pSj8yW{J&h9WCguH3iaC_VcKgb%Gwrhh2`9EsW}W zvM|PN-8p`6utieB@z6B7j|8Pe2tjm$9nLdGFP4h}4s(rtnf|HBRQh$&?bolP#9xK1 z{UrTDF?9Cz+9h0&H|buL;AQ*)vS zA@%v;r9@3)SaE{YxND|fo$X5Ns0_ZEV)$`E*vyJiK4dOoP^=2FdSCEp=ukCE-+7PT z;r{-J8{g30pkky=dK`Bc#-%pz+3)o2j zoIS7Ua7Os5|0FeDfhll*Q#P}uPl;^c;h(mmJEEanlO&2f`X%s~kyvc^)t_(QnR^V@ zvK8bth08*pXFCnb+@(f=zk{GcY8mgq)&$z4MsS+D(qIQDpr;Zz^;sG2M@z z`5U;I&4ECj%w|RnWcc(*RD~8{ABGW~#D%i)u3gkro7Tn8v~B@dAIFxoQ#MHSjjJ0O zS)#@g+hphd90DaJbpZiIh3Phw5cd%I&Ka71VeuzyRck>w;N^BtynL$0;8|0g!N~Mw zpA&XoSIIm>|K{AkDN6G!&wxWQA*yR1+?f9*16@Y$X8JI{D{}NszodfyTwM6L~61W?`?IB@)VL=>}z4N{|B@8rYJJqC9`* zuG2CLDHz3Z=6TXXNg_OYW3i#qt^-N>!VkhJWD<=u}H-26Jytn@?F*H*+6Xv zLLeW;K_%T@5F0m#KJ>lKg)U9AA7a|I*az-W+J6kZqEEKiNBtSELz+*6?2rC zYoR{(DcT!=fQPutW!AgQY`TYdx;`)A0U@99t2FuaV9|;Xn2^`xWgH*8rcH;7dWw0< zfX-%ov)XdF2sLhODMgPlIEzO^t?G{bUP|d`N)XJuPW%0J4moex)A#3fqd-d}-dyH7 zix9A{av6Q-V9X@F4vZq4j$_B33F}8xMJhJ7w>1h?GU6X zBO1A~{(5BYykCctqIiTc>o0y}{W?yb|As7n{&f2FIOnaSY3Wg~l+)#kTmUOni6!e5 zuT$gJ!%M)hT6Ctgj$R4OJ0*KS>nrN2U|rX(cXMu7Oa5!O{!B~fcg_V4xdzn_uoFAR zs&7=|5Y_Qfs}tpoC)vB;W*hZ=xFA zhA!c4itwP!32oF+vkn`csk`%FqhYblW;ecZ9p<@Z`K-xzC&}o|T$Jym+i6%y6Oq(~ zw&bU%%L%=*!tDkOVn8cJv}@qWejh&_n|q8}uw9e~5j(c{-C=Gf>SW-)9?ym{PrFSg zO|8)glV2~f{pD||%P{=^Og*{p!b45*3avO?ej!(PmrW+^mlCQ_*b2s@mNWU`QcBtc zRO7de`6LURSF6^63K^!KC-7kw!D~kaeL*;+5YC-(@Oykztmc0AnhM4cOkcTiPR8wH zr)j#@M*L>rscKVqdqa}e=%RAvu#|2wHg>S~z=q7n_U@}x+KXA4N2pBEYkdVLm4rL<)L+)&Vy7E8vlS*UHhC}G zn>GAI6Ng6I1xH6}4%~zLPe`gT@JoSZEU49ghl8IIJCe4htE|fnlY*zbA?SC{4FigY zgVM|A|ywI*&r_~=c5QN*U0 zcyUzYqUh*c$zU#n(Ma!n0*i)&1`MK9LWY5TR7&1;N*V%fF z<=@Gn;qU=V@7tzb8il)d6-Jt{PNS@q3gh?;5(eG8bq%9&i&p_HlmDkQEXID%Q4HNY zs^utCDy$i#-y3dLp?s#ly`S;@!7GSd$+&{?v&SxE8)pVJrJUYi!-F6`15zd1-@L%s zr2L;VkW<^#=Xvu7o_`28G(jm)^+MKX`9uIsjRr3J{uQ2_vaZ3VEqSO!q%sj5U`iy5 z=NWo-KCK>GqNXhbJZ$_%#WS9p%5b}A6Gg=F5SuGwjkRF|8((ANyVC-CbD#O34m)>~ zbtNv>n>;0qcEf09E>E73J!LrhP?S7)&&NUk8m^6A(N%W8l(%_@yb>=;G7vmhpLVt+ z&~YXJc-B&LyzgLCkq@E06D7>pa%0o~rC&&SlN^&#cVij+8bb#}7(etB%JzJg4@G-z zJ@g&r3l`IMB~sg@hOMEM^=ucZx6cUyN4B|Kl3WS}#Pq^m8WP9wObzs}3)Z}s>*!+o z^|&Ln+F{rCxmd59%Hf?TEVfNY{q z3CilDIIG1wSv6FT%7ahqo<86wt3+)~%d)YBem}%;H4^ozzkM32nF@hb|1)^q?fD-5 zo1WgA?#5?(WpS=$PidKmL8^s}F&*hX_H^0z5c0Z&d3y9*7$iDV{y#RnVGS# zwIclQ7m)6p+x3CV-UaAD*5Ep|FwrV$mf~n2t5wLUJWDD5jg4XZ2zayGBJE|#Zv&V` zHM8bo3$v=Wzp>pgwjhr^m<}`LeX{|%N5N50ZF+NaUzLXc))4f#Dds>8<%7vsx>6so z?t)88Xofy|eL-Gr3lZyT4vYP0U?g;>3tu4bEa&Vu`d+*K&A1~ND1dElU%%ufPv2h| z6R8Dr#Mw2pXL8)Ft=dSf7B!JwMy+B(Y&_fGs-lW ziJK`1pnSS1B~0GnbI#$Rr#pGe*8<{Z0;BiOEN}AUvpKBMYg?PZUb8Kv1N-RE^}N4; z8)Rzf%)Ef)#q7vpPYgWLe?A1f6PCaM8f-^nz66LWsgS2NdX=RFTXt zDxbwN7hMOD@u*(R)7$eb*=$x|Y@#5JYB<~1x_>{}(YBXszDNz2;wT>l zPe@u-c6#~gdC7K16w`hsAQ?dcuDF@0eEG!1*Bl?ad9Siqiiup$mjOXEM{QU`+I=7= z%AHS8Q+evGOxdcJmH*TDy;X&CyNaw~zE5d=K-}DUFmEV>1t&-Dl|}s!bll-yWd|n- zLLjDba*}^C?rB_q?UL8NVF_b)MLT!@+jhvnN&n(7DNDJspJyQz7%KZMkO^9QC^v0A zdX#v+rV$ZkCl4Su;EVx3eLt_1j?^e$z}M zwcAxeFwg5Vtwfn4p{|vw!gSR!{y|G8jb8WpQi&er_+6a-`!sxNqUf4o{yG8D_P3a> zL`S>9v1#x))-8Bj?=3A<^hdj*MR*h$O~oL!$aH)~#Sc9_$eZL7*dW&QVdmw&m&=%_8vCOf)B(z*w5w-30Z*p8-zL&md z6i@DpJ^3m0jM7rxpZd6MDYKH0Tw;-T_;VxYpo!`d6 z?&*7*aeOJU;S0Mo=6KE+c$fL-^AdSYlK3MplL7Ox=LOFQTYbUWCeuZH+q?0S9ZfeY z$TubV=F#S_&P81VBi*KDRO7SH$cM?ywxYM)?1sL;hybeK5O%9jpEMS`T&~b?0g2#2 zsO>;`_uK%Y81wo_Q06rJ#LqccURw}ICh0%yq7hzmz#-fE)FPj2W^@7xr4nff=ZEOY z9hS*wBk4jKcyGPdLxllOCcQt1Cq)$G-0!b$(EVI`)|PQ|ugVv9E=Eg!hui1b7B$nZ335+#3Waw%p@l=0FKzG?E|?+1;hNr%8|kBgK87=B*6(#@u1UH1lp z0=BIsdo5x0b@M52XqSVIWu2BXB%kZrU1rS)=H0*8%aNGWoHka)A!JcrITau}06mzH zJq5#z-R?b68QOhIBUYXG;xBa;3=@`4Vew_t<;S1e4Y5Nw=&!$3h;6B{-sx3hUXA@Y z=2)P$y0etuy`<+ z89RKTAC*r=qaFIePm(T;hsh@G2i2Tp$aTmEa)r;YQhqI~2YmdeJ2*Ru@QLqI)lWLj zQC>g0XbSdlJ{tguIdYX&ng-+!@G=PlQy?ug8ZeaR=|alXpRNO{y7SfixC9q_sk6pA zP<2q1f~AV{)8YHt)+Mb5N2?-+q8h^QA#6qRpx;7E?uig(RTN>agcGr!r&U50t3VK| z@@e3o**CYbvbs#~SV}SJajP#-A4(fLdbBn!1xwBaF0QsfzkjwajHfx%_|H}cgw-GD zA8-0ctL`w{=h7DSFj+n*+MFTW^ijU`)Q8%@gRNOyxYqsADqJ^THi*L!o{_pUmR^K%@R>~jbj z+(p}k83zx_x|KxtXxjeh)UY4}u>%d-oP(KH_7Np8BEUsmR3p*dB_LC{mkFS(CCG@I zWG&6iAE+2<{2plt@)^lK`7|p`et_x$>I9%VK4^E;)y8x9J~e>?zP_;0A!w5N4jZnR zAEN96LFC(GY3^BR`kDSN}<$$>G3o%%h^RctoY2~xcW z0@P4MNs8OKNnQi61ovsjpLa0OAXj)A#x>@{|DOGS+g8%Nm9^tLnxZYnyzTNFq^#s+ zIybDogk>1B4r&Mrnrr91S`~XurvCj%V&^$e=xNS_m%CAPk2Cm#^c7~_YNaZq*Z_?l zzSK87rn(P!%lhYB)-g(eZbW%;YLP@Czx&^y<*50TySS~MbNI!Y#}bL`&P~=EcmL~N zH!xT5!T879eLWLBHK2l9~-4iK0dUmv5=3iAdX{hr-38!&5vAH$+JG15zPF#o<7oXZHmD$Oz@;6yjnK5 zPF9Up^0C18Imuq<2%7PPtyAy{h(3t;R|me3__p3fu_% zdKg2tn*mDE%Z>zC*!ejA&z=m1!ci4<_59WlU^e+ei?WvMd%OQ|2ZwXxB9eGGJmz*`kb7&3LHy11+hI`wF-u1; z0)>Q))y~5Zo(R`w>rV5v=qrgUKY&u~RQE);sPu7uur>;8(bTqc<;Mv2JPEbmUR^U| zrghPLFOpK1AiG z65Lv_n3Wg1?8JjcY4YLWrG+z!=eID%%}Z1ClPa>ywbAGrXDQvks)Echo^qB>q=~o# z$<}7(da$c5Tbo@~OWGHA9qr3~hcc$}pAsBXme5<3mf<8bIzcooItFnk(nXWpu&=$Y z3Tnuy4lQSW^#<>I+tR$I$IVD{Vbhxq!o&J7{+kTH*eWZ3(3)*Y1Mb4L2|2Mp@2gBbpU5pcUBFs>EJXb zlqN7h5E_C-ZSK9sv@HuC?4H`WyhOJ7Kg9%p>HDXZ{bg&12!SZLA6@8sW$jFuG{o%W zdXN|)keZ%D$?XVKVn_bj1kMEi%gOxqO0%;#RfW(@@lzpn*hr^lx|LZ&Sp7kX-~J-u zFHScQ?B6Qn=&D~<55ir{C#oiM0OP2gt!N#5vcB||U$3B$MFrN>^)#`O`lFjfT(kNz z#<416W^&i^v(R;{+%0*~-7cau#2i%lh*;BsO{kORh$fyR_U{I5;Rvs=#os_306SS6 zS@G}H8Qj7m&FHf(M{e&feqem}W@cnHsD&a;sXLyov8E-2c$eQQBS4xbLn>y}59$BpT&q6mU zolB?Oy^5!P=FrjVDd4Nq%}HvK%`UH_8E9f=A?;e^=YblEytb6uN?m-nB|*RW29|3K z>UB4m%xx8m1&Nx!wJ`VTvmd#r3>3@-uf%M(mb-P=HC9^uNK62ocl~w) zoflqjTSHQAPuBWCsI`b&S&Te-??czI)W_NLK{;^$2UqfO&`g})Y)obE>n=1@EKEUw zt2E{NBCWkjEZbp0Vai&1B^cNM%lDEOS&@D7cq#+{Co%0=?n&*#aST$Z!gvoEl7kuD zUXr_O*RAc(X=#iuOsOsq_{2%*>cGamSO9>8NvioAY=5;yM1t;betJ}%_HLy$w+ul2 z`=_klHyza{nq#=YjmR&z{Y3?l=Hk4H882_u8d z`&Q;9@gfRqo}D>*vd?anK|h;f=)V(X-q^R9y_bul@rs6~`hA>i`I^aM^n?_dGBaa9 z?QH(nC`Zqg3L$j-%)OrJ6IU0x9<|D7zt`xm|1g-edn0sxR@Y-l@CEf2%h`FBTf<2A z#yT8){r$Qd74+b6O@>*s@a1k%jGnB1*E_({CYp7jh;EHV_mJ>&%zrqQjC@933!faR z+>CiBJ6t@{>ec``X`p${2O$Jxq7eiY-ufdlTMD z($W<#aC}~ZmK0Yw`8ytmEs%G2etcbKI9_}s0Nw}32!PR$tdXnnp6;{3S)_^I*m$-cDZJ$6{;QEfLLqFG@1_tT7^#%U-$aB6aVT%(LteY=!jcIR-d#ZJ=95 zriQE~7t7WV-kM7+=BXnc0;(PXDc-}vXK#6$m0?NKGeBa1mWUxz(Br#j@N$!N!UFu; z!C`IrNv+7tZnTWWTm{NmWjaWP0{A@EX=Drq0nHF!mucUN-X&D|3v?b(t%<7a6ZBoU zfn}ZkeKT8L{U~yop;CD-$-g<5Y{so`))%pJ^TWj5?D4V>Rmajtow1o@ z7G8RJ%sgc-oar0}B0bzEr;RV%<=iqyf}rJ}p$wgpKd2HuoRIc|iot`b|#)?VWjHJ%y0-*uG% zB$)M5tjMy*(n@Gb?xXfSXLA=w$9!060NqrIK0Q3|EFD&it4(jm+=U&@22%7mz*J?W z#ql;e`nstJq}fWqw>Pp3V0cZ^lv-tz;3-MA>~d6J4@rFPWK(D#dKJ-*JsuA<-Y zUe=pgerqso|y6%xil z-JLp@)~V{kQRj4P`&93`-b?6pZSSOe1Y{I7C;7&@0 zz>^3A(XLNNpD*V7gw)x@iJ!LLi^q&yBivbQghTa{hKQ z_vSq})s)v_)2+PUu?GS$^RX9|JLP`qHkvS6L}_tvwDvt@Du&(yY3jMG+_gu!om{qO zldRalgD`37f|VbH)pJ#5%9K1a>{>v~_C4^H)ENo3_o&rX?Q`VahuAgL7bH!ZF_6SZ zbAxGY@9e*tY770}^IYe;EKCC&DRN8Fsob=u9v{OJ?iDzh%eD^DlDQwaYaZ4kQ$2TO zqR0=>dK=Tq?LTGuN|&YXGX(CQ9tHjLwO;qyx*2aL>kx!JQKG!GRufWv-2bRHRcLK2BvDVxp(*=^6HP8#tmY^U+}#UMA!hDberE`|z-taT zETXZ+=f|IG-&<%t2tfjzq-{ z<5;6tE-dQUB|W2C2HS5(1ZYh>J9rtVYk{G~zL>M{y>0 zm)r(ZESb0tnY<+5No-LgnBQR5GFWm5D)(}UMjSTZa~%|z-M5jRN8&7c|K0tQKJ=tD z%yw`HkzClQYewm~mKpT5gG~9DV~@t5IC$DvDKXCfK07--$nDYL@)Fq0`584 zET_jo32EYjEwDDz{a36=guB6oFU0AUkQ{8AS9xPx%&Mf&CmztY(f2zJl)0d~cu`a$ z+c`~Jnh?ioXyB`cW*ksQ2Pko08qEcl1zp8-KEcDg)m29m^}DUn6{f+v!b-v#Jxf`# zf;&`SEjfd=4 z27Na-O-Ov!A0xe+-&W8Vh=6wV`Kqauc1psNN|I6r1iVo~%KfPc$H>+n4k!yYq|)a$1{ACFAeujkYOOj zX}7~9qA_YONZVLz;`&}0P)k*>Gm4uY^`MR!_&aQ^)6$v>$PW61Nmd8uq;GAWyJ&VO zvGMw-t=eDeH|fL#$d$o6;!K#$8 zX{k0{SQx4mh_l&Twua-he#yP`?IGAdQLOY7s5(3+ z!*t<+NexzL?2ohhn2e)p%t;F6F5b8UM77r|6(qp;S%VU$%c{R=8CD5w?#*Y%FDt}p za8HiqB}vPhUEKySJ|*i1axth5GBE<>q*Ue_@DIxJMN~~XsLuTbhGFLO33_s3=Quka zV_~f1Y0)P$ut?d0Dr>UWS2HG}A#Vx_=|941s1#LzIQkOT2$S4Wy-yjs(Yzn&N?0Lb z05dd3>ymYVv~QGAIFIPTb{=iImuVoI4N~uqzUO8yYYNn67G-%N1a&C3@_4H#H@c~j>f#7c zila^1N3m3U$k%?Zde4*cMwsq#jY+O&n>0cKm%_0=v|gwXlX<&ZB2i(_Z!B!T5;_H0 z1acy;p#fJETN)yWrYId(Hb=KyI`J#<&^~~B+vzH-PTUXfny>`o;~!<0cDI~Pj?n&& z6+hXu*|Hj$NDHm%+u*ucns2vijflB52kyAhXW`t^hv3`5dEPO`$wT0@wQmn17M`e8 zDHRp5+_t>!Uy`&?M9X8F3N*~%2+02^dpaZxh{@DTn)!pn?78TTxc>+tPdyXU;>a=G zQ@w+cgmvn#$ESfnC0RiQ2%&>{AaBaAU6G~Q&bwB6L&?noEgIZ$5(;Iz92L)&+Y5A` z?BLqjF0v-YNEo~i&>Kc-M}+DjAcPTAD`6i3a-;;TGF%z7%5_%K>cpjwdbFz%a67WH zeTvTyZ&Mv4Uo|lANy3L>)f-fXRkeASo!QGv(iiJFlk`;$fLRB|RXKTTSihC&Xd{@A zW2!xF*)%`D>pN;=6wiJ3zBS%ai*d-MX+qQc(S_mise0ZVI7pw&9H*EU^bi)Bg1Tx(GdRrT=?;Q11QCnYJn3^mvcJBIA%AkWz2-crVUIzcv5+~pN zn38cJp$2LK_LZUn2-ZfBC6P&ynFVy967q{<6UX55)d{vzdA08Z#agBk_d_M>@>UDf z#0_5StU63VY$FI!B}y|lT>0&2Q)d<=nbIEy4anLFv}v($Tw^Z2qxjF2A>P`T)bM8t zZbZs!K?n_R@G+d9sk02Dd4|M8M>pSaXqsuzVu?i6f1uojJL}}N#Qfi*!p6PcChf`Y z($GiKC_5GDefv?%kZ@&MTBb&m-)=vXQcjm-to);O(TM`WVdSlLFjG$NF-45iq5T4W zscNK!2@NFcq3flmSh5b;Dn#R_afvkFfGTQ^Kh6j5-~Q1CJcyVuX^j}g)^q~1dpHj* zo`t4}G7Jojl-SQ9a1}osp5yZ62Gsdd89(rp=|=O_<^XxB&}?nTFFnDy+IH3(tx_H3 zVu6LJ47UNmp^Po9#XJd1ey>`3;YXaici|8%`XzV_#|QI2-Icq0P+gUf!Zww2UHQ#v z%~_50V4`itTN}`sl{;_fv;#_7&>fZ|nD6=L0Zf^^_mc^KRi?~0lnZ~C$CRK6(K!C> zxpT+p(isaD+y>ESiF}?(hRHDSW%t=pq2Om4aA6fk@Uhl?Y}EVG^f7Lz9m6ztoZjYe z*?;kYhT7%i2DfU?Rj@(r78C41{!bE9wpmh{*r=kZ+w9kLPW*??Wl)VlKG~Cxvq0s! z3b~nSeR{H2l|Nc>CGTp8bu1%8Jgp_EGDVO-+X9<>=clci)NUqGU#mLKU2O{C zN9VNrY;2h)xmCj{a`r_Ag>zocYUIve0ehNv+UsOlDqEXtSdR06lkuBOd4&`u?0u2RVc z2QD+M;DQS#$M~;E1B1*yi|?i_kB$s~(5J3u?JotBoaRi_=0H!6=xH_ef#llA&%v#?a7OfsioVJf)Yu>F zppQo#6#>SG*&JM`O+7Z49=R>%zVT@bHtbo|?OI9EcT<#qzKe?FOx@FEjNbPcAQ6p_ zVUVk>if=vu=T@zY+UvigUx4v zWTJ#xW7ztmdmnG39qlISTh~{&Ajoy|;#ZC))}PyN+uh9Y0*+^vLLU>EQZn7okoHk& zML_Z2Wk6uEI&D7zc6)OaEOGk0ANMyb4C0m=6!PHKtOwRY5;^7!?5{J@V?>eLCfrgLKJ*o z7LM_{0+T_>yxXr-$|iIH*}ZMUZjM1XGs+Ov-Hl@7&Q^?!yJ^jk9>#-R%3wiUOU?&B zM9^k^QzuI2-rVhLk{;h~7eQKtt4m`nn9Hs@t6JjyRoD--KH;s@N%377uWg3;vYCMS z7mKqd$>kf<)mY8Rv*Z(j^Lti zPjANBjcyiM88icWq&^D z`Izp}r2l=n9XpziV>JMzR-W+$s`5P@Ce~+AHjZ+6e7xj|7|OLU@rC)_gat(WM*_d}vr3ku8O)i_DVeW~WEbEd#7$gL4wKT^M#6G*&19@r=mdoOv;6n<;?56>b|h1*UTxA1auaaHO~X z28G-WbLLy8qOTR|hMmb;ms2_Gg1RpTl4rhx=LlIC9jW+v-p?4|3(Azt5B#f+*ovD{ zmZAc@S>GNOKK;Al*uY+=^&)^gSZ>Pu_7y94 zyIQa7yzvNw5{{rMnuKFDaVeyVqpw7sP(?ZeYG|9a&!ctBZS$)u3zWV2cM`s0x|26H zz_(q8=!77Rpno8J&84uCZ_nmRjk%RRr6%Wc=T~5x%=He1X1+{P)M?I9p)-<=v5jIPpUqH18GACzP>#$>H*{)ZYf7I~bSz#)?6e zCedbc3sTlAVPPlYXv_BV@lUxUKD*)I%ea7Zv?SxO6^BVS&fUk|1i~bj4!x0duet6| z=%79%#R1@8&Q`tqerH3?)M0yt_f*_id7Sl7mK%B@c?77iy**eo4A10lmi?c@M2q>P z-_8Sea-$i30O{Lz@{sUJ->X$lPwq8CsFh)_grs>5kF{GHhrX)6Q&+^L_&3ztOcL!ef68bJ1^FDZ7u*gER!O%C6^5Y|s& z&AI+u#SPy7j#mu*nFM^sgzd)}j01ws2ZLW8uH97};eSutIu6_uQeFToKG{K`OY#)oL)1i6kGs1c^+id!8@rQ=#t2cjEOXSUqug7=wHTC_#k{Ao z`&TZ%{i|2D$*K)=>)OGkFCO$$nLPkg&nDP?OPZx)ndoz}#ay7a&hj%!y!=iBvFw2# z<{12(?Er?t9h7TuMO*RCMis7~M`UAx&zGy})RT({uU8se` zYvMveV)`UpW_f*UcF?#jGi|E&O>9_1SX6Ru?WNZ1T1VRegrMu#ZAqqNzNQ{G z8QgkF2hh6t@DAr2ODfwdBz3uAb6s!FOPWMRfJbiAcs8?1cpl`0Byie4#g zr|P!p`plK%+2!*)a4LMUvb3NH=X^z|Ose zqe@;wETQ9OoYF&L0_(V~C!=6doxQD4r9WqQK&I2_a+zhEVP0S{)9fIQYM_PSI_hU@ zEzUne9{!R$U%Ku`VX88VQUrDEz8++wgO=6LCE!uqPQ){FdS4|7N;_>+3Yg8DI$#aC z76Mvchr?TKe$q7&qZ`lN+XepxlA02ZS=RYUHr;cKT#K+ek&ZJ2(##8A9mr9HUQRh` z7aSC-P=g9$E1+ZvKeH{mRWS`6b7{t1N+?-txutVyPXS^y2n4 zR|V8Ulf#C%PV9}CD~=#7?cZN3Wq_TQCTQfN8FYt*qd3p3*Tt;x%}up6{qnHeb>&W=k1 zuL_lDAx6-SL%B52_G@2~_wLbWQD869;Rv}h39Wi9Px7R{V@3(T-)KHbW%oBSBr$f$ zAzHJKvQUxiC=b)mQ=4-;81W05zNTZ+KeF_M77sEqSP;Rz*7ZDE9-qLfLjhRCK9Q)s z=rViW{g4_Y7)h?^7E5FGu zrv}+Cc`1xMx z`^JaZe`DOzSsyfAk+Vskvy#ciS<1;v4fwG<+8vwECET-hv3ai6LVm61Te@(Lkpesb zz4zNmlWN*!L5nf-^)p77r-92cKU$8tlVyImp2VGr2%tb1VDSH)O}d8>uHV4 zgtp)r*YLSnb!Y0~!+%+XuVKB(lPUVhn9uj?{Ii8~m(%Z<@7S2GpJN4b)UQw3-d;s4 z&JC!ehI6Na&-K%DySsz(6S)G^%$A!Fo+EFNOnPyXpx8IZUv*|o9)?>5#GYxnkVuK= z?%avt9FiHhJt#Y%Nyg&K3hI+g)MCo}Krs@MECxdfEw(5a&lX?^SpP0)3+lcZRY@(P zp;H-t^Hp$ldNWUBDEc?2QF;mMdqM_I_UyOFJ&@afmCE2V$L>(@eVZNpvXH#)$odXi zHeTavt^Y$s%Q+ef;M#n3%Mi+QM6m;es;X_=IQc`J^6&EKA&=*lp585uk(JGzL1DuA*G-iC82`C=>rl8VP4TlWJH5HS!RS$UQ@9#0W@yVGY$?YBM0kCAbiee8|@G&bQxH-vmZ zOf}^abjg{l;wV+K3ulgO2E2(~Q-zl2ErfDAipwVvDqtLWc9XjoFA~;JanOVP?xEg3 z>>mEIV%?YJHHax`~biNVqIy!xJZ|2dzo@GN{!Hz9ixs1>5+>iumgM_Pib zVkDrkGWZ4FAZ-@Y>!#4Hd9bUF;}V z_Yfu#6zleq0y=G;$PS}3+47KSgsKlewU4`Fv^*5a$6yVF?|Shy-#ZU*zJ|RVuDaP{ zV!H1>RPNd*=mlVI)&^c<_aLvSCjS7CETGr1T)*4Cm3?}Ah@bdG{mSQf%dJI={&c+o z?eH*t#{iID#@2E%v&fHW2(`}&NWylX;byW+NLl8Wt-Vbtk9w5by59za=o~9W|D})1 zQ(r5g`OCG8o3&HjW093`$o0qbI}#Vp{Le4>Y{w&Qy^@n$!nb5!9>u8xq2jsI@2^0# zj!#QxSy@bRH*GwtQKw#d{m>3@5QIub45CRpY4HZ>Z~g*K*XdVd2ZN8+Se`j*;ZqP_ zBaD*rf3YC*G5Dd}`r7-VNu(?8(7^`$6Tw7r+|-M9m}(Zr`% zMF4!k>#3c)XvXF;j}#s7@;GjFTK6Eyk~dJhO~S|*lx5-$ zGbg=vy4r7i-RpI*|IGI4BxCUSj}7?)EYh>T<(=@fl#)B~ummXFW}tH8PvlO>e?6Lv ztaLMcas1Gg-a!x;xi2TU>$N(3(=@(uw<>0Z`zt4yoAF6OBiP6Hzm;DcGv<)NMyoZ2 zOm&N1cR7@05AQ*hfHN9u4V2?mP;4OxQMR&v2;**Apf4&h9dyFXzI;Fgzr5aJAh8cn zyWbG!E>pU%@xxb|{?lz&9We?`$nwfxi^7SNi{YY+gZ@!a@L_Hloo8P0{lPFc?&ZTB zOB6A0TWyn9(&@P89t9(6KXww-0j1*$+W3pA@R5PauHz5sW&bVP)))?G!=>6BR?SU# z23+c@qafF_*oO&s$KW?>!PP>nRFRG3_Zqw_8ROk|N7g@S4!ZT^?B`9`fHD5(7ZB4X zcW%lkJ2U&$PMOl&ghkq1HM*jDN*0tG=53n1MuOY{bChN|ZAe}7`L-86j?H&r%3=-h zU0<(>8BHKvfp63k&tMyyJZ#T=Oie}X=<$JzRZqrmjkl9+QuGnc3Ew3SbG2@u)iJ1o zR*&ce-eGjFXb91Qn>;XQgj*$sU+iRO7M+o>7K+54al@@cr5FsPuR`U%;bX5E#j%|h z@5ui~Ni_Tp)~Uasq&p1rFG8Ym%}!1CUj6!4gEuX|{y8hqt{LOC%djjxa`3ZCfI)Os z6@Wbe#f7vW^V>W39mtDzs)&fX=C8v__YY}`yw=~~>TDpZkNc_kFN!J6@>;5;=C9jc z^jgB>>yz#;)6ilbnX}D?rkRs0MEN%7KK2f^wl)jToiy~I>Cs2v?|JETPk-(y8Yncu zvd-C4CpnMXYSg-Q6AKcKhPJvc)lw1|XHj3)t*Sdw_jPJF)MtBZH~jDqq$M{CNU+bD zrlqV^mm~S8gE&6};DA3+;8x(#mA4%3QkG;I13HOTi5;$3{Ta9ghe%p5nHy~+uR%wE zb2>!p*_FGWoEDYtz+%q^iyF!v2i*J3+pJ^cElINuqgE2k7{**~T^UZ+s81WXxj-ew z=n?K??YWMx7?uW}uG_6zpiJL&kvs!gPVv(jknPP8&2ffPV?_yFR=?H4yB8*ggwR*b z3tfl!IZ=>$t6#^?Te_OHZ-k2{3EFZqM{?78 zUp2#gX1{{jlNJR87Be!=M@$HPSsI6SS<_-c?87_$x`uXfP+5eG?>&M>oJ%~W4=#E~ zdbU&};a$jGIP;$l_>B)P;G!9t8d(Sn;^3;yI-ecTSPSr#oX|Ax#Oc+CwhIdi?syPN@Pb3Ag9#?^$4x z9Y`+dl?!?vwQ(oVNx1U?`~)u|2HAlc3%is$jgmVnb;qnAJZzImZpW6{BAYp|-1+|d z=V!o=Tf%INsDCB)jWDl@2dnDbj1P-nMKhITA5c2&w<@SY9t(54n~Ab!e+>nK3Ge^} zfz59T$1~99^zPqULqmH=?(kt>eEa2zO}QBCa8)bZ5-Zk)bJ1zyA-k|@bmQxv2@XgW zRT1*^lVh9Y>bE9WRR_1b7N>@+g^=Er$JKh;yX^r}_BNRp{$E00-H)jnv%(w>HAhE3 zn23XmpI4+!f4CYlV3)-I%hiCE48R1xF1eXN^j%JN5&8Ep(##WG=0{WqquS1{yKV@w z!D}5V2FsKx6b*`gT4a)~4J-H72tH zYV;`}&4#tmJs}u>@KPu`*5TaQWFmZV6|Sf!Mkkg!5;8t{InJyyHO_i5w*Fg zLA!KHK7V}59EJ1KF%Sb4&*Q{1#Un(y`* zStqmzM0CWNpy3Tf|*KB|6(Fqw3iiVU|Db@$4&^Kfow zN!1MgH%8mi=%z7u!OEmHP{(HWrCrKbH$HrF^_fAFg#T7q7r_o{$_(usipfm}LJS;N+x|XM(kOp; zaAxr%VO(xPtPpdj&eK&|S)3HaD*5=hk^hsmN&f5d9(QZJlfDE>W+UF@qi^w`9q44b z!(vLysYer4n@M!Us=!W<#p!oLu@9Blpq!zy-$;u$T^s14jYX4JhAZOCA$_ur&9#3M zg6Atoz-Y}Bx?l_S%PtHLC-b$)UWD8u(5XC?@Y0XM!pO*vq=FkYsh5Rc$BJQ5gxd|xg z9TS_oC$x6;!|8g36lA?yW7rPEPhoQCFNo3A$N!PBlX5z5W0=d@k?^( zs%RF(YOUcq77#}#4*w$Tys}w?{<{wp`t?a2MO?;57*$Enktx4MJpsmJj@NWO^O3R9ChD7MME zrQO1Gt-OF~mVD{Tm8xz&a>YWM!A01E6)1 zy<>nkZy)GX0dM1zc7F5TQe$YFQX_>_7SSu=bh~E|HXpK8s#4mV2i%&Mvq1G*CDQWp zIXp46nh|*X0DSfBI<@~wgRjANqouG>&dL$ZKfcuT^=m>0(<=d` zypY4P##811QH-L$2rq9oL$O3UzTimI^SX6HCCw5ELK$z5Co}B)yW}l3pNk1SFrVb+5SJTU+`wnmNGg>{a2GkzDsas_xe|( z6#a|Tlh7aOtJB$+DX&dIx2YRnR~ zZ{R$RP5Mkq_gW<|b05{Bx2yDsz+idq%5QnEh4{vGmvs_qNnRVD^OclF9jWmB^3f;W zKG}ZCYt|l4f&VM*2v8>+4cvMBd@)t0!_O*&hruc{NH#QdzVFuH5Sh&@Mb#%1ngPuVDS z5Z57K6ptxn_VxTL?uz&yQ3?bOM;H3^8kGwL()hiVc64)OiGsC%#T0P)+;T$Ob9lKa zt3DnR+t%nRD>&GG{QiB*_w9FK0{z$ST3tnn4J9)L+B(GSdN1I{Y#B$WvJCSVRj+FQ ze!>AgcEvtrwwy4ta@Quv1NH4B;mTum>9lR{S3*1z)TAZCcImw}j5U)y-+HpQ90tE! z{V|c^9`#kS)o%r`%}syF@o^njbef`=?!bDKAX{W&}F%%-2l&nH4D=56)*X-X&iO0vlR-Ul-cx5#I0bcAz5U!a}CL ziEXfMs^JcQZ%RH8yO1b{yg1q1OYBx#w1|<{5(vA=X}R5hnRz31A%I*dVJ57H1Tx3| zqA2@GWj*v)|25swD@~@99_dVlC>!0{#>$S(;p3-g&mF6|GIC1Nq*SPM`-+dBtOmug zysu$QY_H%Ry?{(w9Vyp8vH>w_A`h>4Y^04CbR4;P=p>$q^t9(>O~>jCTUV^)h-WTL z#PB+{wJn$LYd#u#EB*?!*88m#b&N~$Hj2HO96&5dyiZxNW^SiUIH?<}d#ZWE-!dxx zNWMETbKLCxWpLi>9CU!HpFZK-ov;}?fe9CTD&U%dZqb|N{NH!Mlw+FIe+B7!4uyW^8IhG$~%j^9V5RPHkmY)zP)0Ay;IW;k9=X0 zKd<~gt6*MV+;x`2jJNHtffT$x3cL({?5Kw6qr8s(<|Abxwwhw+0Xj35&r{88*maJJ z@V+fqA8SI4{yt}6=VCW=rL#6K?S`(HB;btl7WvSMqKqV289dbR_pZ}!at@w#oIGB@Jgvs>%%xU;#R5?_tJROnrb{R z`|E#R>_Sk!{3dkNd@&%4BH`iwq&fAb`Ul8IW-ev^R+%4XUpc7L65T?n@z?25RcoJ*)O9_UhDV z9Mg_{i-EzJ?v%H1S0TwWuF(rS~!YO70DIc8%-y znuU&iD)+r!mnYXGoV%y9wIR%FmNEk%SoR1 z)cCv+?h;fzG2XJ{Cn%uc$=ck%tghaDoBD~(E%{{BN!uk*k0{Ksvw{D5wB&tZ!;q+% zUhk6us1}?3%oE!1de)ADkraT@Oi4qpm&yhOS zIJoK@+H#qhZ11MxWUdniJg!69D2XoM-Ih2-rp?{Xa$>~lbCCZ@Nkx_XlgtBo8nxt$#^nWB0zl9)uZt*J+6#NBN89pMrrJNJM|C9RUAxL2nB^b%O_D(zVkV#|e zTz^~)k*L?oyVJIrIn3h=Y%RijeD7L{r6SshQXD^`LSxr35nYiW%HTn^XECAmVRz_D1<#+Fk6J6t=K=l8s#!tWSV+n?Cfuf)%RU|J493~OC+Q3b#-0sU#jK#kmr<_>r%`mO@EYH zoXbe99g8bgqb&xrg!R$Xjqx>suDt106QHAP)$+%5aFb5+_IQNRU;ZSg(cHhEnni3T zo4ykn92e=iO0i=sRiy$QB6MqBq$LtpxDpJJ#(%53a*MpLJX3u4*0yMU`H#lE{8%z6 zGXb3@v4cetW-9OPD%sqgD8E)2+LfDkDQ)kW&xhpdHK6NLLra8XRIdKK_0EU7pc}-S zH`VrC;!ksulWUrw7$S}$=U;E`IgJxT_Jfkfov~69p5!0EZr|jp8}J&dl9xY0AeI2x`7n{V+va zoQf)r`tlCZpzM^PcG$@;MREJBs_9X5y;Nr>K{dI76M2G*w`)b!qkW{PFkE1q_IC7?M*k8!Par2!S%Wd8=6kpTbBHcrTmClGV>6*LI$#*~kzYF;D> z0Gq^K{pJ}tf5}rkE0qZlC`qauUAM`OEIQb+X>54H`C10x!#(eT>U;M2UHAX|^sI~x^kHTDdY)l+KV^qLV}Bi3 z{m?C6FE|u-VJHUFpj#bQ9t4Yg@5||*y!wAVorfcv-}|t;Xwg!$YF34aQM+i3+Qb%n zwsx#mP@9%6o7lTnB4*9lR8g__h&^kokr*jn{q^&G@BiRD&pFTioco;nx>R!3GZS1Q zZ6V*By1CF1`J3I$si82o4V;*4aO&%a=E*Ie7)h|ibRFZ^^I@M{ z{B~?pyaOi!!KY?MXXDdy1KSk)D5U%c_o-~_fhKCQ{zv!q(Dx+X!Sux%-L4fCE^Qfj zF4;5H98*N0(4}68zwd=Zb}8dLoDRex+cwsx(X5rJ%$@2)AFfEE&%HR zdj!s(%kweUs%-Zq3ICR9RNncV3x5Yr|2za;C|D3UODhs;_#F39ifOh*_<`Jc8YE$^ zzQw-$dcMDJ>aY2ymyI$p$0{dP3CBD?H^GM)u*nkkCf^!B#rl`{qC_blJrT`Hv&0oa zg{H4IS_?MAdK!KW!=71>6_h8G@}~+4>~$46a0!57EH2$~py^;%3zhf8qpzb`l2X%% z$ib~NC&Cq$$fsrV{Z5|_p5l>W&z#oqCJaqB=p49UZ%om*g1o6J-XNAAjEHz5z4nBo z)dx2Ii;y{HW>J4`i5Jthy(eYr^%QnKzvF8X#f2g4?@_7<44J@ z6ZyDeEfbN!*0u7_s}w&Ic=z|(XcNU2Z5X+Tqgcu1`x>c%5Bwa0?C0L)DzRnmjq5A}!a zM#N|}PnO6yuIL4nOYAAebln7(&=Gq3Sj?Xn^2p8B5d^taZ+l{4!e+Lm7c%*%e$fmR10Fu@n7Uz4UpoWN zZT!XX((b)RPiFaN%`mlfO(nx!3TNAebX@G(5- zjLODnih6N1U`w#1l<*}wb@OLsDSR7zL@4zeXt~h1YsUR{KMx5>id(u&mBS5v-F|iAFcM2t|M_X1 z%k2yF8ve8*@`vJi1LSgTv_HeibPY16^+{k=#nd?2yhrC@`3d)$AjW|WOk4NdE zF52Z57KX5;xD>!s)4~00%{q13cmQx6OjdoI&z;?SiyafCVBO-Bmxr|Y(`SpdZgVmI znX_^(dfc6hb$Xv1_`2C5Aj7I6uME9gqZnNq?|-jvVhzS{UglJDk7h4fL1Ao!vz@RL zkoYKZUwWbE{T7jG)H3APqlA;Yc#<^PdQ%3P%r|n{sdrP=LV%AsZs;^;_;Q6<+tACB^qHd-@VoP z6gyAvfi5~|{)`txTCRmH=X`;7oCTcpV*tL;cAD7hd+Le|(1@`=(x%F}VvtnL)MG-k z26uLLl?2!~u69XSdMcNbCZQF4Wyy}qUf|c*98Jqxk3=f{ zYMcPi1%GuYNmlRC;4Y-1F4)AaY^EQX-!&r|Zi-IK4HM@|ZK_h8fu~;IIqCROcR4(x zAMo8AY8Cbg!lI|oOMdOR^~B@(rvUw{4iKF)0T$1O4)nW^YklcMbN6Zad9u^mG7g3v z-k_ZrZnM|$?VQSiM3=MQIY??xBmiYR-}qXNH(wtB>Aw~zoi-YHeHJp1ifD=c&t=XY zeWeT>yF-))VxIXN?*?mV`T%Y8nvX+^JROz;j;H~SS)v|edhCQ-s;U9lUG>O8Tk3FItcfMV;DMzZ?`bS14$eRoG;GFsN!-u z-63d$S#t5s<|Nf1qkPVF``z~&Tj|^JD`U*Z+aSJeR=#nRspm$hM82lMY-}{jKdEsG zD1G&B^?&hyW1~IbZgfZ7cXBHL5IbTbd(69Kj^s_2H=}_LP?)h_v>qR z1i~3mh%aya^jY$>EeCouDzK&f0QxkDa8Ho?E-(ZO?>&_k8_yqd2x%7Vg zCyCihaXnZ1LFvFbYSP99mOlfhPSZQ&fONoOaA3A`ugY$Bk!!i6P#gY(iU5vXR1k-Y{=hDktNz?QB7{ag(aXHq;M@1<{B;{k2^o1YW&v>nDb04^L#h! z?7?3c(p8Al)dH-#MRz}l_SVel{*X2pJ3-|U*R1PqyV}=DCq@kmdJ6F(1VO3YAZ9Yh zqv|2^3CZ)o0%X|7qb}PA`8$cXVY)I-iHF~pw2XtFeiv9$sCac{9*m)etx+y zxd0DEB^)WXz%F)L<_VPYX@ITAY^F5mTy(j}lgTr|kZcK1xevZn3(Wt-QE374S^ZO9 zq>gU2dZh5UVPVqZ5?YUE2gBmqA)*L&m+Vj>_=`4YYik;>ML+gX7D#)@Qv=<4a>ohQ zG^Z2~!pR<2dHN8?M#2Mi4V&vdsF2jdrRY&s(+Ji`mhl;v9m|pd%imFRC+V=&w+@M7 z&#U96pQ>v%9gfOdiAk{b>JNzf-km(i97d>#37I4eD}j5krPcmsw&(Lwmr{E^_y3WU zZvG@rDot+d+L&uxW2B4DhDOk8&eMmNJ-~(yQ)h}UZy(>y)rJ*+QM77|anSN3ung4f z6S3W`)W6@mIl}2S+u{m$F-^HuYL9g=)0_g5?c5p~6e?ecuJeSIXLi`K^BN{;Q=AvP zp>(;TLEff4CkUnX$|@Jui$52DO)6N}KKS0OQ5|yMoCG7lSZUxfT;@m(=lDF3c(*m0 z{-d~26D#E8BkX+Lx1H=j7&rk?V#Y?PWXVZx8|{t9NkvW z>mL;ZYGl(Eru)94;YkR zfPyg8v2~WvZgo4)r;TAbB2Cp`y1yoAtmeI9nxa;Y{14Y6_p#xUT;^)m%d~?=xd5L_ z59{_9rF)T#>58_~qWV|XySDP&$h@`?ycAzeVNqP*vFG00?Eg0${}ARx&>n1p)p0H^ zc&#m~Tkw?AE;SK0a)QEWI#oQ=5KBIfw2FR_7JGyqhq|WCt5n?jwi8aYiYK1kPdPT- zl?opN&YGCQ-p#4#3siUX*KEN*EIW|;ek`9?-v0D>E-CSAh(DRs)Tm9iKi3bdkEX8t z`OO%~3d#nBlvMqEfm zV_6CGE96ziqutz&VTe{?Nl7n%Fp=Wkyv=;qR9zK}#0#q|^DeR3wi=pGKSH@j6I zqx&(ER#NTT!y`hXlTS{H>7#HKovIswOzyicD8E^LH!c@bx%HicBd2w)C{GKD|8s_jBht6@FI`6uEg{p_3cDZd(N5#6J~~z=vVHEAjMF1I~nmNrt&^v zn1o4V1PPHQPq(k5oXgD%zD2GeDIz)nJ2oSFl|I+XBPdlE%8VL?S=jEO>YCU_1k@Jg zc0Ago$w<1*PWXPm@VD$DC`7)2!Q#?VNwwU;ufJ!pmhS$!Jc%LK{m(3@`{reP)zz2S zKwlHL>s`#h3=H40ZEy~@F%}Okib-~RXi(zbpjw=cuImTF6-MV-!Uvo~Y-FV^f7Dgr zo4!s-ZQj+yPQU1epElom6+;E^x=CkV<`$|eUG#h1;7fpNsP36g;r9~M=o(`vIYcBE zLanCQ&>V)iUr95NqBrixbAEfNL7uyDFvvZK$eeX!Wv{~kUs z(c{|{YY%dNL%z9FXtQP5JXuV_)ho$q2)mU?1^AxG0-B7HZ{ z6&3pFx+uSR^$688?b&w@Vh1>-?{(}Ng&Q;a=;XkNuKK*W6R%pT)*RJYfne_3@*=b* zhW>6kd>d!6Y$TG1z0=qtCtW7Z@j@|AV>QY* zNK7Rd{Ij{KE%m(#uAqO_@0D5nXu&%n4M+-Z7}slcIfdH`+?#LzH>xWP!h3Fn)Jk}F zn!S+Kr}*MarK-4>Q_;}NFG)+eA76MI^Fa*GlhB z`3_2~ny}or@&l!V-KcXWvGtKr*B{<_@lC*Hui%680bx?ER?IhK~lf!H1uYJ zl4mf0a$kUs?SlfR#xR;l`H|H{5-)>51}Z|bBY$x4Cq%e<`>|)9XMI>vI%V>Jkj!i4 z-_5bQRJxS9ulZct3c=8JIgA&@|E8HxxuBH^o2A)qI;MTgp8Ifr&Z5jb8YP&`6{UQ= zN$tb2?Xw@$T-(_R{b?-pa?S2#mI#+_Pfx@BpObCCnB;rqzLF zJcBOIs%1PVJ%!~j4X*0Cj)1r`kD6|!cNe}Et|fF2^ws?`S^Zz&{saZhHUz$1 ziT_8fOxJdfPd4aE8YR(L)fa}=X)%V44Qr*|b>guE zh8}GRkY}gS7gB+q0o>1ApCC?pH+3$Ii*Ogs@NAp zZ>spe%&V($dNf7asHldf7kN5u$lcwx%DCb!F6E9?X0lB1RBn7w#jr-(TsPRF)p8JY z5Yda_L^*@Hgo56>cRs0Rkd$nK__4)L!(*OQ^OU0>*kc0SW`e01U-f>{qLdW0uVxl= z_0Gb8=3X$=Fo-_E3aMuMEYQko@(Fbljp?cEjO4;Lt*$^j%B~+^ryjui!(Y$mgEUT0 zvfy6lGsyum|Lmu2Y~nWS0}D~Qh)UseYz=eQBb4eh(ZNeTohM0OWtu8b*|QIWuC&My z33tZS>32^<;CU`TBQzlZ=bV(x%^eW2ZN&?X;SFh6KY;3Jjcccr!&OXv1U5zWA+4%f z%-C%Kkx%A*H-N6oy>4<|oyfe|%P)w7N_VI%7it2|H=Yz4jE9g^LQ>PrsO~)!7;tAkoK#z0`wTeT-}+ zQhDHMv!;v@4BMtivfgpXGZBZ)0K8$crO+ZQ4p++JiGr~4A{{;u36M-Z>td`VT- zk0%X6=olkn$Iv>781)znp z^JH9XMle*))}_TAhb*Wy~?=Xd4JI5@&6?Dj&6W2(2vbGr+<}u+Kn^KFHxMd%(1Fc)o2Og!pc29 z=+oJZh8^TnbRS#v04k-7t0o@D@)#W-!eE z>Dagor6l`E&#?gJkw5AX`E@#kvl-AhHk3OnK5QXGuS&H@a*F?L7`$p3gfTs|Vko#( z{Sud$vcBDW?0T<*AIXsqD?F-aCn!inXUy#d8uQXl&==yV>@HtWguT&Y+CY;6s-(_qBFmsj>F&f;yo|TkW6rz zGcHXJg-T%1C@~rG*~jj)cFH`KjjA9IsA0|PD1R>^&*MY48afrmSB2(vfmDuB*=pPs zwrmc|&DM}S+UaUqY^-kq>-+wp`E4TsTTvWT#xeYR!JGP?%TOKNy?51~?N=wyH;rCy zG~x)ruDY$v!v*t@n19*l?)J}E4usSZ(xA*VX)Gm$xG8GW-nT_UtqYT>NTr&l7%c$d zOBmD^$88Wa?0rQ;iBUc9vlZyU7Vq)r?m9r)m|v9YmFx2@7+Ti(mefU*zP#zH3s3hM z)pR5*0Mk24RA+`Canv$7tht4E}=+0LlziX0uz$^5#%Q zN-N&e@!-N@RPyk(j=&+JPzCzr)DW4_QtvEKE-DXI{L&X0XC2El2U=G*#g2#YWQ8BU z?+=)#90VX_zgEZU@pd`EwN$A`SHRF7Q5UT6a7I?Vz6ivCPeX>FDvCPS8rVAovIdOr zT?`%u{+S4T@Za*ksTE?asP4C}t~){W{IGA@{#g|y%vpJ_;8>@^nRPYD`#9ImxOodS zhM^MK@VGrpFPa~K-1q><*|IBi>`_Cu;#U$p`Xbc}o3d4Zn0=f~1hownVZZR;lP=!l zo4vL3K!|)$#+NC5x`cc(ekniM3`;}?h%2Z`c;8L;RPOw#%J!c|qKzU+0kt}rW)4%C z^WS4dS^jg;EnYE0|5f7D+R8Z)g#F2AGf&2EsrgqKMQ-41mQZJ$@np3wYxI;VgD1n-;(19DV zShttR5BT~59mz|m1nhzGQc_I_;B!2GzhO(2MGwEZdH>}}<=db|`Tw?;^tE@>>8*U( zB=I)~nqA-<|%85(m@qvNB1vJ~+PBv8u0Poc{=GW`q6H;e1 zcF8~SVXWk?8-HT$xp@a@jZEDyyt=9w>1`&nsl{H@y(}0mm<^`mmUd{2jK%}7|XLq|1u~sF**I^1JKj-oRrVe R9oMcxRZ&x+RPJT){{v7eE5iT) literal 0 HcmV?d00001 diff --git a/twake/frontend/public/public/img/logo/logo-text-white.png b/twake/frontend/public/public/img/logo/logo-text-white.png new file mode 100644 index 0000000000000000000000000000000000000000..c63f39e312389fa49a7c927aec37705f1c652a27 GIT binary patch literal 41119 zcmX_nWkA$h_q8G@A<`hAfOJZCNe#@Aei~!{?CW5U}gCSB?B)o_dl@T%c;vfcu*EiaBYtB;6b(!P*D!z z`Ed7!pw@Z=`Z9FjVn6S!(5gqoe``ug?ep87uMfUvGrd+P9r<;dw2CB?hcIHk`Yv6L zi(+n5c~uhTRu|@cMic*rU@No4#XR$Uiy~u)c_#7Q;V1B?z|j1XHGRi3kH}x7am9MO z0jHN6FI;c$BshWj=z#@yI@hU&Q~TnoNmHNgowCk!OEn}@B-ibc|?=t8Q(1 zh;N#h7SfBC>q6EOgg8VC3El@Igc)boly5SCc0E(dm>=4>w7 z6hVvmt?BEwXJ$;fmhCQi;RO}?ShvF>iu3!tz8Uj%D9(Y~}$u_6v#2~hNt4qJ=h zDu*76v*kp&1$AF4`O-S1$OW=U?SXa%+`RVPe6D`SSKj2wb`xnc{=38N;(xSAMrrr& zXeXtPru*)u6j@trbFG|`OK7Pej0UtAD^oQ)4q*fY$U%MRW<93D*3BMj-QcixStiwD zv$p3^3@V5p(=hcjfEpy!ipZ!yIpFi6SUo%BKc21KAieESO>c!RI%8e1@+KGvCJR%%U;EC(Z$ZhXM}xPQdOVwPHMl&@sWiVnAUt1_nb|Ry#g4X) z-96LB@woTX{<|N8Ws}2JmJ4 zk;fBuQDu6l)PgCfy<91Fa_2`^HvQIo&r|~Xn&h_V=6CtTKW0DwpH<&u`u(p!7Nq)1 zzvDwTr;T#w28fKgV#UeV*Q{QyjHyMd&cilPXgS6YP7pJa3qpZX%0H4u2*~vAmoLFd z6@|yN_E}#3R!2Xob|AdTw`Ry*y(vP<(Qr7-X3;(LB2<9ILxmnx8jU|y1qo;y6EV`@ zv*KE<@d0oyir)FU2wX&(j{L$FCZ0*bzl+DC;{g}9Iv|qbb7>>lwmoQ{B1PijPN*_ zl51R&dc3;tOKPTK-yT4#jzo_=&qA@BT@GsZMWDGBWEbs<6SnJz6hI??aK?f=5lQQ8 zRpVn|ZA3!fkfnsfufFRLm*#`l@BR5{Ddx_1wzjh211ji*lPFkR!g<6=250P8*Pj8W zu?%l|j%Z~52!#$?q99n}v~1+f+YP^>ijDN&dq2i@*WxuZB>WaBBw_#NC!^ex(By^l zy%x8AvdP1&Ovu128>5E>V|a1v0%VBMUE3Ikg{RMc{~cFp8tKfX3J{o|INbxhG@9hbT(*yaDw@g0wVdT?ytU<1Sl$lo6bDRSZbtjT$-VN2IDFPo=v>p~tPX`~7cB*!@2K~wi44)9i6b`$z9V&q z9LAUKdIrtjceX})t;73$CnL?VT_$$6`&7HD@%ottC9+2EIMZ+8gya?edWSceryvg` z(@9CoS=;q%&_AV|(fNb3b{NK8_ISh0tQQgBux!N}4^T-sM={oGVWFeN#Z8ip{JjSv z)ka;4iw4%aKh-q-tYxN2C&CI>Vb_lO(V-Fu0|3pE_-XW|L3XbI`oeF`p2I7ZRSe`B z<3|~gd#hA~B5Mn-piDm+$E(=%XMtA$MxK^2)l2K&640X!KcuMyuWOM0eAr+^7;AzF z;*Pzk&!7iIwvZAovG83+hj_&RPTpU=*nOyfbY?tuIyIn}yLkI)Z{>>pzgk(=rt}Ia z+I%%zikdXLeHo9wZ~)00P5U$E!0|WaFJd}nhXG|EzA-Ja0~~|AV8gA|c&0W;)>)6b zmYT4>nYxCSGF3?>x;#vvg#(@#JabP4Rb4>Bvm23R1e{ElEf;rDZ>=KaqGx;<>xKm3 zS5OohLF28iN^HE7(><7ANAWbUY9mLVO3R9}yz;{U(QXI2V3(y!{O(W>3wk6DY ziqf3c!67TkTwEnJTZzd&B&G6s>DM{IwwUBmaa8+32alGP%wcmZTw(w})!T-ZW#aZB zmvcpypg!N|L24~qy-sVb!eC>m4~wUlmDM!sm#;~j;6%_m)OfwZymxhQTw-v_M4a6Eta`Li=6Jm7MV0e z!{=;J)r8SxLp!u>AFJ>vS?`gZ;|KxhU|bN?_JtmCrEBqCQBix4_k?>Cck)w0Ry3)t`qoqfGOH_3zuR}W<*7^d%pfg%OINEl|T2q=A)+4or6=UnWP5aLAfe;@PF zY_P!SAUqeSysNv}<^RZ>P(CQBP}7-_E*Yy?WAPJ&#MT`=$xBGuSKaKH;LJArJe638 zNG(L~_ZU7pH+k=$q%q&rPo(o7H!ww2u_HxqyR-azmT@Mp{~TK^&Oo&7&;{K5+pf04 zu29Xw@%01>U8tf1cDxJ`MWt})K*D%|SA*S*-MUpT#~4^(ns^oyygCilq!5sv?FOIZ zEAtikLu7Ic@o#yx6#Qso*oK9A7+({8bwQu{c84NO!b95`>tF3*@jPH5=gq-~+h&YF zA#BOjQVN0N6bV=6UlU|_WH5Lj&Z`ntJ%KVFbDBuiGTv&c58u>3F4pjKA{U6blFxb% z>&1LEz+S#tVgsWqPIbpL7hmpf)7Du3m;3NC7mLdy`dg=Jk=~;$b*q)Nv2L4qu871U zD(sEe!4qsCIZy|2d)px)|@4!=&&{x0mkBtx!q<@d~!$5 zRX!um@-98Ni2U+HOUp<6B|A&&L)H`)Z~Bh_{|n5j3~X^3M}L!d=U~Epw+?qS&7bft zk*G$Ya^Owb;_tU`>)fY(^CYvIip3i1gYgpXgv}E?^pb4%3J$d(NB}K5BSqRJ`440%+d? z@xGw!&^v=q;R}nvXd;sI4GXKdc3tyEz~%Z{#{cq4#lpJ%*!nD>Pm-1KGJ{N9Xjwb~ zQ*7(Pm{O@|X~UG<7q-fsP-Hj#lDYEd96XweMZ%jF$yks|7EH>X3E%#amZJ7>{D%g{ z`n)sYx6EGKf&%blq-E3Fip5V4WY4`H9T6`n(m9m?wl>e5ePxvKjq(9kZo?9uRqU(P z%OC;v$_#BzXxlbl-ldbUcZ}lR>hNY}c2(e44Q%$31E1-m7iez6*sVlHoI-V4Q# zLV1n-2bsMWba{vaa&BoO-0i60JT&N(Wh#*>6wFR1z0wHAo!K)I_xnTT4_|PUW%+aV zb~$KrX1l@(|7^2*0I8@H^mGF+4}@c>9#$WS+RgfT&~A4j*A9!~>4?mImx#9e2>vc5 z^;*H0e72o!Ta7)j&MrP{ZqrI9b4vbLx)34`_Z(`b$#@&m`euYrwSOh&xfgt{A7sVs zNLjzwZ9*X`pCL@sn}-Z9)$}Ax&c*ND;kOQVdzoA+fl2>z)nzHQnkP?)Fs-kV!&=5i zy9q<5EaAj{2<%UnZhISDRG;P&kOlt=&+ku9q5M#=ciU({03%V&boyXDA4{B8rXGiy zlYNR`y$I_Dl2!1voVjpfZxgfA#5v1ya-w$J+0}=?Z}Pj0N;gNw2I~Z9ZV-GB!bzHS zMLvO(h2er)0>;cAFQh=oYp4evv2^yTI()+2&@1MJ^`>IN;dzP$?uAY+%h+*eP6tJe z&t!ojDyyU7%}TmL(J^ne!P1Iyb@RqI8)G=#8UAyZ-2Ti6r@u;6 z>aZ!^@xo`!WN~Ci_?M}O(6lK_`?GV<^1-KEE^Ys$oEo=x9^lZ)F+^v%{4aQD zZTw)FOi6TG<=WY4`ulbVi(ZdeHMkbsW5>3ER7JQhc!#wYVP zj)S7rLENL%uLzZ;y{a*_YD{SkDJ8}p&~atjx*WWsp5Hpl*ohx!yKRVprv$bnEosHR zlAZ%e(UcF?W5mQ&-Z8a*T#r8SVlQBiJ#&%FBm7BMnEZ52>bVXw+vyn?6UkuD%WjbJ za?SNSX)~F6ch;N{_0*Y9Z9iQH1@?1Jn?)C=j92Vj)1^#N?Hm;KvoXN zi$}XA4!eE@BvKNlV(b1i+CrT+*us0Xcof*XdB1mOV{*JTKlXKV}GGUxOL$zfcuPvSef*(g&^lDwrL zF}&N(2TE3(OU&Pw9xj!}ZSoK*jAZwYWPc1It_OqU-fTQ(hwX=T?hNy>X~SmmZt^S* z=$xdx?T%x>dcYgM%X95G6U2=~qlZtCF4i!m&NK&Xgi&llQDhl%U7d;Dc;e*S7XJzS zpE6Sj`^$H9z)+u9`{E1&~_@ z)~4;WT1nh{0&tV_OqFOD6ZptcQu&(6Gb<Ma|#JYg%D_t6vB=x{Et z^#axSGL!ePsZ!Ipv&a!*gO2?xCi$FX0sQ$fsMZ_ree@H|*^%t<8wiJ+CZe+8sWwBP zrABTiI_HX)tq~ zFTW9i209?__&CLbj~H&X48=iLR`%8Qi*#SE{B0g)%VC6+h7tgDP^i%e=)y8(p?aUo zRgc$akmKyA-i?LKK6iLL@p*3grM<*3cK=iPt+G3P)2z0kqPh`+{F^^T^q_Np_Ig|N zlVc_ebj|ajk`3IZd~Xxws@j7ijL+@eB7^AvtS*HwuB^z?x;x>?G1YrKVtovnf#iqz zlA3es=m_NnKoVMV5q{0#)t&hymlf;dilQYN4< zBdG9P%K|04_n3?E({RX9Zxhvc6nFyvr;4cXmy*+i0S~@fi8OqwfXLTXsX|^&l3N=Z zTERsYt~-c3hL(9CONQsyR&K_O9|meMx&1JbIL&zNd zl&q17*SPtYFrJYNq$Hd6C;4?L;+hUa!G;W6Zs=S+VKIs_Z4Denv_3cNyB?zzT(BFS za2s_@p{Ej|B#Mb-*U?tMS$oB3$37bGG?)uF)^@L|0BG7WA+&TmpwMk4vj4+CQYuNRxw`F1Nt8PvwD(J_O`OeZTkNd>(HO{P>kMf1n(Ua*~;~V{Ddre zorNX0T(0=K#QJ9a$K(dhRjbS96QPbV)#HU=5M?J(o=#dC%F3!IQFses7^B3V-;tNY z7(gx!zw~5E(J)MSPMVwDUIFqElg%Vrp2phavQXveBJbtcIucHO9o*<04A+MzNJdG- zCM-#3|K0~@9hb`xB0fTCaJK&zeEv$h_3**)GrktFvPe4hL*g5aAXLN77wcxf@W_!e zoS$8Br*k77Sib<*2(BL{^C!=6siB79KYay7%l3&>8sfk-PxW#99#xbf7CZuXXC#_< zJi!`^mjlJhHUIM?a(-rpVR+73))8L@eDf1#I(knHTb*8CvwXwDcUJ2UGvgL(iR~!= zOpQ;CRG+r$6Wg86TiVfUeR9M$o-ja7@`5n~VhimQi0#J0ima> zbfx`80T>ktKF$UpZJ?L;wzi8v7#-vt(dXPvHVV2+ojkYw?XRs8-1dL?q=5TRqBhyt zJcB2uDWKuMwRM<-Rld3aGxf9kjtWw}eRXm+r9SphF(;HgCF;#5(W8k3D?LV#v!WT1 z$Iq;0XGv=n@3^sd{UcM-vjMV2PuKh<87PAY$Bq~)=}O&B;;clj9{!bdbK;T%B7j46Wk57bzM!v zx6hMZnmEhUgbK%Ma#C0opTUl79PxF?LFd{>R9k*XVOGUD`^Cwy^5)smoa$U8J$1&g zBg0J@L#`UX61dN^+Wx&i!Yj83pw&z}70wN%zVn4Nce*X(PUbrY{@YfV!CZ#1q3B9=fV#rA~Lm-MQEfmMpTdTd@|osR7BfAKHNyl3A0cW zYR~x?X}5OyD>ZyZmF}tnma$VvtP9z=kclqtVbg|s>Q%)~H$E+QherRM__POhcA8SA zZXE;w6-~|>lh3Wj#R^8my+`V%k=1I|7Z$~4o%eRUJPi_1 zNK+H89d0Z#-?en*qt&fDCr@rCmPww?}PL4)buclHLNFF(3 zl;wa-K6s{A;{3nEyIj1(nnJ-Xj>F@cC{l$7$hOJ#P8a7~E}?dL^NhgfD|H&CP>Qar zSoVvEnpn!l?j7lv6T;u#R)tN)x%-2j0XZ5UoOgcdB%P_=|P1(OqA0w(hii+?@?OoH9=`?+ig>6lLSRK}Q>;55ZgY(_o*};utIBAwV z%M#c9Ik=)}C-RrJrheS|Gv5OAJF%?{)Fbhi zupzn`O@>@k$Nl)^0t}xRdH*M`9z|?0{{wa|Q;CF;yU3dZ-adF>b@K?)`E_c#7)e-1 zyGT`Iv~{hbDF?qhsqTU2VVH)azae{Br9goF>m9fYrYVvb4o`_W}xE0n{Yr-@c zo08msjzKiuKx=>@bj5gYi)%MNufXtUbG&{*p_Ez}n9<ZY_1Qs!v8@FIeyh~7@ zNvd0&a#pgysIoYJ{_%*)7gKc83arcsA^xrTB{$*cQODOzgYb|3+Yw5tSjJZwgK1dX zU4)Z5z`IN#`F|Y==eLLH?Z-z-UZaW(W=K05ZQ&v{&_ocoR+bTALbm*ArVdNd)`VUw z5TNT9f;250pY@TjY-jHd|A=>X^F}dNdkY^ead6^o+a5wv{T-nxO@-SrFgH?&AZbwLaa%vCfhmoM-;>4vXp2Q&E}3AI+m5>&e`4JRom;&YMm` zGW(ydDNd&`*)R+b2X9Skjb+$0Y}t9CCkkn9D*PE4ekERcxG&CxMHvUIb9i(8&xwig z)U~)YQ@6vk^W6p2Z317OdpB@PTLANAD7MzFEaEd$?SM_j^Oq`7Z$qY0u}X4oFwIY- zf?^bkf)ubhqa<4nCJZdlt)9sjr5>a4R(Zrm(S;f=*qLBwx+TC0a9+&~a$9aL%V#-r zMk0f}cgT^Na_&k5twpf?8@P7Lr(8S6oi`t(>wbC|OAK4F$12J-dS(Yp!FC(2=Ap{R zkw@G!9DtakDaP!p&+kUxePt9hO~`pqrdYcFE$J9I)cjn%86?AMSyzyGRgu1_9OhnuM%VbZ;20?0GdHz%as>0E3fpU`l z$yNhwf+J$i+8tn~%z|U*Jk#>C2vTLPZOt00y||=Tw?I2~Btdn$&VE1l>WXskM=;TJ z4QVq;F5(OZ{{3Fmg1tk9jgSP4`|J3HPRM!iSSrmN?dvX&&w-yw9VNZ?{K^>eO2TRI z=)(l%L_*&7YCPZN*f!tAhEYe5KGjxZs2FY{=2xrO%nyW*Y=#rXNgStvo+E4=EwDIF z$b#(P#5V=Y*r`u&lAfSxh9Lk}mTq>h#X|bvUu8sCG}hjF8c$rdR#TtIm-dZmB_0}V zxv~vNK^Fo4w)V`=UJQWLTGsL%eKCrE{OJMTImKB-h1H{ZU_{X8IWS+!I8*=0W<@MiN+gRv`Z0-RU=s%YeYriN5{ zLh=M#pPn$A%&Z&R#4VU9ihmbx6&!|+Rb=_G!*bKgCtnAaD9F%yapTOjn>HP$h1}nL zV4}pb_m1tzU(@{}@2+wv8E9zY*XGec!r6OS7I~KOy6p$~P5!9=)U)8H&cr+-IuQ2a zcIy}(rgpai>(QS-j2#jd%+S4#$GPE2W5G7T88p+DyOS(t6Hh^u--Tn09xoBFBruoA zt+E56FD3XV>8xUJ0#-X&n0!s;yXu!$R2ygK&oYL#8IL}JQEf4>U_q@mn;w4 z0>b}3GO?RrnVVLe#~QD7*z%~bx`2@g*55HoX15+j%6jCvRH^10Xq;4?Wqq^ z@g$Pih2WNDO?)vFp6c<1s;J<6v7EBp`JyK17B3!^bgCtsAK(LzW#>uc(l$0cN#{0- zmtukSw=hS>m2qZ;Y#^`3O_rpNon}Pj%5&$O(02UeP6aRp0IS&>hHPYFtA6{|7H{iPFa2-zx%qt%9S;NjqzCi6I{4G^u``EE+wkAR zSR?qPyIpeD zC~eXds~cR5(L7Q3$7sI_eNQ|pdRs{4mk05}xfVc2iey4qwae}3Il7TDYdyO+)dr*5 zuimZLBdtW#E9&N>Y!b7Hpk{g~N24#hWkDrsOf&?JtD}{r*0k)*D>7WMRQaEr6-5u;YZnLC@)=XEvPza*85_ zBcEZU1K=m`_nm2SB|G$;S6&6>Lp`&w9IF}SKF=$Ymn@A=hx^2V?TLwoclYTHC4Z|VOp*p);_FcZ!isS5B%wtJ0ugG=4@Nzl=_-z z3G-yu`m(J_A*`LhQ;=fR`X;ZKw8aLM+vz9d<0gKC=B43K@-hoJOE58XgK@x@)drzs zVNahcp)H=dN4&}CT>)@$f0-8=oWl8g1{v2+cwQ*EkZEUU5!eq*!sZ}xU)WZiPR;&E znrdlJtPk@1rY{XOxqz&>;|YX_s6g4G+~VqwZJFzlB-OWiWm5hLFRRR|k_Ea5)bz_S z+JG1s{ESo@Hj=|j*5120z<=1tHb^k{Z6TKb981S+IZ!wvwWEGz^l#1X>%8wGU zvd$-KRus(Aw-{zE@zwY40P^`bc>=@d`aowz2eDus@>|^ zhsynOoRHS}XgrNr+3@pxU=zeLKEY?HRu3&sG;J2w@dmml4Ih@Jxj}XK7`16H3hBFU z`P|uBN@vmyMcwbuE7kFmG-lN7W#3iWZVKS_lKKz#S3koJr_oOw1e~WP1P8 znGaJOqnt>X#okQ}8Ty9WJUv$nP)t=3^^!u5SKa)C7q@L(WBAN~sSx(n9~_d9;qB+cVSf_RVVZE|Q0r{|0re&slyDK%7AO-Ix2@i&4)Hc=GyPb!k|x6u1Suno`OP z6(4W%#^{~39+7lBe(Sk~HvN!Bl42dsrOlf|)JKeCi%l}8u(B*QDe&zVR|s9tZ5?Di{uw;E*5;i7_P$A!ysaoVxA+}q|a zd}z4r=^enKvVHKfV&x&J4<d%10ju3e4Cg9g?kP_d+m){9fSy^-E6PrW9hH>&$XPuz_pNJ5JpNR`bo z%57guUi&H9DO8CB89J*BH5Q;zNt1Glu}|^ckwJ9cJ^#@tH1ESQ zjQcj~$w&{+bXlkemQPYi2%yD=w}UK|ICnozXvnl*jl8X}I||~z2)Yf9MR`~Yx9%z} zla-y=Tg5XnFJ7u5(qQTO)y>9w0K9a=7Aj~FT{NBc%^PJwGA26$bxLv)=a$%4`o;!!=+?yMw7*|RxWzcPVEkuu)o+gS&;#(dj=k9t?;8O>S$6#K`x z7MI1cw?Rpo?fdqX`D5OSzo3duf>vl0N&m>x4G>*I6V#A%T%Y}Z3@5|8qc-*zz+;+& zjkB2rTlo1sfL<4G#Pvs*!KPj-R=#|jGhYz(Q*64JLF&{{*iBB|0z6R9+(_6^JZ8%Q z07UE=J+v*-xH*P$i7y>P9x%m4`VX@N@5L5(EPS#nuHXa2mhp)wjA3mRp15${Y?QEX z$<^FK5Opk<><0Ddo>g3{Vn-ygpsToW1tJj404Wap?PE_y*(3Z~d#txT`DbP_*a%Mr5T6Tj7q?yh_zs-pnD9i``m)h1kXJ zDzLP_T(_xZyxEg|W3lW8{SEWyRTS5Dn>$Qp=MhqttC&0>^^^*zLDu!S3D%;oVeMNQn?J+<$6~g0o}t0SZSOLZlDiQ5+?ii)ykbGK+3(M}C^&;aI|0$i6KbQ{x-jKs z47`$tAiTs*3g0J^4)&dl`54;6AG$4bmKl@ak&XQ+XR}Hu z=aFpWrOZ4D0%&sn)~I$86fiTE-ff?pB;z{KGou&qriW)Ybs`-9G3t%Q3}ud3i=X{d zhuTRH*J0R=a>U3%^(%70XuUNNr7Iwnb_YczwTLjeF(4R|@R$#DVkp42%`MCy%}FX1 zL3x(;y-F(+BK)ngbxH@uSbaM}S#6d(=9I7l;58(&&FiBahqDA2=#M`120NJ9YrWt> ziynn*D3Fmwj2B7Eqf-iT!xVHQ-|dTAA2$N(n(NMAL8>44^RANN59uy5Sj3p7?&43f$%|^7Y*xx6vfLvWdOzqn~o=yD*0!vW%8@<_0*)uPHJErPoj$G9h3FF}{ zTmb^IcG6|=8chS9fUdo$ExASrSu8e3+>BkAKJG>cZ zp)Sc;2fl%u+u`pE^2aCa2U9KZDcpZ^6PAZ*#=yvD%apoGs}8(HxMy&VY2VG78&f^C z`11>Q4K1nwe5@*c$mDe1pLV-B*m(TvpGlv;3X;F(;o~bFz1M5)BwtBKG2iY~3;B7{ zj)lr{k;^TYpB+? z(moEBLJ*Xahb7xK4Ll8&ruBow!$?{1z=ld4iWyqHG|2td6k#05`SGrFN(z3-bEj#c z+?o0h`5j45uWCpk^o5|j!6t1~I6uPS14kP*aw~r;4V_F$mes?f-^~X7>8!bsWE(xB z0v1#!@#`pjjW7xrq&V&`ZHX(byPgZ(tXqy~hO1HK&Nh4HoCSC>7PMUdV!6qpmul0L z0R&Z$osvqja(GI6df>s7lI{gVDH-Ztgug;9DyFx<*qv% zkBw=kwZUIu&^G7_lSuv6xbIm$Jk>^+jQ&ilAngy*u+0}a}mxy&;^>N-Y#5bEa(MzY5O(XWxSa?&rOf0vFfC;>88a}pZ}sf@9|wN z%>Ooj@Zj5RKehKJ)h_%eFo!GSg|*k-z>OUL2_4iW7bvuCz!U5h-pEG5q!L^?Q!X}f zSWjN!UsA9-o7AZs6E|p@0Qx)0a9n%T|4*m45v^`Wq@gDJK~z1!nm$)?8CO0G)6Upj z6pHtWLL9!F*L6tythE;)X-r;ut1Q=o0zw$7Lsz*EM!)U1t6qdO>o`0)I4aSZ5h3cm zQYbbq4M{Fe=U$Lz0B}0gZQ14-2X#UKAq|4oC{}oxrzuBnUL$02!syKnGw;e@(i>R9 zaD<)H4A4f&d@3*Y`IcQCbY?bttI%XNA{XXVS72<9Jr}U1t~c^&&YP*p|1Z9TjpvQ% zht0JmO+2T&QMOI0yBa|(93d4H&T4};>V1BFEnaCG((Q zm4e09yl}IHdJ@|A_3kS{JoPk#T25u;hPNZTN;>ICAx5(0R_T~R)I{mYOE%N?V`Pn) zoKXP!=;{^|f2?|U$q}7Gnss0$SIe05@p~`3+|t7TE-`28;SCUIsdKx!% z)lrCsTPDhI>cXf__Hw`NlK}NRm49M?M&JT-S?;!2kqkK6;{AK8QV<6M0IS+D)#Aqy zg&El4fXESVu2Iz`4I@IsODFXEQQ^FAI^NV7Y76D88X-y?vM37&EP|%e*&+AH?yq*? z&44B|pACi(vn~F+Dz-?0OD#F;^SZ?RxTv45G)luZb{S$afr)H^}l6H+C)JJ1)PS zqLpzOrN2$llU4lB1bmGz!g_fIDy>bGpnzJN>Z?QA4iKO9pE-KxMMPq>CN4M>D8`!r z_0lmDXvCF_94hq-C)TO(G+1<)94vonBh2FFEp}-b(eopD06xP4({6Gs{V_DD%R=es z%c$m-U$WS-GNI0;dVtW~;!Q2IgIDfeleW^$Jb-a!EwM_`+MDEV3=?##5^HUb2?y!Q z)h6E_>ovyQUhfBpo48Ite)-N=lw?fuc2D@YPxgfQW=Gavp6+IqI&H6ACf06(9)$Zl z`bave#x^t}_x}9&ufyBgq>ViAJ{Mx|djDmIjCpvsrg?Ve*WeZtY4`OoBlbSaFvaET zAA%+#w$fsu@mr)}e!l=5eR>RfO^}-=-Xdm5rR->VVyflDEI73PR<=}k-!B9 zt%-Q_AYShROpPH68B`nMNQmRm5U)~8y0#5Mw zn?;X-xUb2NzeyWnC*sx$#K#X&e_F_Hs?JCgx_s3U&%X z9TIPyo_Bx6R7A{hap(!QLWw?XH-05=#Zu8^<} z`M*Bb@z9fw&2Z1Kg$e$kj)pNEmh7me);}R~Ct4~{cL&8SBeOHm?O!L)@fS0b6&TAT?=Op!tKiliPkgc`O5|nB#c3 z{#*_uW^xq&Dx6jYa6pL_A*}jOf)CK{XS_D5^!}j3=p0hUfAhR0t~>YD^pQ%{NTj{% zpEUoTp}I!FAK5zO2zzc+S!~Dri6Gc+T0`BJJW}_Q0Qx9be@7=!o95RwLjmg+x&*V8 zc$!M-X+3lh);OZOB|1o;02IdRv#cZ^DK3iS6-mKMe4U(ooRGLFUzBK|#UUkBa#bcB ztq?8)Mlop2q;XD~H2-NiKQWVEJVNm1t$a?q+oU+YF!SM9y!*bGqb#e<@os#!^6{xA zL+{n$~13Jh5lsKRwFE(0!cgf7o>JmxpAsnN5{>rt_2HhhrP4y78`!6!U=HWLY)&?0t6>VK1tOnl5%Z zOxMRBO_-;8S!KtG1}#x=)J!B9a?32+oao+*z^aFq@-?<6Q^G)_q4-8^&RKdYHSu)?n*G+a_F{YDk2YM)Q@f$;@6BfDm92nn*wH-<#( ziJ21p=4r6Ux|hK)#iNgAc<&PcNGj0tB!E@EOCzayKej%Yt$ftofHQ|bs4mi4*z8S~ z(`2;?+d$FR;$DrnvnPEeb-s)UGu2YBr7E`OH_2xV394TG&8S=c^XqPKE}f`OOOSje-&< zzVHR&SHdmg;@#>kQjk2Ccub&T1(%s%Lm^VTrH()K@E<;3B!Bmwz5~4X>W||66L7G8 zM|)qZS={EFx9>cqO|HBM{0}m}odk0w_b5%!zFM$H4|<{eg=Ak*{G#PD(3C2rgX^9LSXyU|{tPGOz z`i_+Nxlj^y|~n_%`dAQFy{AhiXNOb^8+!VMjEDt=*@3zE_NX#(+Cl%30xGe*Y}{8(Ar~z z-*%$MDKnVZ=;&Pl2Z3=xrY5Lqu(HYG)9P#$7wYm_{U6au^|b-nS6tZ=pKT~L<}gbC zD>4l9!s`QH@4@L`9%JJZNbmc(B5>A^Jhf0{!RfgQ?w;!Y9e$&yfaoXf@ysIxYx8<*@#Q!$jy8^cx6r`v= z6NvqTyGXxI7>0&ho${?^XUlweb!nxoMf|Ow`(&iB6uIxWBFe%cP2kwPf-QZs8F#xv zbXUTsvdQgcrh2sFti9LyKI>G`BuNws`KfT2v-#suE}v1=Z14r1w|Jx%`|jw0)ITuA z$&T&9Xilc(r|sw5yvo-Aefr0Gn__2merD|x5y06gFm2&RJTU4CUIk`tSrNM! za?Lc%^sYyBhiQ{UM>2+;#9){K$^=2v(|uMu_=e)zF4 zs+K(tA&h+W64%M7l%-By9S2CE6Fqxny!;#j$)2^O1-#uJ0oFCHZWW&I-^9vF#g3?Q zID7c6898R>(;FQPM9bRY+uo6vDW0h5M29e9Vs;TwG2?niix;Jf zD!g^;G$1L_=4Bqy5vG$Kf$KhtS)Uw;HYoR>PwDJ>Wu0$y+#Xl$yGQ&DayFcdZgjCnuC36!m_wDt+V zD9kYoDqt)nKgIM4%cF6D`8lECUVnK;$D}nW1{|z#pLcAgpni|x3Cf@H8{3Gxy_~6J zYxNI}_|R+yKD>=BsN0!FUJ8s?ht>Rcx=Jn81lKDYd%Ne9-UYOT(4Ch=4{yjER{C?{ ztJo%|aS!w~r22gfL>=dZ;tSnN2F|A)3DWxXgBNTOU6*W*ik?rGWpO`)$`z=nN4q}8 z>3;i0QW3B60;smQe}yc(Lf(C^?$$VPL{uc5f9lo%EY2nl`j50bcXVRiWPoZujIq0c z-{~mgKs7p}KYdi-8KiPM`K8k@vtb-?^I0pFJ75QdN1}M-AT@LB23rMD!!U}&|{qzvpo1N zjayRo9Uumz3_2{u6T*nMiQ}J9^3B!s9J&F0Iz5Fha9j*LNW!(EQ;F0|GfG+g-TeL*E;Vo-vU)Gd`P@xTp^U1=D_s=kW`H8}sB&Ki zZ@SWJKkpTM$Lqe166cN=-Et*;(f|E=`i+17JNkJeRgBD3Mm(138@#Uss_Jl!@1r^W z%`_F^WOg>ummxd-@g@zo$ML~ZOcRO3(FGLIR7DesT~NieM){NoWlbfacAt<63h%yk z=!tb!w$bFqU@P=Q41#njVRk1sRhhM#Ju?-aYwKej`aesXyQCA(eL3mZrnY*AA;UyP z9!ynX$ugr83|-NC>V_<{SgA4#4$bHjh4Kq@LM;Ar`fir)m65A1yPE%pum2;IIDfqM ztuLWZf9Ns(-CuniMy5e29ZL57OKPV&Ub;t+EP3uJNT;9rFh-q5$sgLcpJG_)U$>Zw zX(EwGBoY@B8)z(bFoJZf0~CC9u-VUMMv=sCp; z3xe>C09NCP;shBkd{sn6Gfo9W6l7FT0cKTK^%d>9C=o_^AGE|4_2oV7X{iUILSVDw zutcw^JDeh^HNyFCzj=#3@9GnjxG;RhcfXu|`p^7Ilh=5{X3OB4UGde5hMU81tMo&J-PbL>^8*>mOCsav-im zeclq9R!s?&$oQ1#Q0=#?s-Z<=Nx=b8l2>056s$5mJB(AV zp<0ijZ4{3i_pC#8S9J8KwE>6(MRKRUw32>N18LMX~gp2e;Ni5smXEX!-bp@Q`5|f&Km!6Lz&!UkuwWl9Fj6kw_#G z7ZV!`>n0^Ah}thIZc~b4sH>xm@SzAEkxKUKUM+Or)^&$Th0<7z*~%{c3XIjXPc=$) zD~nC6L_R6}Sx5@7*e7cx0Hs(UoZtIMJ$S0(J(=}IiSxuhYOO}ZgD)ey)Jdqmb?i%f z<+geq395E6(BJq2-;tzrAMxrx@gn-zkA0e+_{5Wh^9FBP*38njjDAvnN~Gr=F|~;z z1FT0zf!9*#;555faXj6s3;@nOX@kUeHc|Uy^?fVWeWD=i2Ft$Y_F6ax1;$KQ^@_ z66XL!0X0H%D|KRXKHJeB3bM$c?Tpe|EpP(SKCj!!qMWiXD{&w(d{^H{Mn*Sj@88$W z=h=4qo6|1$lM&S&x`@yoQ!lsU$6Xm`C!W@WM<9|S(Va)3v~sANWHus!`e|OLrK+XU zyZ)k6&{_h_de7o6{ZWNAS^^jSL_AwoY0*G_)ik4sm6PNggQzy6fwdSGaIgxly;76hn8UK;kFG6zy+iRCQ zK~(RXF83YAbsO|R94U+l-&)4iYt z{y#_u9MduJ|1MXJmcjgXS|RXv<|NtsX`l0|PMmJW z($ymiU#dPk$yHLXjB@Ci)u^ie%o{Z&gf!Wf7R(`ZRYr}zyX^afDb!V~ORHvz=b^1Y zi}Ko+s_y-ww+s46ZK{;?*eJ26rA|kGrH> zKmQGrT6zN|R)a76voE91{KCW5q}=||j%OJrJTX9u#J>r>}Kzz!fb2|s=-!0G2(06+AN%-uz+ z!xpWEd^g-h^N6VrPnWxCJ$QtS$RBjH&v%PfkJGdw;O~sTkBgz=Z{gDR)qKds-p3x^o`; zSlrbQ^;Dz!#e$+dri#KOMRfVb)%5afzL;J%U0!j`7xN8Qyp&#e#Y^~#ORu3TH?E$M zkxzf_zwmE;?o;%+r#{CIJ-kB?J^T`bT@8f`s_XWS6igFm2Yx8-r1kvZJsUQs z%RSS+wEcMVVNkCQ67U(`L+9CMaS+kS0@ST7T0L%`UhA%d+y_1MT&@GBXrFOF{?6>i zNm}!XaSPZND}kDIJycID5G{S61g?@Ybw$*LE5X0GKdGipP|Xk}-VzAUQgs^98H6o6 zh5~s~sZkWotEjFr3$MrJ1z$XumD_^XahS$IJ ztK#wh^qGffXCkSe{_Jnl3$MD76061LpLi+#$~%AEJ~O7?rA+=s6AGeA{^5>MQYL!a zx73342^PHKwE-eumXeev&W7oaNh@!)IpG1gLkyWs)$>dHrXyP8o*A)$Zv+tu|`k3ols z+K6W(oeQH0993{vPf=Z646){w2CGx3t!#a!0|EBd11;q@LTUo3nwTz|6wu%Qia*Pr zfBjd}7hL~Uw4Zq8^*8Ayu^zni55Jf`^8Fv7s0i0A~Z^(O+dHNOiLTh^3vN0qa^@+tx8lcol5mz z_wxUizV4NOZYtYfONqmejjK24rQiHw`q)4J7(446hryb0sdDt0>Oa=VQP99Fop{nn zWM#-W#pC!!XOC&((3N~Qr^^G=K4)qFEI0fu^njlN^o`gN{Qo(_JccJTG{>qIvk|bu}MZw*X7PW6c~Q^j{{EA zdf;gk2NCP4Zrn!~fJUIFOZywsT5%35DRpd;mG|$#iNU^Lqi|Ov$$LOU8||nPCDX<> zF?(LwtLLBUPk%A#i9O4717&?eki7@myLZ~CfGs0x#Ahj5obO{r1q}tIh+tSMz4FA@ z(i^|{Z_|m(UqOkZiR)i?{iK{0I`in$h>W74`Gee*H&o!g0Yp%)H~F1?KEv1~BJPn3 zB{kL3V+{OJeGjcKdS}1Ue&8NJS^wB8r}#YAYtj_fDo|RXmJ(li$+h$czu>RY?Kj_-r1TizCExr~ z{p?vMJhju9uAJ&92Jy#KEtRgU>URdCN!v22lp^`7LOrc*B!j4mDtJ6`>;R?lLv(ma zsiTq8_w1)~aftB%9Y36+^uQxuk&$G z@crcYPPzb;rfjzIdoiMDq_j5^-8tisq+%F!cA%OI7innL+3 zGsSdCjkL1eX1y&IkQ&=UFKXiW01C!wI(le|)?o-jUllIsNAZy3yvxkzh;^0C_lhlA zJ$B9~Wd1l9@Xms}E`*#G5KA>U1*vQ$QGq$BkygR=SmtL}HW?}_+5n(>+PXn@QTit{ zKamn$U2eljDVgy~T%irswOzjS#ox+*{L6ogF59?{62}W0S6@O`e_=DVEw$`ksF&`U zMkA9ERAMKuVv4G+Gnk#)cM9ay%lD>~qO6}d7B~h9#+}Epq<>u1(gE!|y$;p%z?AdX zSjIo+R*7RuN*(7-PK%SqUb?pt!!*DSgvxzLyfm7uUV+1?sr>e$nFO6RK#@$)Ylp_qE*L)m1S<+7(xc z9#e8xzuNDXX@EKgK>7YII@)NY;W(D`kF#1zh;iDc_28hW^6Mz$pYw4&=A_hd*ZEX$ zHgxI}BWskDRNCYveHtccOMM(CLfKFqThG?998&fTP+wm#cixgHNi1K=o%-ajrO)6g z^G<)!i@%MwzUccXalCQ$7hOlAF{uYeR2s*WMv{cMJKw%|>cBHsKfaMwPrTy$+^zYE zBMumyPSf$g)^ypSV}dm*X9pdvoWG7pr(5Y@U>)!EzH>1>B`KZZozwAn@Lbv;tjCnt zO7-~dcJ*|D(tGbI73oT<_KAkdTHJjv-WN(?hU#qrP*0)Ix>{>yC??A{we7s{sxPNE zy!vlYB5~ChUKeU-nVFxwFLdtKw=%vt`OT?sy{4maisH7!{X$vFKgt*)p^g(a>G)t> z2ABg45P)r3J+^Q%aM6I)jdipX?755&SNdI)7;#Q%Athp>EC^pos9#%IA4Vvcp^U)V zV;*46(GQ9;end(cq1`Y-DsFgUH#T)+6vEMsv|e}FP5fVd$q&(`8%M<`o462M_L8gU zl4~}oIqWG6ODN$xq14Bg-L=m_SUHyQGJn6A8OkH2FcB(oWbpu{qIQ(AMG43Kv>t5H z#l<>ISlfG5OF_QgNr~N1xBgxiF4hlfBS9I;re1pEfy+NQzx1h4<$}I zHSP?gc6=^W)-*pISzw~mCMAw4wkSW}5vOTACa87Irhf)tzFJ2a|K4+0Hcx(^9XI3e z@bhA$*yMU8jxtQpQK}04sJDz#H0F(Sa(wc=3ao`>oI38$*{V7b3W4cXKm|)++bHpu zzVa{Ai?927N+d>H`GqIw@n8KNv9F1BA-C_84|TFH+|Y+g-cL%=8y)kVSQx#fXa}(M zIlD}cBv9@<&hbgd0h^QvG!xYHy>Gpyt2TqRF}_>p6Qi^bSO+QH+3Os5^p$SX#YH4a>8#atw*{7PFxIYhSYU4|d zaoX4@a8)s=6U%U|}2zf6~8UuohjSX_OH5>r8|h<#P@1=X>nos#x*C9ysd ziKnLrDsw;45`44q#ZATZ2;!iq812X7!(>XvgY7Xy`vi~};Ht*0xZb41#egeMem!D` z4gnfTnZ8row0iQ<2;y2R5+H(Gw0i7yV8H{lUhI(V+v(kZN1hLZIqvR(P_NTC*h>0$ zP5W`zvn{YuMvaJ3?BuwQ=%-<1tV%C#xaL;6>4krW z5{a{6}GIb-*+E<4iGQ-d|new!b{>*jY6s?}XU5s-67Oftq z_ozUgr1hOZw(sSsX}|VmI0)X~$wm}uy#)2G(`(-SZ2z4(F%<|$Jg`Rt)XxDtbnOvz zRo9xhuigv!xaZ|mE9`rz9~=2SulSxUqb8mei>oiCW_DuFBrT@P6GC#$#6%Wm>ZNsB!u+8^4cWZbKIj!jDJ2hREA z;jp2-uj#wf-sh@MYTEa5o7RVQ5U6{fZvhyv?xgi#d%E0lE_teZ#XwNEX+2e@cHElE ze%INaEas+XUKAeY+*=G(K^&Ckm6AK~S?uD@dmCly*`>`*W!a|~aY`~c_eJ{DsQ%cE z*WSuETze}e63+%3C0a$@_d3mKIdRb{G3%Z%{i#od5{r*&XFop9RN{W02-QcDj^?Sv z;f7qC(UjZM<(5{W+Hb|J{cxc4bsL?VOE__Mw3CNdO~>?YN0pQg*lRiZLhz<_jVN7H z8GmPw-;0(?ut}>&Q%P@I1t}c?qgVSIvqP)LTc7Paqj99gbSJiudy|_i&y*vZG-9Q+ zl4>ebffs6F1D{lL(x@o`S&jVCh@H}rrHnjN3qNOmMV9ar&kGwP%E&JDJX2Ls5&47= zeJG%DZLv_ioYq{98K%@8>*Go@F6xM3T`ERHBcX3!(+@}c!8|$Lyn~L>RHuE!&UCpA zg!HJC>z@y;?7Qmsx~}LZTGQ*CdcFnL*eZ1Dx%x5p8~7X6%t;T@YT>HsGoS(cjc6Jn z)gS0K#Yv4ztw@SVPbl0=Bde;I>a-}3Qw~*By6W1ljiB=Qc-zzhS*a6g<*P2ciC*@? zb@tsR4kw(DE`6HQKr;Jn8m2lC@=49PZ{ZVcb$@Xeo~f@rxStY-9&1)hcgR%Ied+ny zD+Xm_)ju9b2~9b?l8Y=9nHGtm_A|{n1{zO8RVo zdfJqYEbTu(P8~CqbT{s!)#K(>m-CTau}Q1NeS7?Gdev2#i$Y2r13BHH)#0qFY2jg% zsFm=oT(62Kh^Q*6-e<}_-@cdTi}j8MIdxLXNGLVpis?@}U5eP3eMzdNi9Mh``b3o9 zb&Mzty`@f2xs%O)vFT9k6QbH}lhjzDQY$?3D>qW-`i z1Pl>Dt3)FiCuy}<$E2yfl<`l}Y65s&dsrQriepQ(JZ7Q{ly+q+YtXj!s;YifQ8cu>>)l6HXsb3guJt zOr2~lgS6^6QZ4W62vP$y2j8bgMDia*{rk*w> zs`Zt&UQ>&oGPnM9sg@@8h~;CCQvvC;K4*`Hn#%eTDk{=(tBt$mCDhSn?@v|rR7XUx zDWqnU>V!9OSh1!bt^@a@;lO^~L5YSPTCK`+=m3R(9nn!IX*F1N-`@@h*z;kFR)-z3 zQL+aStNhzC`)rGmQenhFg_>!mCtPzc+b_bg-`)3K@-K*-DmL1QdoHTQQ7Pfo@uZge zbM=+4r9@&cc=Ff&3x&dIM3bFNmT=T7$wXOyIk@$ENuOxQIpv|hG+h6QLyT3&$Q+2i zujc}K3D;qCIp{dBClD7I>qw7SRhfH>R*Svt8RPyfgb|(iQ?LFOD%Z6T^bK)*H>P7GbIwwhvj2WkUaJ| zH8wRBR8MrGeBa2V^^BG%%g-aEqK_1}Wi(DnS4=r4k{))fx&(8I4hNc2cwF7*4SQ9- zjvb(yZqsVf%K10ZK4RKlJL%k{)nc!tYl~Kgbtu{wf>oZ_Z267iq*N77RX{cLp6ou8 z|KBD-xw#2J`edY&-JMTFz8wVgBTfn-{A!Y7eg2Zg^}JZDG+82XMDXOVehOK+c7e&s zO7&c+Pk0(*pWLA@k!R{EY4H;&kXbtyt58%EhY{%eTIHGU_F*AAD^@lR0}jgx#Kpoo zj?aFVeOGNZI=vUAa<@rmpRs+=RetQ>HmwFBELbaE^pEPeaE?%Y@jg;ab?VVlGN1ee z=RJiv%G6g8?hb!pj5t-()Kyu=PwWwof9N4C-`m9qX&ELq6_C#%T;J4HE9=A9v{dsG z4gI95o<xzcf5VGSV=@9sK|W>ZErsho0``@RhAAqDr&usQ-2H5h{9&XiarCHac|WzO z#2)eZFMO2Cm{%Gms47<8uT9a{+wHqb=pD7&T{*Q@6zbvp77-=vJ*ugg9%gLO>Tu}D z&We?dgN$uT>;?DJYO%SG>S80Mt1PeXoWnG*RkjOl)8W9X(j87!vhXOa zl`@^B->xky`02J{zb>S|?*)&GE~j!U`I1-$_qA(4F28g$NkC#xc=FdiL8fpTSS$ca z{Y>qF*0o%aq2Eq`#80tMr6>EUir;P}0;v`g(H@(~>9nM}^(k>!vC0z6HXTkhWn+tu z7Y>`UeX-Db1zWKBDhXdBl-qRSSaliy)Hy7>s>)0wdiNZn8855)-n8TUpb}H{$Xmv^ zDVg@0Pj=Hv_U(A-@3}66>-K*qwYEIyDCnzzACNZng|{U0A`^SX%B07dvrSvC2~ZVI@0F*|>*}7jnqJ z9?(os)1SQdy=8(jd_kQusXGZ@f5)wq-;|{&)3dqj*~;w; z{8qbLAIqz;iN|t2du)_0E5n%6h>r5!Q!n)=63>T6fBY9>!jp&U6K3DHl6-Na)2<86 zocX;UwHu+TsEJCy##Q36#G%8Ae=z7A%6tb3YjR*8Bs_SKrg0qttU6Zg#6Fbsw`jFE zmw2X(5n4U2YyXrUs_&DUnn}r{pfLFf>XY^D*>j}ED8_mb&>unlJqNYlR`-7ELp7l_ zk$7G_`3oN*xa|kC(=duuj8vM&FX$!J7$`GLVH{~AvL3Xr&$X{0FXMJ6w24EAO2Tx2bbRm-CH4%QaBb6SaiMDGszdcpox`#jBeZ&$V%mwMgd$qBH;+2`WC^#u8Kv4d z(jcp&jGI!FnGQamzBUHfe2 zC(k$a<)j;)^!cTBm$Ic#h;;}Yo(7-946FRXIPApkIF+`ujDPM}b*$L!=R2YlW&AB# z9nLkLX_FGGhJII!n6lN}i!w&Lj>so8j^dijFvSUDM=dgnXo#1>lqZ5)U&HlTu&z#q zT0XTyiNtf^vp@D9x-zPyaw&6HzL8EEr#q3wL=hvNtd;wRRsbGID`Qz^sIG^o^E@%b zCan%TbhvSx$Xco$=ZJ}zt;%8TXhh?DOW<3yTHH(LhEz;fkInW^F_p6s%T}TnUKBHx zltB^Ieo~mAqCZr`L-^4*I+pH{YZ@0_K}V5#FKT`2p(Fu`XGMMNaeCtCe;w1D#Dnu0 z)0)Ic=n~3jrJ+xBDD{KLx+1DXRdrdEZsjKB1|ShwDQvWhJbFNl%T?w*PA{srH%5FzE@| zrb~~H(CtbpriT@)B&LV@k5rn05_`biv|4PPYdL=nliXHq{7RfB+IOX>x(VgeO79jy z%J%ym*M+(FjzR?m>9jKH5TcLgK}egjUgj5m>hWv|N}L^!eE(0F``%Sj%`kHX zv_>#Kp_EVFdx~&mZPQb_}NFg(dhgN}%F-s&8#|&#oZ#bXHO&1h1wFeyM zk-Y~U*A+&@I0a#(Ad?pV)D+I?GSS$Dl2{N}{IK_!DgDt`>WSyubSRCP>~T_JJ*wFD zna>?3!)Ri!`0S5=kd~kLE%E+P8cOvA*QS~ZluwU@s!;x&WC~1uP*A6J&`;XR_RX~~ z2sIVL`jki{62}jxXtg+3cl|0u^-mx4ne@jU1ulDXbCSF3O-Z%ieq@?5qRe|v=@2DV zjHB{se4@xNg z`9nR8epOru{ijv>T(d+XkvKkBLv+-h%lXJY-K5pwUP>Hjl!B>GP%$GWsu2T?i88k` z_b4guWqwT486%-w4OK#lUwXzsDX66&6--ZmcAFB35uf|Wp?S# zVI7!pTrhn;50zn>6Puf!sXOh-vrSRL*WYr+WGFG>N<#qu5Y|uK1jW5IfW3!R%lu~^ zrl(UiO$>PS-TxB3p-T+BRkM>RnpTP*;-VrPUwWhzO7`T=dkx%gvrB`dGU2%jxra1Z49%F;rb}i6Zc+KqT%_X1eT28rYk@3Ol;EO#wH~adjL#O zt1NRrZ#jR(W&8^@c_lGjJ$BkZ#p80k|5M4OScpE;e3BEqPD5X*ML^lI-fya9diH)* z<)ZG~mu`IW@cyTN=iVd(30i*gx9PL*{$C|XDPo}1>s(j6(dHGf2!LNA3;hnq7-QoUgD?3VZ;ut z4u_rC9d=@!SRkVTu2$eAr;frE!qp3chcIZ(;w|k&#m>I`Bb)U{?LtW|jGhB80wZVe51DO;Glj9%k&&>Uz_*XtgTR zO0b6MIf)~P=31Y=J53#26-nHpv;X(B%Iwm6=>pM+?TUXQ-b|^=D*4~AoJjk%)}MX* z`L_ru;{uwxQ* zntu1M{R8b&wl9WK%1M>iN9>Dz`VdZ0=NBiIJ^INfK6zPw2-eqfJrVLv8Ie@(N$JX| z*oA5N=r%30*Ywyx9{n6W@)!PJGL`VjlE}~>s$Ux`-3xk7$H`A_dLjhoGmK2$Q)=SA zexG}Wsr8VGm+pOp>5zje)(Vh{=^@5@X?55-q~-j#QX+AFxSLj|-fd3*J>4`uFx_t_ zQL9pD@1y<0D#umki6l^lGJcRup&p2@9F>fC($I_QCMZ)wZ8;xrs&P=NWO-y1&rDMu zAw?J{#h5bn0n z^oe3BRN-2&zGxn*Xed9yjSqrrZ3Fgg#|YCbnTee7_=_7e+ho1h#DM}n|eD+=U(o_HT-x<+_k%@5rQo5-L8KvZ-M2UvT zsEB+r5({;-iszOJnF-2NSgbpdR9988J#*?4R!Q^IVMhDGSmjymn+{o6{i@2aiQ|L) zBy_v6n}}}FYH)g=&5`@5zV1dNrKy@ybLA7<^mt%yPVyP|MkQ_fll^*!f;t$QtnM0a zem9gb@=U!Om3un?qJ5-ysy_W&cV|ie2;=d8^uzST5B-?u--?eJHKG}z`0kch@@Z3= z5FHgKPCoCx3Por>R8q|)C7bxfQN9NQ_U#O=eVtF*Mw8Y`i9-n}JgZhs@1a8gxSO{q zk+=Y$-*KB(gPUC)#0lRftp@kfJ_00nhgOH%DWQCH2MQD;zKOl0Z=*+%L<-x9KF{`m z$2}3k_>F{`3K~7A9EKALQbC@7+ROPMu=@Pd4}Ci|^)zv`@c2LaA$t7X|D1YXC?dtg z^G2&g&u1r&FfLixew6eXmM9qOeDtVAPDv=IM1$ID1a~-jGE&->wQODa7$pufRy{^; z3%zg$9jTTk_6w`}Z>o_}HxX^oYOu2+Gtnyl&K&r^G3~^6y1ZwV6(ki(y@c;he2xmd zm-8h^K<_VQkOD&SKEnA2#g&3^mfk8r>^^7^S~W%~N!3t(ktcWP$&b7_`%RA!KKs}I zHa+o={yBw08u_Faq_2cA1bI_Xg=WF}PGkusd%d>tw^*kSc(B^Mw*XA?s*z9;klg8N zsTcd&k!71&l7HgxVwGh!$2|wRq(AN3J1Kih6Z?nLw7M13KhnaYRJAV!`B1W-;fj1m=4C`<|jSVVK*l6&`&Di zrjH3t-jm!N`${@(S@Hf;f1X^Om6;PCUw7uNoKF8dM2SNSl-agvwP-&W_s{{v^p$T0 zt+!Dku}?sY%&K}#w{X1*a1qu0J&W-P!kjZAR#ak*1?r zrOdsL)D+Bq-|Y8Zdhb1>_779UOUCA%R475UepNPRf^Gmp*?*WY)i2B6xtGp7bVoW; z4k?zu{tJR*RUV zKe5%q)X8nj@9*w>ahJZerPN0#aoDlya(=@Wl*t1FC>M88BC-ECO{>AJPzF~)Oz&Iq zM7VotwRqb>i>Sljyt92)ckOp+zj4ur+~nj0byvwflu%uPyhn7Ld2i|H_T$dZDu_GL zwe2!_dqCd?^%yGh=|4W_blS@Dw@=fVoo}ba;lh(YbU!`zUH=owCqGHv-Z2=F`V8AJ z!&RYhgK6}5k4>|NCxcs&upHb;Y0iFLH*uWbQDshA#qoTl|m zPkGxal!EgCNa+K#x*W*FF~$lj5vz2epQ6=b9c@D^?c+Qb;BVb?Rb%$GwBKC$AMFuP z7Ir`Ej+I@}TUyxt^BDRB$9*`XWLGb$cnhC9^lhs{52_9Lp@^aq$2{5j zPpn%p6$(VNtut+3pA*YR9Sl!33{p}nQS9IJWv)p~4>?eJT(z3vxa(q*Q>ZFQN)xNb zs)*k0wEx&%v0A$7!~#eAZ~B3YO-`rRzlZi#joGAqD($y|=R-a6i6hEsbleX+$ZlNX zXg_7^MK$9T9+{Q%8Epa)vfqQK2A7qS7MX9{%B|BgpShow|Htcuo=Wa;Q1R3czlR?E zrRWExex3qj9V3slJzr}zqDh$WQ-G$l?LT*<`k!O*13@VpmPnIuCoW#0V?PBFy| zEZ&PMB+zKy+V&Y z8tUiJ|2f1rx%mkFra?5l;kaU)sJZN|>^}?Gm))c^UXOiLspsg%lqWY%H5Y#^qAvZ) z)-vE(s&eT@nxBpWpq8xjkA#=8wrCA#<+AD02`edtpQbfnO{!_b zCav-BO9Ni3k<#-m&0kPyzg%$(?F_x8)XmB?E9#r^Nw}Mqy8anv=~yQ^Mn|R^ZL6Wi z2C%}J7AL4sfrEWB%2n-1A2V;v8iS?pYA`W^#-8yT9y!0+mic)Fe?qIQNmdG^4q{yMCl)OEl zm-fvO<;z)H02U&U3g26sf~wEfPyYa&`K8xU{rF#@#CoxO@WF|Yeh+>2Py8u5^ZpN* zvI&R%U~XdaxF-855zQR;M8sWL_0y1W+^d@&*`_?S0$4984+Ip3D0rA+s*|gw%jzY4 z5Kx~0)h3SBh@cYrWl9_wKsCJ>3eU;u@=*}fE!qdP?SPPelrjz~agng*{_XR{TK}70 zqiX7C|NTFJko!&ACk%gM+DY$z8`ADN*V6t5_UgmaFZeAK(NFGfB0{Ae&Uvw>PtP>R z^VkML`i+zHL{gUCn;M%Z>EZm1F7#ef3)u%(W$zrIL8*<`kuwh~F_lmK0F{^jW#Sjz zPKnh(9(#{=H-(KRF?jPsMFe`Zbkt54_K$x%hPtrZb{q*Sex6N!T1xkzb<3QNvwi z=8B8agL$%Drmxx#*$-EXv3hVXrVRW6ZzZr>$$lg@DUmoBXo}=p>0sjYs!dPNf)=>` zAzB|c30cb1--^>@e_OV3;;?7n?@asq@ z-1`78E#DSOqa zq+fsI&kBG1uM%BzE0Y1q=l-P(opdvTZo2 z^q43pr64FM-P@|((rVYiTey!;9eZ5c)#DE_eeMTn`NYcVYg4KIL$v(B`(*j+zs^l5^`2t#j{zdKF;BtGN`xZ3ZArXM!yAUtz%gi=)vWPM zp={zaH_nK)ZDX>W7O`+LoF&P80Gb=#0(porwH9<0J+FX?;b97{tJr>kqX%XdI>C{0A)`ttAwGI6sZC2q`AlVWGdm+{Bs*pyB%Z&8eQ&-(F8u z*y-kSdbN+;@bCYZB&J6fcaW9Zj@N(eiNtDfA6XURApQ4riY_8hooRn(9-zct(8%+9 z=~<%vHvGo)JAME38-B8@nc$K3WAAm>A5OsJRaIZRQ#htU4*MO-wjV#!W<3j4&T zpf}>d{m{6`9tuV}3{NH5{nmQ1pU+I+na{kJ;z!ho@?EY!!|^(k+2l| zX8pMsw5fWvFN1xsL<7cHPlmW?+t!1-q-ZBLHt9mBGffvhLF_!d%TF@~0hGJwEuof< zjUHN8ZwIc}N>P80>VNct*cJQsR4vtaVY#EaKdfo_CeQ1)vY5x-PGpSW79SsFDr(hl zYZXiH*9lVXf$}qyII?JG<*m1g@<$_)xL|;UwbJ#SbTIHRt=E8bR-nz{6dl|-_Xi10 z;lBIXo-D(y_wxL?p=wL^LyyKkFR!|V1(TyB2J?{5a>BwWxDui!!yH8;buk6iBrf9; zzAlX#*{GuROHT|?!Zyfq;$zm!pt4F(D3F*=da)H(c6m?@*~`l^7Ltubg~I42t|4aA z1C6-TYeXK!f$V-Bv6?yfI2NX;QTGFj`nSK6Xvvj+;2A>W@BtX}to|WrIIT@PkbVGt zH`&h<{LOk;?Qk~0!ovr_KE0_s>4yUqQx$rQl;@Ax$%;AqA$^j^OF4lRs(3PDqI@6V z%=gc;nigLypR}J^R4A!t@8_`b%g<8cNCRcQQ*`{WLy5%x<8C@QxbGsFo}PheKklLf zK#~tQcBad1&$U1h(@U0?|HaN8#7B^hG}G>5rNNCvAXI)|`s03M=b)|SgL0#q-Viw8T28Bz~>1@-ZFq!2t_t@VIK-0-kk_R*Y!tZW8$Q4*4Z#CM~nBz z630Ko@fz5k%({4KAhF)S>w74}A#|2Jel8+sA+?x?fTPlvj?(%#DFK9)`x%B%C!pIp2O#gT+_}*Z49m}qxK{*{L9?RlE-b(NWdj z?xd2I+BDmxIr^zC>eER~j{)$baW5S&9JlwISOeey-=>3sgLcB%sxv#3cs9KK`A#H) znDQ-?94@pyMnT2xU{S7k^=hvxi=8@>hgL>am@$4QQb>a^bpmJfi#u8CS}lzUs;)#b zd9jv)OpbfiO)uoH!93GgB}iLjr4Fj4E2%@P?XaIjD3No}xV|s`T#(n9%q-wsIGEg- zVF<^1#OkOBI&=1;?YlWLZyBgG-Will9-iP>Q-*c=wLa&mP0wKeLS5ReG$W!Tsihun zAFsvn4G}-U{mtTSseoA}!ug?qLfJI+6p|`(Pjv-7mg28Vp;6m0wq^(WBy9{;YpxJG z7Ii`LGdFzjM?X%9zg))S*#YIQvQj6f1Whn* z$0mhhDytt~8SePejE-K4lD4_at(x8?;3$IwJoYWjc>35bAn}>`s4waKzMms_+1>ZS zO7S#&)^XM#LEkyH=|{i`_(=1yOXR&DG?31Cy&$|Hg-d*zru=&kX%ExqzRdJotxKvu zLWyI8WA>wQiV}$x0qrpt`y}sPI)DIKPI5ZOslA>k&xq+ImF_hq(gZ_PeL?HO5Jgtq z?%ke(*mDX6l1DNGxY$ZUyGUqP6h{gt-P$CxWoNqTpqO^?5BpC}nu7lz1-_wDza6jZ zZ%U%LK6@=E&>+n+^0m&xhW(W}=iBvWcz%$Al!C5yjWMo6V3gsl`+-H{!?1nb;~I3> z32A&%GgWl9EB%zg4g$Uq(zg?d3l-mwIy-a}O~qJN?^ip*T;~*>LYnXUs!FI&a_VO| zP*YVRg_=5$(zasNW>gJ9)7Qed(&a8- zrD|jETj}L`{~Wv0>%@^;FK4K=zVEKE_Wd?>y9PS4M#c;1rm#YU1-#oN!d zrKs$Fpv4{VE{{n$CJE9YR(8eH=wU_AWhk)}yp4x9D#n4D^5 z>bYW}o(<0+rkC8(oObe=PEC1WCdQLMEL~6oxpA(8wR%#w@iVBgAAft8@nXa4<8upj)m`=?vO9nwmS^k%d_*$# zF)+{Hz(|_g9+Wcw)Z@)tq?F7{`KGvr@`@ehA?bje{u?nK392R23dpH#Vxh0k*uS2^pWLVwGN8icGU<359248k4As}oWVlGpt_G+2RX){ELxQ&D*3QIRB% zb@Cl_?Tv=$q(L?fzGw2Cb6y$V3ipL8&ALrzdR@5kV=ZxIl)HRPK_0b=Es-xj(}|^T z$={1d7{IM11KSkon}weXWYzg(r_}N0Ido4MkA>@)6uqGA2itcT6I;SLT+pt-1kDEp5jYabx2upqH7G* zKFNwGftGo&{M(dB04O!xL5Ew_ICVbiL?Uq^0QuOa_2OPSWWY&qO9gp5UA*>(b)fwn zy6r+v9Llpic=z;kj|0aNGtup5eqdVtafoOfx+y4uDqR9+yXmb#awXJJ+8q_ucV?yp z${^91y6QD?sX=XJpnZc`$zO+Pu2OpGpU8znAG3}v_kFf?J4yGb%^!rP6nb?Ze`J_RtTb&`eyWXlU(AaC~qOoMn7N=y&xm z0tHj15S+W2X*|er@?j%Ey{Uovmt_1jpo|a1)w_+Wk!pOKD$4fNJA%#7#OOB_oxxSn zds@Bcl=QLs@ku`Yca%sBfRW-hI-CL7=VUHOB=#BWR04O-SBX0az{z7%Pj~2OVVg`P zy^AgoXCBg z8F(EHof7@{xRNQIGY*Gv6q$|B@~|4sk2B48Kj^p+WMP)U3D&y^dL$GDDGl>fJ)MPL z6WrUzEkIBj1SF+KiPBvH12!0p4gu*d=@J1&MvW8^Ml-rQMo5=RH%P8%Y`q@IOXudfaimn;I#^a6B_?&?)N9L8bxE0x3*0R?piz zlt^hNEMS4&+X*XfUk!v7Q#tx+&dWNpOC+=N0wNLk5^}VMPrGNN^QP^xIkw0C(hTbd z#9A^ycyJ$pEEu;McyYOuUFN7WdV7H{IyGG^VyLK6xoJ1pj0&8}V-xfe*M)RJHQs^{ z6Kyu*q7D`LGly=Q0v9xAb{iP0LwTnmw4WCmNzd=zVFzO6m7dJ{&X5b!qI!CRumk+S zyF3`G&I)|C$GWU@jS<;0fZ1uOH5MY>hvQhQPUUcWZ4|9Tqx^7^!yuhMp+GX)axjXv zy(~gvUXI5TJ{`Faoq1*|{HVDs%6w2z&$v>a99qVNI%k*FSbaH0vhivkn7tLeKJ6z% zWcFiI%!$s6c4r_H{M;omPAWS&z6n<7Fu0pcW3X8Ik;tX1Kl7l%HGm}7H($eX*vyLQ zJQ%-uk=1jQM}P+9^ds$D8*v({aG|OrcUvfWS#vW&U_8~vCZ!pH_!OCv>X^X;PsFmn zaW)bRMxt_`r5@+yCECLUO>AcCW3()vba zb5(2U`g1fk1y8Kx7>vi=LFZ4gqOXbZ`a$^%&c-d2M@rha{4nFO2!hnN=sdv^1?3+0na_U4r$GJmQazaXc# zWl4T6tKnIH`7VWG4Av5|Ed1c+=*M8rGr~lDzMsdPZhYXIIZLkXIo+esSmm@=hk^6Ri4_WZ z=$*uFLF|^XW1?PRpwj?k+6t5He3UbjS?x*?mzbTBr4L1sUxP?rPRfwOJhORz z-TrkoC-X1N&^WWk_n2MzTpW0{YpMU6+-yB?kI$*h9}ef*TQv|?@#;8!s2A|Z^p2hF zC*|B}Nxl|Ul)QXd=6IT8eSW!Kb8BD|R^zyA5O;yd-(D3g#fATFwD_W1FC*dcx!kj~%-`mu&b+Znil1 zhFlD@<>8qipkgC;&Ptd#lqwCSz{5~;Mr$R;{s1QEfqY>l52cQNx|B?4I-|s z&wHK~^@t@VM!~8LOrWA(@|Sk-w3m8rG)6Jz8oZmNSX=*q?`F{lbuO-BrDEhF=J&kE;-WqH6P$5__1f5FLB3kU=YM~N+&-S&elM^`Y}mMqvXpu1fPrEq zPI$y)OW)7y^NbgjftnXPF3}cWc5~649&twO=RnmUGxHr);;uj%73?HU_S@@8D>*s7 z<#n#MLnLj^edSF9BT=A<(-S z?MIMFu%!WgWmTg!Vm^@@!-33!G%R1)`d)$gn45DU>2s^m70=zq&1)Ds^Ae!xakf&t zl+l@ijJ~X?AZIy^=KCcc{Ni*LT99asDiQx#DYWHi^1*WlzUzP~1)D*5mzK+4Zn=(g z^&$EbSm8}L~j7c#Qm_#`+Z;3M|%^+2H(^X~7N znxLNe%{fsSW6$~vENg5VLN=nneDqdyaOt~OAbA;m>iAvHZ`Wqd1Bvmw4atDm+l^h= zH(?$bg##Y05qAJ`jpndNyCDH+I=r9bIqomexRdJ^v^)2S3=K-n3KPMf^UNEaP|xP` z(!x#Bc+$9dIt?pymbbR&q~Uv}u%HKsRIL5eWVs_^JID(L6i>j|v4*xpRUE^)x1SrU`uOG*EP zAz8Sxmy%MP#8N3~d|1i}(>I7A3r)mso*V+0K+$sadn@X~zCX2})9@90=X>%9uIood zUdF13)yl~G#U#WBIhzIXj1(}FSte(>;qa@YlP?x`jm^b9A(-qY~(e!H&I(Mj!~R0*GLL;mF%kfg~+k5tTD-tz*{!Qf3tZVnh`pVhQAI(QK*A2uqb{Gl+Tyx*wYH%1&t)L z0Bs&}6Q95V`D6LpBz=x5Ej8xuvfWwzHnC>;4)-tbTNz7Nl#u7%40t6Wj+#Pdx{`P8 zM%*_$t73Q{U`qCNT@?|D{I}M3KN2{xOoN`jUKwunyNCbdh+EK)k2H3z z5AZYNnpP%!V@0E5iBNgx(~dU<7Zp9ugMaNUZbLjzuQn;TFXRQ<#0n78b=lNsFl3C>b5>gyHF@_Nw458{A7(Esn#egr3{*h0!=i^Vy$ zXLM!97OnZwx}y=P&yO5yI!wAV1wqVurE)lxIgQ=H^y-X=G|MOFy7wV70kceH%~OO` zrQD(I(WgW~@lQhv98v^V;gz1QSZJ&w3y-di9`RnmJJM~oi%Ptto{Ky|n$Q>p zOE0g?wTj4=5Z(~uR5V^kGg*k4m-S0Qv;g5F>Qxmr z%5$FkcaKPrY+xuE?c8Xq7T^0OR>H#-Ej`ph;EWy?YKx`2z3B8M9Seh{Evkz%M12_* z>eFW>7Lta3Q!dlVxDuh^dq`L zQswz;-t(6Tei9)##)-EgNr#x`{cHBEnOc|81@~}uiuhA%TG$l8g`JSl$0tK@?*4vy z#ZOU;b?iiIHO4B><=vz;U%c&9#Wh;LmT0F>w)FZAl%^N{(j}t|P91($>h`d@z@xb+ z;(G^-5BmvHyDBpf9O;C%k2`2y!OUR~;s4OaelNGc>>jqYl4|+tWnjjdsbL{0Gksw6 z8@fF*s0B#FRUwd~%m<)@l2&uhEpmSU;7LM(l9Fk0=?nR+v~2IhkTFUiF(=#?ff{b- zp4;mE)MIn%kbK0oNIvu7wfEQQ&BeLVT@Ml$GuBix9tvVbeIAQJOkS5Tjnbq=G7~xc zOJZRg3ms>~G0M4mwuM98OOfNAk#}&0F9}3(zK^2z`cjG0S*mz#-@j^BQo6LLe2P~` z317PaIjh7~XB-)3&L~o3f%jVENnk!x5BVylgM0C!HAwki#5NHdZ}>N1)wR<-@{|VR znGM8kH1EY0^JhtAcN|K7E9E@Fv31-q+=;j*vGBKUQ9_neL~n)(Lk6MVJtrh@ON*Q^ zRp*A)7#hyfw)cQC3QJFjn%H87LZl^NCCA&*OVtU`tMskm0ukSQi6{(vv%uyMgSR^J z)6SS`AFnWj%oa3tDhyf@EBLM<4{I8F%Ig?i8d^cC6nZ5ld$87R1HiC$Qg!M-2wl@#RA?42k=5A; z@SDaRxIU`B_$v!D0q9eD^hCe1Wut&m(7X!&kbVzak_%xYvSXZ8lw;s}G!++@a`N#C zui+5O*{9jr!J8q$oUPSVI$ANjWL+LJi2ngztax3C*D(KIbVVmwWb9C`HqZj+Cz%H> zrfl6W-FEHSVTn?r-~A=Hm{%r$mT8B6rI4~{hb1h1}=A=%n zPRp0`0;D%uMQ#N5HMxYNbg~Zwks`3Bz34>y%e$wwa>dpX*GawMtpfCa|5;CTA9ms9 zAPB^YIscf6V4c+6g@D7OA8MNFVg|HiJ8dw2N;zNS{*qKd`-mrqT%AVmxx+w#mp6{k z-wJqi#1V98AxmbziYmSL^7w~jtf}N~_GVhck@6w?P4_*z1*ll8bhQOIM9t|29wyvMwFu$g_$U zNo&NC}vMeT$jw_!FYN znkz4w53c9;zrXvW`*HG8UcZ+|s!nn^a@NZ<;F@Vl$V4f?V1fv9_9aku@YD68TQj)) z1CKa(@6n>ki*%|~vUXlDnBqKo=zYmcY58C$VoV=gaHh{GdhFu{l3xjhq9q6+=xuHN zK^APdR{&Y}2fn4KFZgH(DoikGO4Hw!X}-cR-lYB)F3M)6lw+hfNoRZHG*Efac#zaA z%x)20cvq3Mg8C%ox>5EKcs8y4O$XI`d{=UM_jKYFQqwmdaIIOQ9Ud@eC0IMRy08{n z2<6{uw8dBST~gDL-2GVnI${y(HB(Vsx?cxh$4JE|@9dpLZF)gHFUCY};iR#LC(w;vC*nmtO@cQAPth+Y zRQ0j)3Vn{-R@S_K14XSQ>YMPP-h>u;iqDCHm9)U@j@1^Q4*OcS+pA1s*kRq!J0Ir9 z{^Q_HV`7gNlM`c$%OLrWMLuyePx=K%EnBj+uy=0Wqbh=yf|YHdCP(MBo0ZxF(_!Ac zfgQKD2Z^5PBH||&by9ukh8(iD2bF?FM1f zVvuJliH@mA+}AG+C*LzoR4JtWJU(7YagTWOcFcULX7{$#6;wgugQ;;G20ylbsUYkkVN|EV4xV}sa z%=o9cBE=i~{z3*^KV`W8eQOH2FZ)P^l3`r-y56rb4RISafNb!}zZp(0HC~T$Qg#f@ zrA-udl(6^UO0Q5^I30JUVoZcR5K_*+?Bh!aw-Z$AcOCxFO#6LfP!}+tS(?*N@K8j^ zxZQj!N0wpm@)pRob%WZuE>4dHt%{Q&^EAHGynJXZW+fu=xv`%WnhXup)QZ*X*nT)O zVn1eL1TVC{r(Ye$xNePaGz);9CZw6z%uHX`oTh9GF&I2!uvucq5vXOQqDtx~j&9$4UJ#fg&s%^5JIz6!<-jeoPcE|#3K_-1hG+~x` z&mX9}d;eOpIAs!Do{41H5Ifo(C~7keAShEz02i034Jv?=!U>Kab%9Sn%0|S69}6H6 zc1AI(iU^-m8B~k(u_@rcZPmwYFJk-gTIgG~fGgI(uGbTh{qs(b?YGq}Layf%1n$z1ED^c%K`GdGGa7q4=Nq8D+np5}`) zb5$qN8r2uk@k1tvH=XMd8~W~Jsonj4N=IcX3s+-%5t^-sz4;b5$>mq=ZP&#AZJ^W3 z*<@N@TFP5InOR*@y=gZzNZGaD<-8C83sMLc|*OXKdshn9Rb>lI2rU z<#-T0bxK9`I2^-O$9{k!l(r1_+-j{Q$Gf@Pp?ywnFFH&{i*e@%8x;i*FA={{HRfbcvC~uC>>6iQ=c{PfF_hW$l9cOW3rP*xc;aYKVbPdw+}wmd zXc#ij>Qlo1HX1<^s5|WI=V5T#cDz!t*{i3+Bc3W*wg#@V z4Lj4?``upKpS=jA#$($5Y#n&L31&mGtmRX=yq)ashvA|~(KbG9eBi#mbRd~qhN8MN@;i4{ znd`vGMJnX9s6w~tpd;Y z{2E(<*666WKdT5QG{W@pT+OaLr7eZfd%i^yx z%edk?opiXes=~|(9#UK>+OWpYw~y1`$a&0MsgkO78(XpEdOsJlj#);ihT4Iz{457H zcLRU_X=QwDOQHq%J*vVr+~*LhPDHNFmshj--D@x92ZAv%iA_^iNKNKSg{=VdOZDI+ zKfUGHJ7_H|4q#)gdm;x#(lE`A3EXV7fNgY}@QeI;1c z&2KF(MRLJq4*-FMHvTna3SUkkc|m(3c~dT!zMp&RJ57oLP(GodF(SaI=&^sfJ)o?n z`BZ&;iHeB8ySv6KFCoAy324MmAsYi|Fz3Nj>}eAiJik_4W9m%Td1#K-v6lH(cw#>BRZd zM>1BuT*%mj-uSVO6d1fJDx7W+BP~f~=khUU{*bzbYJrj532I5^FcGqlDI<$ZY`E8n zX^@DLbIqHYXqBY51F@BcxIbXih0ZO{{j_rMJhXM19|m!bTGR~uR&R=I5!PNyY_c2t z0up=S1fN@!5k$eQQCI3?@8PPyqy?p}GT49IW$-QoK5P$UT&=_ZXM6d-OBU(Xy9e-( W_a00#JGS4$HWfvPLfM;lA^!)ak)`VZ literal 0 HcmV?d00001 diff --git a/twake/frontend/public/public/img/primary-gradient.png b/twake/frontend/public/public/img/primary-gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..95d19790ca7d85888ac2a8c858637e242e8c2ed1 GIT binary patch literal 26819 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 ffOK-oye9rnr;`%@KRi7L=u!qxS3j3^P6 \ No newline at end of file diff --git a/twake/frontend/public/public/img/twake-emoji/twake-drive.png b/twake/frontend/public/public/img/twake-emoji/twake-drive.png deleted file mode 100644 index c3a04ebf72640124a33915a06c8097c69138e6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt^rJzX3_ zJUZV_b>wO`5O9@`jmTG#*b}!p&Zla^5pR)OuEHLsLd%ymP2!*5$ntOY$t0%qi=r*e~#A_g$ufxz`(ab5%rz?`Mjc?w!@?|01V>PeY|aNP=a;&B@0YgfwR_ z{m=U2)NU0XUM*%L1?DoAo^7jGX7;W \ No newline at end of file diff --git a/twake/frontend/public/public/img/twake-emoji/twake-task.svg b/twake/frontend/public/public/img/twake-emoji/twake-task.svg deleted file mode 100644 index 72ab7a80..00000000 --- a/twake/frontend/public/public/img/twake-emoji/twake-task.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/twake/frontend/public/public/img/twake-emoji/twake-tasks.png b/twake/frontend/public/public/img/twake-emoji/twake-tasks.png deleted file mode 100644 index d7f321ec9dec164a735ea012bcca7d12b3a67993..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt@!JY5_^ zJUZ`A_2gnQ6k+8SuVQLW58N})IbM7BvhZ(*giES=R6YFBuu7j%cjz1T^aUkOPy|sLE8#Oy~y(c<&tNlB_c&37> z{TyHB1cO@6xGcNS59hMtVvkCv%J*f*#5Cy^uutRqz!W38dU6fJ=i6Pg56e9~4fG3x Mr>mdKI;Vst0C! { - - - - {RouterServices.routes.map((route: RouteType, index: number) => ( - - route.options?.withErrorBoundary ? ( - - - - ) : ( - - ) - } - /> - ))} - { - { - RouterServices.replace( - `${ - RouterServices.pathnames.LOGIN - }?auto&${RouterServices.history.location.search.substr(1)}`, - ); - return

; - }} - /> - } - - - + + + {RouterServices.routes.map((route: RouteType, index: number) => ( + + route.options?.withErrorBoundary ? ( + + + + ) : ( + + ) + } + /> + ))} + { + { + RouterServices.replace( + `${ + RouterServices.pathnames.LOGIN + }?auto&${RouterServices.history.location.search.substr(1)}`, + ); + return
; + }} + /> + } + + ); diff --git a/twake/frontend/src/app/atoms/avatar/index.tsx b/twake/frontend/src/app/atoms/avatar/index.tsx index e41630fb..ae337dcd 100644 --- a/twake/frontend/src/app/atoms/avatar/index.tsx +++ b/twake/frontend/src/app/atoms/avatar/index.tsx @@ -15,7 +15,7 @@ interface AvatarProps extends React.InputHTMLAttributes { nogradient?: boolean; } -const sizes = { xl: 24, lg: 14, md: 11, sm: 9, xs: 6 }; +const sizes = { xl: 24, lg: 14, md: 10, sm: 9, xs: 6 }; const fontSizes = { xl: '2xl', lg: '2xl', md: 'lg', sm: 'md', xs: 'sm' }; export const getGradient = (name: string) => { diff --git a/twake/frontend/src/app/atoms/button/button.tsx b/twake/frontend/src/app/atoms/button/button.tsx index 685be3f0..2548a283 100644 --- a/twake/frontend/src/app/atoms/button/button.tsx +++ b/twake/frontend/src/app/atoms/button/button.tsx @@ -3,7 +3,7 @@ import React from 'react'; import _ from 'lodash'; interface ButtonProps extends React.ButtonHTMLAttributes { - theme?: 'primary' | 'secondary' | 'danger' | 'default' | 'outline' | 'dark'; + theme?: 'primary' | 'secondary' | 'danger' | 'default' | 'outline' | 'dark' | 'white'; size?: 'md' | 'lg' | 'sm'; icon?: (props: any) => JSX.Element; iconSize?: 'md' | 'lg'; @@ -19,18 +19,22 @@ export const Button = (props: ButtonProps) => { if (props.theme === 'secondary') className = - 'text-blue-500 bg-blue-100 hover:bg-blue-200 active:bg-blue-300 border-transparent '; + 'text-blue-500 bg-blue-500 hover:bg-opacity-30 active:bg-opacity-50 bg-opacity-25 border-transparent '; if (props.theme === 'danger') className = 'text-white bg-rose-500 hover:bg-rose-600 active:bg-rose-700 border-transparent '; if (props.theme === 'default') className = - 'text-black dark:text-white bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-gray-50 active:bg-gray-200 border-gray-300'; + 'text-black dark:text-white bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-zinc-50 active:bg-zinc-200 border-zinc-300'; + + if (props.theme === 'white') + className = + 'text-black dark:text-white dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-zinc-50 active:bg-zinc-200 border-transparent'; if (props.theme === 'outline') className = - 'text-blue-500 bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-gray-50 active:bg-gray-200 border-blue-500'; + 'text-blue-500 bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-zinc-50 active:bg-zinc-200 border-blue-500'; if (props.theme === 'dark') className = @@ -38,12 +42,12 @@ export const Button = (props: ButtonProps) => { if (disabled) className += ' opacity-50 pointer-events-none'; - if (props.size === 'lg') className = className + ' text-lg h-11'; + if (props.size === 'lg') className = className + ' text-lg h-10'; else if (props.size === 'sm') className = className + ' text-sm h-7 px-3'; else className = className + ' text-base h-9'; if (!props.children) { - if (props.size === 'lg') className = className + ' w-11 !p-0 justify-center'; + if (props.size === 'lg') className = className + ' w-10 !p-0 justify-center'; else if (props.size === 'sm') className = className + ' w-7 !p-0 justify-center'; else className = className + ' w-9 !p-0 justify-center'; } diff --git a/twake/frontend/src/app/atoms/input/input-text.tsx b/twake/frontend/src/app/atoms/input/input-text.tsx index 5b35e1a6..49110e08 100644 --- a/twake/frontend/src/app/atoms/input/input-text.tsx +++ b/twake/frontend/src/app/atoms/input/input-text.tsx @@ -20,13 +20,13 @@ interface InputProps } const baseInputClassName = - 'tw-input block w-full rounded-md focus:ring-1 focus:ring-blue-500 z-0 focus:z-10 dark:text-white text-black '; + 'tw-input block w-full rounded-md focus:ring-1 focus:ring-blue-500 z-0 focus:z-10 dark:text-white text-black text-base '; export const defaultInputClassName = (theme: 'plain' | 'outline' = 'plain') => { return ( baseInputClassName + (theme === 'plain' - ? 'bg-zinc-200 border-zinc-200 dark:bg-zinc-800 dark:border-zinc-800' + ? 'bg-zinc-100 border-zinc-100 dark:bg-zinc-800 dark:border-zinc-800' : 'bg-zinc-50 border-zinc-300 dark:bg-zinc-800 dark:border-zinc-700') ); }; @@ -47,7 +47,7 @@ export const Input = (props: InputProps) => { inputClassName = inputClassName + (props.disabled ? ' opacity-75' : ''); if (!props.multiline) { - if (props.size === 'lg') inputClassName = inputClassName + ' h-11'; + if (props.size === 'lg') inputClassName = inputClassName + ' h-10 pl-10'; else if (props.size === 'sm') inputClassName = inputClassName + ' h-7'; else inputClassName = inputClassName + ' h-9'; } diff --git a/twake/frontend/src/app/atoms/text/index.tsx b/twake/frontend/src/app/atoms/text/index.tsx index 6f71c559..d078f372 100644 --- a/twake/frontend/src/app/atoms/text/index.tsx +++ b/twake/frontend/src/app/atoms/text/index.tsx @@ -52,13 +52,13 @@ const Text = (props: TextProps) => { defaultClassName = 'text-sm font-normal' + ' ' + - (props.noColor ? '' : 'text-zinc-400 dark:text-white dark:opacity-50'); + (props.noColor ? '' : 'text-zinc-500 dark:text-white dark:opacity-50'); break; case 'info-small': defaultClassName = 'text-xs font-normal' + ' ' + - (props.noColor ? '' : 'text-zinc-400 dark:text-white dark:opacity-50'); + (props.noColor ? '' : 'text-zinc-500 dark:text-white dark:opacity-50'); break; } diff --git a/twake/frontend/src/app/components/configurators/config-body-layer.jsx b/twake/frontend/src/app/components/configurators/config-body-layer.jsx deleted file mode 100755 index 1dbf53d6..00000000 --- a/twake/frontend/src/app/components/configurators/config-body-layer.jsx +++ /dev/null @@ -1,119 +0,0 @@ -import React from 'react'; - -import ConfiguratorsManager from 'app/deprecated/Configurators/ConfiguratorsManager.js'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import CloseIcon from '@material-ui/icons/CloseOutlined'; -import './configurators.scss'; -import Blocks from '../../views/applications/messages/message/parts/Blocks'; - -/* - Where the configurators will be displayed, this component should be in app.js (menus should be over all elements of the page) -*/ -export default class ConfigBodyLayer extends React.Component { - constructor() { - super(); - this.state = {}; - ConfiguratorsManager.addListener(this); - } - componentWillUnmount() { - ConfiguratorsManager.removeListener(this); - clearTimeout(this.loading_interaction_timeout); - } - UNSAFE_componentWillMount() { - this.generateData(); - } - shouldComponentUpdate(nextProps, nextState) { - this.generateData(); - var string = JSON.stringify(this.configurator); - if (string != this.saved) { - nextState.loading_interaction = false; - clearTimeout(this.loading_interaction_timeout); - this.saved = string; - return true; - } - return nextState.loading_interaction ? true : false; - } - generateData() { - if (ConfiguratorsManager.configurator_order.length == 0) { - this.configurator = null; - } - this.configurator = - ConfiguratorsManager.currentConfigurators[ - ConfiguratorsManager.configurator_order[ConfiguratorsManager.configurator_order.length - 1] - ]; - } - onAction(type, id, context, passives) { - if (type == 'interactive_action') { - this.setState({ loading_interaction: true }); - clearTimeout(this.loading_interaction_timeout); - this.loading_interaction_timeout = setTimeout(() => { - this.setState({ loading_interaction: false }); - }, 5000); - var app_id = this.configurator.app.id; - var ntype = 'interactive_configuration_action'; - var event = id; - var data = { - interactive_context: context, - form: passives, - hidden_data: this.configurator.hidden_data, - configurator_id: this.configurator.id, - }; - WorkspacesApps.notifyApp(app_id, ntype, event, data); - } - } - render() { - if (!this.configurator) { - return ''; - } - - return ( -
-
-
-
-
-
-
{this.configurator.app.identity?.name}
- - { - ConfiguratorsManager.closeConfigurator(this.configurator.app); - }} - /> -
-
- - this.onAction(type, id, context, passives, evt) - } - allowAdvancedBlocks={true} - /> -
-
-
-
-
- ); - } -} diff --git a/twake/frontend/src/app/components/configurators/configurators.scss b/twake/frontend/src/app/components/configurators/configurators.scss deleted file mode 100755 index df002a59..00000000 --- a/twake/frontend/src/app/components/configurators/configurators.scss +++ /dev/null @@ -1,60 +0,0 @@ -.config_modal { - height: 100%; - width: 100%; - background: rgba(255, 255, 255, 0.5); - position: absolute; - z-index: 200; - top: 0; - - .modal { - width: 0px; - height: 0px; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - margin: auto; - .component { - background: white; - border-radius: var(--border-radius-base); - box-shadow: var(--box-shadow-base); - position: relative; - display: inline-flex; - flex-direction: column; - transform: translateX(-50%) translateY(-50%); - .header { - padding: 15px; - border-bottom: 1px solid #ddd; - display: flex; - - .app_logo { - height: 30px; - width: 30px; - background-size: contain; - background-position: center; - border-radius: var(--border-radius-base); - margin-right: 5px; - } - .app_name { - line-height: 30px; - flex: auto; - } - .close { - margin: 2px; - opacity: 0.5; - cursor: pointer; - &:hover { - opacity: 1; - } - } - } - .content { - flex: 1; - overflow: auto; - padding: 15px; - box-sizing: border-box; - } - } - } -} diff --git a/twake/frontend/src/app/views/desktop-redirect/index.tsx b/twake/frontend/src/app/components/desktop-redirect/index.tsx similarity index 100% rename from twake/frontend/src/app/views/desktop-redirect/index.tsx rename to twake/frontend/src/app/components/desktop-redirect/index.tsx diff --git a/twake/frontend/src/app/components/edit-channel/channel-settings-menu.tsx b/twake/frontend/src/app/components/edit-channel/channel-settings-menu.tsx index 10ffe838..b913a3c7 100644 --- a/twake/frontend/src/app/components/edit-channel/channel-settings-menu.tsx +++ b/twake/frontend/src/app/components/edit-channel/channel-settings-menu.tsx @@ -29,7 +29,7 @@ import RouterServices from 'app/features/router/services/router-service'; import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; import workspaceUserRightsService from 'app/features/workspaces/services/workspace-user-rights-service'; import Block from 'app/molecules/grouped-rows/base'; -import { addUrlTryDesktop } from 'app/views/desktop-redirect'; +import { addUrlTryDesktop } from 'app/components/desktop-redirect'; import { useState } from 'react'; export const ChannelSettingsMenu = (props: { diff --git a/twake/frontend/src/app/components/invitation/parts/invitation-input-bulk.tsx b/twake/frontend/src/app/components/invitation/parts/invitation-input-bulk.tsx index fe3b04b7..a7e7525d 100644 --- a/twake/frontend/src/app/components/invitation/parts/invitation-input-bulk.tsx +++ b/twake/frontend/src/app/components/invitation/parts/invitation-input-bulk.tsx @@ -64,7 +64,7 @@ export default (): React.ReactElement => { style={{ maxHeight: 'calc(42vh - 98px)', minHeight: 'calc(42vh - 98px)' }} options={{ suppressScrollX: true, suppressScrollY: false }} > - { members_limit_reached && } + {members_limit_reached && } { const { user } = useCurrentUser(); const maxUnverifiedDays = - InitService.server_infos?.configuration?.accounts?.console?.max_unverified_days || 7; + InitService.server_infos?.configuration?.accounts?.remote?.max_unverified_days || 7; const oneDay = 1000 * 60 * 60 * 24; const periodLimit = (user?.created_at || 0) + maxUnverifiedDays * oneDay; const daysLeft = Math.ceil((periodLimit - Date.now()) / oneDay); - if (!user || InitService.server_infos?.configuration?.accounts?.type !== 'console') { + if (!user || InitService.server_infos?.configuration?.accounts?.type !== 'remote') { return <>; } const showBlockedModal = () => { - if (InitService.server_infos?.configuration?.accounts?.type === 'console') + if (InitService.server_infos?.configuration?.accounts?.type === 'remote') return ModalManager.open( , { @@ -34,7 +34,7 @@ const AccountStatusComponent = (): JSX.Element => { }; const showUnverifiedModal = () => { - if (InitService.server_infos?.configuration?.accounts?.type === 'console') + if (InitService.server_infos?.configuration?.accounts?.type === 'remote') return ModalManager.open( , { diff --git a/twake/frontend/src/app/components/on-boarding/company-status-component.tsx b/twake/frontend/src/app/components/on-boarding/company-status-component.tsx index d9ad1c9f..fb3a09db 100644 --- a/twake/frontend/src/app/components/on-boarding/company-status-component.tsx +++ b/twake/frontend/src/app/components/on-boarding/company-status-component.tsx @@ -18,7 +18,7 @@ const CompanyStatusComponent = (): JSX.Element => { const workspace = DepreciatedCollections.get('workspaces').find(workspaceId); useEffect(() => { - if (InitService.server_infos?.configuration?.accounts?.type === 'console') { + if (InitService.server_infos?.configuration?.accounts?.type === 'remote') { isNewAccount(); } diff --git a/twake/frontend/src/app/components/quoted-message/quoted-message.tsx b/twake/frontend/src/app/components/quoted-message/quoted-message.tsx deleted file mode 100644 index c3b04b46..00000000 --- a/twake/frontend/src/app/components/quoted-message/quoted-message.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import useRouterCompany from 'app/features/router/hooks/use-router-company'; -import MessageQuote from 'app/molecules/message-quote'; -import { useUser } from 'app/features/users/hooks/use-user'; -import { useMessageQuoteReply } from 'app/features/messages/hooks/use-message-quote-reply'; -import useRouterChannel from 'app/features/router/hooks/use-router-channel'; -import User from 'app/features/users/services/current-user-service'; -import { gotoMessage } from 'src/utils/messages'; -import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; -import QuotedContent from 'app/molecules/quoted-content'; -import { NodeMessage } from 'app/features/messages/types/message'; - -type PropsType = { - closable?: boolean; - onClose?: () => void; -}; - -export default ({ closable = true, onClose }: PropsType): React.ReactElement => { - const companyId = useRouterCompany(); - const channelId = useRouterChannel(); - const workspaceId = useRouterWorkspace(); - const { message: quotedMessageId } = useMessageQuoteReply(channelId); - const quotedMessage = useMessage({ - companyId, - threadId: quotedMessageId, - id: quotedMessageId, - }); - - if (!quotedMessage.message) { - return <>; - } - - const { message } = quotedMessage; - const author = useUser(message.user_id); - const authorName = author ? User.getFullName(author) : 'Anonymous'; - const deleted = message.subtype === 'deleted'; - - const quotedContent = ( - - ); - - return ( - gotoMessage(message, companyId, channelId, workspaceId)} - /> - ); -}; diff --git a/twake/frontend/src/app/components/search-popup/parts/drive-item-result.tsx b/twake/frontend/src/app/components/search-popup/parts/drive-item-result.tsx index 4e444a1b..62695f8f 100644 --- a/twake/frontend/src/app/components/search-popup/parts/drive-item-result.tsx +++ b/twake/frontend/src/app/components/search-popup/parts/drive-item-result.tsx @@ -25,7 +25,7 @@ import { useRecoilValue, useRecoilState } from 'recoil'; import { openDriveItem, onDriveItemDownloadClick } from '../common'; import ResultContext from './result-context'; import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; -import { DriveCurrentFolderAtom } from 'app/views/applications/drive/browser'; +import { DriveCurrentFolderAtom } from 'app/views/client/body/drive/browser'; import { FolderIcon } from '@heroicons/react/solid'; export default (props: { driveItem: DriveItem & { user?: UserType } }) => { diff --git a/twake/frontend/src/app/components/uploads/upload-zone.tsx b/twake/frontend/src/app/components/uploads/upload-zone.tsx index b7fb3332..ef6e531b 100755 --- a/twake/frontend/src/app/components/uploads/upload-zone.tsx +++ b/twake/frontend/src/app/components/uploads/upload-zone.tsx @@ -49,6 +49,8 @@ export default class UploadZone extends React.Component { this.file_input.style.left = '-10000px'; this.file_input.style.width = '100px'; this.file_input.multiple = this.props.multiple ? true : false; + this.file_input.directory = this.props.multiple ? true : false; + this.file_input.webkitdirectory = this.props.multiple ? true : false; this.setCallback(); diff --git a/twake/frontend/src/app/deprecated/workspaces/workspaces.jsx b/twake/frontend/src/app/deprecated/workspaces/workspaces.jsx index 2ae0fb74..cd64864c 100755 --- a/twake/frontend/src/app/deprecated/workspaces/workspaces.jsx +++ b/twake/frontend/src/app/deprecated/workspaces/workspaces.jsx @@ -1,26 +1,21 @@ -import React from 'react'; -import $ from 'jquery'; -import Observable from 'app/deprecated/CollectionsV1/observable.js'; -import popupManager from 'app/deprecated/popupManager/popupManager.js'; -import PopupManager from 'app/deprecated/popupManager/popupManager.js'; -import Api from 'app/features/global/framework/api-service'; -import ws from 'app/deprecated/websocket/websocket.js'; import DepreciatedCollections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Observable from 'app/deprecated/CollectionsV1/observable.js'; +import { default as popupManager, default as PopupManager } from 'app/deprecated/popupManager/popupManager.js'; +import ws from 'app/deprecated/websocket/websocket.js'; import Groups from 'app/deprecated/workspaces/groups.js'; -import LocalStorage from 'app/features/global/framework/local-storage-service'; -import workspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; -import WindowService from 'app/features/global/utils/window'; import workspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import RouterServices from 'app/features/router/services/router-service'; -import NoWorkspaces from 'app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces'; -import NoCompanies from 'app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies'; -import loginService from 'app/features/auth/login-service'; -import Globals from 'app/features/global/services/globals-twake-app-service'; import JWTStorage from 'app/features/auth/jwt-storage-service'; +import loginService from 'app/features/auth/login-service'; import ConsoleService from 'app/features/console/services/console-service'; -import WorkspaceAPIClient from '../../features/workspaces/api/workspace-api-client'; +import Api from 'app/features/global/framework/api-service'; +import LocalStorage from 'app/features/global/framework/local-storage-service'; import Logger from 'app/features/global/framework/logger-service'; -import UserAPIClient from 'app/features/users/api/user-api-client'; +import Globals from 'app/features/global/services/globals-twake-app-service'; +import WindowService from 'app/features/global/utils/window'; +import RouterServices from 'app/features/router/services/router-service'; +import workspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; +import $ from 'jquery'; +import WorkspaceAPIClient from '../../features/workspaces/api/workspace-api-client'; class Workspaces extends Observable { constructor() { @@ -90,7 +85,6 @@ class Workspaces extends Observable { openNoWorkspacesPage() { this.showNoWorkspacesPage = true; this.notify(); - popupManager.open(, false, 'no_workspace_parameters'); } closeNoWorkspacesPage() { @@ -102,7 +96,6 @@ class Workspaces extends Observable { openNoCompaniesPage() { this.showNoCompaniesPage = true; this.notify(); - popupManager.open(, false, 'no_companies_parameters'); } closeNoCompaniesPage() { diff --git a/twake/frontend/src/app/environment/types.ts b/twake/frontend/src/app/environment/types.ts index 34a55e03..c3614c10 100644 --- a/twake/frontend/src/app/environment/types.ts +++ b/twake/frontend/src/app/environment/types.ts @@ -1,6 +1,6 @@ export type EnvironmentType = { env_dev: boolean; - env_dev_auth?: 'internal' | 'console'; + env_dev_auth?: 'internal' | 'remote'; api_root_url: string; front_root_url: string; diff --git a/twake/frontend/src/app/features/auth/auth-service.ts b/twake/frontend/src/app/features/auth/auth-service.ts index 273935c6..9c41bb0c 100644 --- a/twake/frontend/src/app/features/auth/auth-service.ts +++ b/twake/frontend/src/app/features/auth/auth-service.ts @@ -20,7 +20,7 @@ import Application from 'app/features/applications/services/application-service' import LocalStorage from 'app/features/global/framework/local-storage-service'; import Globals from 'app/features/global/services/globals-twake-app-service'; -type AccountType = 'console' | 'internal'; +type AccountType = 'remote' | 'internal'; export type LoginState = | '' | 'app' @@ -60,7 +60,7 @@ class AuthService { if (Globals.environment.env_dev_auth) accountType = Globals.environment.env_dev_auth; - if (accountType === 'console') { + if (accountType === 'remote') { this.provider = new OIDCAuthProviderService(config as ConsoleConfiguration); } else if (accountType === 'internal') { this.provider = new InternalAuthProviderService(config as InternalConfiguration); diff --git a/twake/frontend/src/app/features/auth/provider/oidc/oidc-auth-provider-service.ts b/twake/frontend/src/app/features/auth/provider/oidc/oidc-auth-provider-service.ts index 574080f4..41800092 100644 --- a/twake/frontend/src/app/features/auth/provider/oidc/oidc-auth-provider-service.ts +++ b/twake/frontend/src/app/features/auth/provider/oidc/oidc-auth-provider-service.ts @@ -14,7 +14,6 @@ import LocalStorage from 'app/features/global/framework/local-storage-service'; const OIDC_CALLBACK_URL = '/oidccallback'; const OIDC_SIGNOUT_URL = '/signout'; -const OIDC_CLIENT_ID = 'twake'; @TwakeService('OIDCAuthProvider') export default class OIDCAuthProviderService @@ -45,13 +44,15 @@ export default class OIDCAuthProviderService Oidc.Log.logger = Logger.getLogger('OIDCClient'); Oidc.Log.level = EnvironmentService.isProduction() ? Oidc.Log.WARN : Oidc.Log.DEBUG; + const audience = ['https://dev-mxb6x0f2.eu.auth0.com/api/v2/']; + this.userManager = new Oidc.UserManager({ userStore: new Oidc.WebStorageStateStore({ store: window.localStorage }), authority: this.configuration?.authority || environment.api_root_url, - client_id: this.configuration?.client_id || OIDC_CLIENT_ID, + client_id: this.configuration?.client_id, redirect_uri: getAsFrontUrl(OIDC_CALLBACK_URL), response_type: 'code', - scope: 'openid profile email address phone offline_access', + scope: 'openid profile email address phone offline_access ' + audience.join(' '), post_logout_redirect_uri: getAsFrontUrl(OIDC_SIGNOUT_URL), //silent_redirect_uri: getAsFrontUrl(OIDC_SILENT_URL), automaticSilentRenew: true, @@ -236,7 +237,10 @@ export default class OIDCAuthProviderService this.logger.info('getJWTFromOidcToken, user expired'); } - ConsoleService.getNewAccessToken({ access_token: user.access_token }, callback); + ConsoleService.getNewAccessToken( + { id_token: user.id_token, access_token: user.access_token }, + callback, + ); } signinRedirect() { diff --git a/twake/frontend/src/app/features/console/services/console-service.ts b/twake/frontend/src/app/features/console/services/console-service.ts index f0abf93c..53c65644 100644 --- a/twake/frontend/src/app/features/console/services/console-service.ts +++ b/twake/frontend/src/app/features/console/services/console-service.ts @@ -109,7 +109,7 @@ class ConsoleService { * @param callback */ public getNewAccessToken( - currentToken: { access_token: string }, + currentToken: { access_token: string; id_token: string }, callback: (err?: Error, access_token?: JWTDataType) => void, ): void { this.logger.debug( @@ -117,7 +117,7 @@ class ConsoleService { ); Api.post( '/internal/services/console/v1/login', - { remote_access_token: currentToken.access_token }, + { oidc_id_token: currentToken.id_token }, (response: { access_token: JWTDataType; message: string; diff --git a/twake/frontend/src/app/features/global/framework/logger-service.ts b/twake/frontend/src/app/features/global/framework/logger-service.ts index 973354c0..1996cbcc 100644 --- a/twake/frontend/src/app/features/global/framework/logger-service.ts +++ b/twake/frontend/src/app/features/global/framework/logger-service.ts @@ -13,7 +13,7 @@ prefix.apply(log, { return level.toUpperCase(); }, nameFormatter(name) { - return name || 'Twake'; + return name || 'Tdrive'; }, timestampFormatter(date) { return date.toISOString(); diff --git a/twake/frontend/src/app/features/global/services/init-service.ts b/twake/frontend/src/app/features/global/services/init-service.ts index 9fee3dd6..52e39555 100644 --- a/twake/frontend/src/app/features/global/services/init-service.ts +++ b/twake/frontend/src/app/features/global/services/init-service.ts @@ -38,14 +38,15 @@ export type ServerInfoType = null | { help_url: string | null; pricing_plan_url: string | null; app_download_url: string | null; + app_grid: { logo: string; name: string; url: string }[]; mobile: { mobile_redirect: string; mobile_appstore: string; mobile_googleplay: string; }; accounts: { - type: 'console' | 'internal'; - console?: ConsoleConfiguration; + type: 'remote' | 'internal'; + remote?: ConsoleConfiguration; internal?: InternalConfiguration; }; }; @@ -68,7 +69,7 @@ class InitService extends Observable { companyId = companyId || WorkspaceService.currentGroupId; const identity_provider_id = getCompany(companyId || '')?.identity_provider_id || getCompany(companyId || '')?.id; - return (this.server_infos?.configuration?.accounts?.console?.[link] || '').replace( + return (this.server_infos?.configuration?.accounts?.remote?.[link] || '').replace( /\{company_id\}/gm, identity_provider_id, ); diff --git a/twake/frontend/src/app/features/global/utils/window.ts b/twake/frontend/src/app/features/global/utils/window.ts index bb7eb49b..fea70c55 100755 --- a/twake/frontend/src/app/features/global/utils/window.ts +++ b/twake/frontend/src/app/features/global/utils/window.ts @@ -3,7 +3,7 @@ import { capitalize } from 'lodash'; import Globals from 'app/features/global/services/globals-twake-app-service'; class WindowState { - public readonly app_name: string = 'Twake'; + public readonly app_name: string = 'Tdrive'; public prefix = ''; public suffix = ''; diff --git a/twake/frontend/src/app/features/router/services/router-service.ts b/twake/frontend/src/app/features/router/services/router-service.ts index aa70a40f..2df7b5f7 100644 --- a/twake/frontend/src/app/features/router/services/router-service.ts +++ b/twake/frontend/src/app/features/router/services/router-service.ts @@ -8,7 +8,7 @@ import Login from 'app/views/login/login'; import Logout from 'app/views/login/logout'; import Error from 'app/views/error'; import Join from 'app/views/join'; -import PublicMainView from 'app/views/applications/drive/shared'; +import PublicMainView from 'app/views/client/body/drive/shared'; import Observable from '../../../deprecated/Observable/Observable'; import { getWorkspacesByCompany } from 'app/features/workspaces/state/workspace-list'; diff --git a/twake/frontend/src/app/molecules/grouped-rows/base/index.tsx b/twake/frontend/src/app/molecules/grouped-rows/base/index.tsx index 282f7fa4..7909ed1b 100644 --- a/twake/frontend/src/app/molecules/grouped-rows/base/index.tsx +++ b/twake/frontend/src/app/molecules/grouped-rows/base/index.tsx @@ -30,8 +30,8 @@ export default function Block(props: BlockProps) {
-
- {props.subtitle} +
+ {props.subtitle}
{props.subtitle_suffix}
diff --git a/twake/frontend/src/app/molecules/quoted-content/index.tsx b/twake/frontend/src/app/molecules/quoted-content/index.tsx deleted file mode 100644 index 7ac6623a..00000000 --- a/twake/frontend/src/app/molecules/quoted-content/index.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import { - FileTypeArchiveIcon, - FileTypeDocumentIcon, - FileTypePdfIcon, - FileTypeSlidesIcon, - FileTypeSpreadsheetIcon, - FileTypeUnknownIcon, -} from 'app/atoms/icons-colored'; -import { Base } from 'app/atoms/text'; -import fileUploadApiClient from 'app/features/files/api/file-upload-api-client'; -import Languages from 'app/features/global/services/languages-service'; -import { useMessage, useSetMessage } from 'app/features/messages/hooks/use-message'; -import { NodeMessage } from 'app/features/messages/types/message'; -import { MessageContext } from 'app/views/applications/messages/message/message-with-replies'; -import MessageContent from 'app/views/applications/messages/message/parts/MessageContent'; -import React, { useContext, useEffect } from 'react'; - -type PropsType = { - message: NodeMessage['quote_message']; -}; - -export const useQuotedMessage = ( - message: NodeMessage, - context: { - companyId: string; - workspaceId: string; - channelId: string; - threadId: string; - id: string; - }, -) => { - const quotedMessageFromStore = useMessage({ - ...context, - threadId: message.quote_message?.thread_id as string, - id: message.quote_message?.id as string, - }).message; - - const quotedMessage = { - ...message.quote_message, - ...(quotedMessageFromStore || message.quote_message), - } as NodeMessage['quote_message']; - - const setMessage = useSetMessage(quotedMessage?.company_id || context.companyId); - useEffect(() => { - if (!quotedMessageFromStore?.id && quotedMessage?.id) { - setMessage(quotedMessage); - } - }, []); - - return quotedMessage; -}; - -export default ({ message }: PropsType): React.ReactElement => { - const context = useContext(MessageContext); - - if (!message) { - return <>; - } - - const attachmentType = fileUploadApiClient.mimeToType(message.files?.[0]?.metadata?.mime || ''); - - if (context.channelId && message.channel_id !== context.channelId) { - return ( - <> - - - - - ); - } - - return ( - <> - {message.text && message.text.length ? ( - - {message.text} - - ) : ( -
- )} - {!!message.files?.length && - (message.files?.length === 1 ? ( -
- <> - {attachmentType === 'archive' ? ( - - ) : attachmentType === 'pdf' ? ( - - ) : attachmentType === 'document' ? ( - - ) : attachmentType === 'spreadsheet' ? ( - - ) : attachmentType === 'slides' ? ( - - ) : ( - - )} - - {message.files?.[0].metadata?.name} -
- ) : ( -
- - - {Languages.t('molecules.quoted_content.attachements', [message.files?.length])} - -
- ))} - - ); -}; diff --git a/twake/frontend/src/app/molecules/tabs/index.tsx b/twake/frontend/src/app/molecules/tabs/index.tsx index 3ee05c02..f88e854a 100644 --- a/twake/frontend/src/app/molecules/tabs/index.tsx +++ b/twake/frontend/src/app/molecules/tabs/index.tsx @@ -21,12 +21,14 @@ export default function Tab(props: TabsProps) { return ( <> -
+
{props.tabs.map((tab, idx) => { const cl = defaultTabClassName + - (idx === props.selected ? activeTabClassName : inactiveTabClassName) - + props.parentClassName; + (idx === props.selected ? activeTabClassName : inactiveTabClassName) + + props.parentClassName; return (
props.onClick(idx)}> {tab} diff --git a/twake/frontend/src/app/styles/ui.less b/twake/frontend/src/app/styles/ui.less index 0011fb45..23662cde 100755 --- a/twake/frontend/src/app/styles/ui.less +++ b/twake/frontend/src/app/styles/ui.less @@ -6,7 +6,7 @@ html { color: var(--black); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - background-color: var(--secondary) !important; + background-color: #FFF; } #root { diff --git a/twake/frontend/src/app/views/applications/calendar/calendar-content.jsx b/twake/frontend/src/app/views/applications/calendar/calendar-content.jsx deleted file mode 100755 index e384c7fe..00000000 --- a/twake/frontend/src/app/views/applications/calendar/calendar-content.jsx +++ /dev/null @@ -1,850 +0,0 @@ -import React, { Component, useState } from 'react'; - -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import Languages from 'app/features/global/services/languages-service'; -import UserService from 'app/features/users/services/current-user-service'; -import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js'; -import LocalStorage from 'app/features/global/framework/local-storage-service'; - -import ModalManager from 'app/components/modal/modal-manager'; - -import Icon from 'app/components/icon/icon.jsx'; -import moment from 'moment'; -import Groups from 'app/deprecated/workspaces/groups.js'; -import FullCalendar from './full-calendar/full-calendar.jsx'; -import EventDetails from './modals/EventDetails.jsx'; -import EventCreation from './modals/EventCreation.jsx'; -import EventModification from './modals/EventModification.jsx'; -import CalendarEditor from './modals/CalendarEditor.jsx'; -import Menu from 'components/menus/menu.jsx'; -import DayPicker from 'components/calendar/day-picker/day-picker.jsx'; -import AlertManager from 'app/features/global/services/alert-manager-service'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import WorkspacesService from 'app/deprecated/workspaces/workspaces.jsx'; -import popupManager from 'app/deprecated/popupManager/popupManager.js'; -import ConnectorsListManager from 'components/connectors-list-manager/connectors-list-manager.jsx'; -import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; -import Checkbox from 'app/components/inputs/deprecated_checkbox.jsx'; -import InputWithClipBoard from 'components/input-with-clip-board/input-with-clip-board.jsx'; -import Select from 'components/select/select.jsx'; -import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.jsx'; -import UnconfiguredTab from './unconfigured-tab.jsx'; -import RouterService from 'app/features/router/services/router-service'; -import MainPlus from 'components/main-plus/main-plus.jsx'; -import { - getCompanyApplication as getApplication, - getCompanyApplications, -} from 'app/features/applications/state/company-applications'; - -import './calendar.scss'; - -const ExportView = props => { - const [export_my_calendar, set_export_my_calendar] = useState(props.values.export_my_calendar); - const [export_workspace_calendar, set_export_workspace_calendar] = useState( - props.values.export_workspace_calendar, - ); - return ( -
- { - set_export_my_calendar(value); - props.onChange(export_my_calendar, export_workspace_calendar); - }} - /> - { - set_export_workspace_calendar(value); - props.onChange(export_my_calendar, export_workspace_calendar); - }} - /> -
- ); -}; - -export default class Calendar extends Component { - constructor(props) { - super(props); - - this.state = { - i18n: Languages, - view: 'timeGridWeek', - filter: 'workspace', - preview: null, - export_my_calendar: true, - export_workspace_calendar: true, - new_calendar: {}, - }; - CalendarService.filter_mode = this.state.filter; - - this.props = props; - const { workspaceId, channelId } = RouterService.getStateFromRoute(); - - this.loaded_date_range = {}; - this.calendar_collection_key = 'calendar_' + workspaceId; - - this.setLoadedRange( - 'both', - moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 - 60 * 60 * 24 * 31, - moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 + - 2 * 60 * 60 * 24 * 31, - ); - - Collections.get('calendars').addListener(this); - Collections.get('calendars').addSource( - { - http_base_url: 'calendar/calendar', - http_options: { - channel_id: channelId, - workspace_id: workspaceId, - }, - websockets: [ - { - uri: 'calendars/' + workspaceId, - options: { type: 'calendar' }, - }, - ], - }, - this.calendar_collection_key, - () => { - this.onFirstLoad(); - }, - ); - - if (Collections.get('calendars').did_load_first_time[this.calendar_collection_key]) { - this.onFirstLoad(); - } - - Collections.get('events').addListener(this); - Languages.addListener(this); - CalendarService.addListener(this); - } - onFirstLoad() { - const { workspaceId, channelId } = RouterService.getStateFromRoute(); - var calendar_list = Collections.get('calendars') - .findBy({ workspace_id: workspaceId }) - .map(cal => { - return { - calendar_id: cal.id, - workspace_id: cal.workspace_id, - }; - }); - if (this.props.tab != null && this.props.tab.configuration.calendars) { - this.allowed_ids = this.props.tab.configuration.calendars.map(c => c.calendar_id); - calendar_list = calendar_list.filter(c => this.allowed_ids.indexOf(c.calendar_id) >= 0); - } - Collections.get('events').addSource( - { - http_base_url: 'calendar/event', - http_options: { - channel_id: channelId, - after_ts: - this.loaded_date_range['both'].min || new Date().getTime() / 1000 - 24 * 60 * 60 * 60, - before_ts: - this.loaded_date_range['both'].max || new Date().getTime() / 1000 + 24 * 60 * 60 * 60, - calendar_list: calendar_list, - mode: 'both', - }, - websockets: [ - { - uri: 'calendar_events/' + workspaceId, - options: { type: 'event' }, - }, - { - uri: 'calendar_events/user/' + UserService.getCurrentUserId(), - options: { type: 'event' }, - }, - ], - }, - this.calendar_collection_key, - ); - } - setLoadedRange(key, min, max) { - if (!this.loaded_date_range[key]) { - this.loaded_date_range[key] = {}; - } - this.loaded_date_range[key].min = min; - this.loaded_date_range[key].max = max; - this.loaded_date_range[key].last_updated = new Date(); - } - - componentDidMount() { - const view = LocalStorage.getItem('calendar_view'); - - if (view && this.calendar) { - this.setState({ view }); - this.calendar.view(view); - } - } - - componentWillUnmount() { - Collections.get('events').removeListener(this); - Collections.get('events').removeSource(this.calendar_collection_key); - - Collections.get('calendars').removeListener(this); - Collections.get('calendars').removeSource(this.calendar_collection_key); - - if (CalendarService.preview) { - CalendarService.closePopups(); - } - - Languages.removeListener(this); - CalendarService.removeListener(this); - } - UNSAFE_componentWillUpdate(nextProps, nextState) { - if (nextProps.tab != null && nextProps.tab.configuration.calendars) { - this.allowed_ids = nextProps.tab.configuration.calendars.map(c => c.calendar_id); - } - - // eslint-disable-next-line no-unused-vars - var filter = nextState.filter; - if (!this.loaded_date_range['both']) { - this.loaded_date_range['both'] = {}; - } - var range = this.loaded_date_range['both']; - var requested_min = - moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 - 60 * 60 * 24 * 31; - var requested_max = - moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 + - 2 * 60 * 60 * 24 * 31; - if ( - !range.min || - range.min > requested_min || - range.max < requested_max || - new Date().getTime() - range.last_updated.getTime() > 60000 - ) { - this.setLoadedRange('both', requested_min, requested_max); - - var calendar_list = Collections.get('calendars') - .findBy({ workspace_id: RouterService.getStateFromRoute().workspaceId }) - .map(cal => { - return { - calendar_id: cal.id, - workspace_id: cal.workspace_id, - }; - }); - - if (this.props.tab != null) { - calendar_list = calendar_list.filter(c => this.allowed_ids.indexOf(c.calendar_id) >= 0); - } - - Collections.get('events').sourceLoad( - this.calendar_collection_key, - { - after_ts: requested_min, - before_ts: requested_max, - calendar_list: calendar_list, - mode: 'both', - }, - () => {}, - ); - } - } - componentDidUpdate() { - if (this.date !== CalendarService.date && this.calendar) { - this.calendar.setDate(CalendarService.date, true); - this.date = CalendarService.date; - } - } - configureCalendarConnector(app, cal) { - var data = { - calendar: cal, - }; - WorkspacesApps.notifyApp(app.id, 'configuration', 'calendar', data); - } - renderCalendarList() { - const { workspaceId } = RouterService.getStateFromRoute(); - var calendars = Collections.get('calendars').findBy({ - workspace_id: workspaceId, - }); - if (this.props.tab != null) { - calendars = calendars.filter(c => this.allowed_ids.indexOf(c.id) >= 0); - } - - if (calendars && calendars.length > 0) { - var list = []; - calendars.forEach(cal => { - var el = ( -
-
{cal.title} -
- ); - if (WorkspaceUserRights.hasWorkspacePrivilege()) { - list.push({ - type: 'menu', - text: el, - submenu: [ - { - type: 'menu', - text: Languages.t( - 'scenes.apps.calendar.modify_calendar_menu', - [], - 'Modifier le calendrier', - ), - submenu_replace: true, - submenu: [ - { - type: 'title', - text: Languages.t( - 'scenes.apps.calendar.edit_calendar_title', - [], - 'Éditer le calendrier', - ), - }, - { - type: 'react-element', - reactElement: level => ( - - ), - }, - ], - }, - { - type: 'menu', - className: 'error', - text: Languages.t('general.delete', [], 'Supprimer'), - onClick: () => { - AlertManager.confirm( - () => { - Collections.get('calendars').remove(cal, this.calendar_collection_key); - }, - () => {}, - { - text: Languages.t( - 'scenes.apps.calendar.remove_calendar_confirmation', - [], - 'Supprimer le calendrier et ses événements définitivement ?', - ), - }, - ); - }, - }, - { type: 'separator' }, - { - type: 'menu', - text: Languages.t('scenes.apps.calendar.connectors_menu', [], 'Connecteurs...'), - submenu: [ - { - type: 'react-element', - reactElement: level => { - var apps = getCompanyApplications(Groups.currentGroupId).filter(app => false); - if (apps.length > 0) { - return ( - getApplication(id)) - .filter(item => item)} - configurable={item => - ((item.display || {}).configuration || {}).can_configure_in_calendar - } - onChange={ids => { - cal.connectors = ids; - Collections.get('calendars').save(cal, this.calendar_collection_key); - }} - onConfig={app => { - this.configureCalendarConnector(app, cal); - }} - /> - ); - } - return ( -
- {Languages.t( - 'scenes.apps.calendar.no_connectors_menu_text', - [], - "Vous n'avez aucun connecteur capable de se connecter à un calendrier.", - )} -
- ); - }, - }, - { type: 'separator' }, - { - type: 'menu', - text: Languages.t( - 'scenes.apps.calendar.connectors_search_menu', - [], - 'Chercher des connecteurs...', - ), - onClick: () => { - popupManager.open( - , - true, - 'workspace_parameters', - ); - }, - }, - ], - }, - ], - }); - } else { - list.push({ type: 'menu', text: el }); - } - }); - return list; - } else { - return [ - { - type: 'text', - text: Languages.t( - 'scenes.apps.calendar.no_calendar_text', - [], - "Vous n'avez défini aucun calendrier pour cet espace de travail.", - ), - }, - ]; - } - } - export(download) { - if (!this.state.export_my_calendar && !this.state.export_workspace_calendar) { - return; - } - var mode = 'mine'; - var calendar_list = []; - if (this.state.export_my_calendar && this.state.export_workspace_calendar) { - mode = 'both'; - } else if (this.state.export_workspace_calendar) { - mode = 'workspace'; - } - - if (mode === 'both' || mode === 'workspace') { - calendar_list = Collections.get('calendars') - .findBy({ workspace_id: RouterService.getStateFromRoute().workspaceId }) - .map(cal => { - return { - calendar_id: cal.id, - workspace_id: cal.workspace_id, - }; - }); - if (this.props.tab != null) { - calendar_list = calendar_list.filter(c => this.allowed_ids.indexOf(c.calendar_id) >= 0); - } - } - - CalendarService.export( - WorkspacesService.currentWorkspaceId, - { mode: mode, calendar_list: calendar_list }, - download, - token => { - if (!download) { - AlertManager.alert(() => {}, { text: }); - } - }, - ); - } - - completeRect(rect) { - rect.x = rect.x || rect.left; - rect.y = rect.y || rect.top; - return rect; - } - render() { - const { workspaceId } = RouterService.getStateFromRoute(); - if ( - this.props.tab != null && - (!this.props.tab.configuration || this.props.tab.configuration.calendars === undefined) - ) { - return ( - - ); - } - - var calendars = Collections.get('calendars') - .findBy({ workspace_id: workspaceId }) - .map(cal => cal.id); - - if (this.props.tab != null) { - calendars = calendars.filter(c => this.allowed_ids.indexOf(c) >= 0); - } - - var events = Collections.get('events') - .findBy({}) - .filter(event => { - if (!event.id) { - return true; - } - event._user_transparent = false; - - var not_mine = - (event.participants || []).filter( - part => part.user_id_or_mail === UserService.getCurrentUserId(), - ).length === 0; - if (this.state.filter === 'mine') { - if (not_mine) { - event._user_transparent = true; - } - return true; - } - if (this.state.filter === 'workspace' || this.state.filter === 'custom') { - //Not in this workspace - if ( - event.workspaces_calendars.filter(part => calendars.indexOf(part.calendar_id) >= 0) - .length === 0 - ) { - if (!not_mine) { - //Set transparent event - event._user_transparent = true; - return true; - } else { - return false; - } - } - } - return true; - }); - - if ( - CalendarService.edited && - CalendarService.edited.from && - CalendarService.edited.from !== this.lastEditedFrom - ) { - this.lastEditedFrom = CalendarService.edited.from; - this.calendar.setDate(new Date(CalendarService.edited.from * 1000), true); - - if (!CalendarService.edited.id) { - setTimeout(() => { - var htmlEl = this.calendar.getDomElement(CalendarService.edited); - if (htmlEl) { - ModalManager.updateHighlight(this.completeRect(window.getBoundingClientRect(htmlEl))); - } - }, 200); - } - } - - var calendar_menu = [ - { - type: 'menu', - text: Languages.t('scenes.apps.calendar.my_calendar_menu', [], 'Mon calendrier'), - onClick: () => { - this.setState({ filter: 'mine' }); - CalendarService.filter_mode = 'mine'; - Menu.closeAll(); - }, - }, - { - type: 'menu', - text: Languages.t('scenes.apps.calendar.workspace_menu', [], 'Espace de travail'), - onClick: () => { - this.setState({ filter: 'workspace' }); - CalendarService.filter_mode = 'workspace'; - Menu.closeAll(); - }, - }, - /*{type:"menu", text:"Personnaliser...", onClick: ()=>{ - - }},*/ - { type: 'separator' }, - { - type: 'menu', - text: Languages.t('scenes.apps.calendar.export_view_menu', [], 'Exporter la vue'), - submenu: [ - { type: 'title', text: Languages.t('scenes.apps.calendar.export_title', [], 'Exporter') }, - { - type: 'react-element', - reactElement: () => { - return ( - { - this.setState({ - export_my_calendar: my, - export_workspace_calendar: ws, - }); - }} - /> - ); - }, - }, - { - type: 'menu', - text: Languages.t( - 'scenes.apps.calendar.ics_subscription_menu', - [], - "Obtenir un lien d'abonnement ICS", - ), - onClick: () => { - this.export(false); - }, - }, - { - type: 'menu', - text: Languages.t( - 'scenes.apps.calendar.ics_download_menu', - [], - 'Télécharger un fichier ICS', - ), - onClick: () => { - this.export(true); - }, - }, - ], - }, - { type: 'separator' }, - ]; - - calendar_menu = calendar_menu.concat(this.renderCalendarList()); - - if (this.props.tab === null && WorkspaceUserRights.hasWorkspacePrivilege()) { - calendar_menu = calendar_menu.concat([ - { - type: 'menu', - text: Languages.t( - 'scenes.apps.calendar.add_calendar_menu', - [], - 'Ajouter un calendrier...', - ), - submenu_replace: true, - submenu: [ - { - type: 'title', - text: Languages.t( - 'scenes.apps.calendar.create_calendar_title', - [], - 'Créer un calendrier', - ), - }, - { - type: 'react-element', - reactElement: level => { - return ( - - ); - }, - }, - ], - }, - ]); - } - - var list = []; - - list.push( -
-
-
- - { - { - mine: Languages.t('scenes.apps.calendar.my_calendar', [], 'Mon calendrier'), - workspace: Languages.t('scenes.apps.calendar.workspace', [], 'Espace de travail'), - }[this.state.filter] - } - -
- -
- {this.state.view !== 'dayGridMonth' && ( -
- {Languages.t('scenes.apps.calendar.calendar.week_btn', [], 'Semaine')}{' '} - {moment(CalendarService.date).week()} -
- )} - - this.calendar.today(), - }, - { type: 'separator' }, - { - type: 'react-element', - reactElement: () => ( -
- { - this.calendar.setDate(value); - Menu.closeAll(); - }} - /> -
- ), - }, - ]} - > - {CalendarService.date && - (this.state.view === 'dayGridMonth' || - this.state.view === 'timeGridWeek' || - this.state.view === 'listYear') && - moment(CalendarService.date).format('MMMM YYYY')} - {CalendarService.date && - this.state.view === 'timeGridDay' && - moment(CalendarService.date).format('LL')} -
- -
- this.calendar.previous()} - /> - this.calendar.next()} - /> -
- -
- { - this.change('title', evt.target.value); - }} - className="full_width bottom-margin" - big - /> - -
- { - this.change('title', evt.target.value); - }} - className="full_width bottom-margin" - big - /> - -
- - - - ); - } -}; diff --git a/twake/frontend/src/app/views/applications/messages/input/parts/Attachments.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/Attachments.tsx deleted file mode 100644 index af14764f..00000000 --- a/twake/frontend/src/app/views/applications/messages/input/parts/Attachments.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Card, Col, Row, Tooltip, Typography } from 'antd'; -import { FileType } from 'app/features/files/types/file'; -import '../input.scss'; -import React from 'react'; - -type PropsType = { - files: FileType[]; -}; - -const { Text } = Typography; -export default ({ files }: PropsType) => { - return ( - - {files.map(f => ( - - - - - {f?.metadata?.name || ''} - - - - - ))} - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/input/parts/EphemeralMessages.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/EphemeralMessages.tsx deleted file mode 100644 index 64f909dd..00000000 --- a/twake/frontend/src/app/views/applications/messages/input/parts/EphemeralMessages.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import Languages from 'app/features/global/services/languages-service'; -import { useEphemeralMessages } from 'app/features/messages/hooks/use-ephemeral-messages'; -import useRouterCompany from 'app/features/router/hooks/use-router-company'; -import { useEffect } from 'react'; -import { MessageContext } from '../../message/message-with-replies'; -import MessageContent from '../../message/parts/MessageContent'; -import ThreadSection from '../../parts/thread-section'; - -type Props = { - channelId: string; - workspaceId: string; - threadId: string; - onHasEphemeralMessage: () => void; - onNotEphemeralMessage: () => void; -}; - -export default (props: Props) => { - const companyId = useRouterCompany(); - const workspaceId = props.workspaceId; - const channelId = props.channelId; - const { lastEphemeral } = useEphemeralMessages({ - companyId, - channelId: props.channelId, - }); - - const messageKey = { - id: lastEphemeral?.id || '', - threadId: lastEphemeral?.thread_id || '', - companyId, - }; - - const hasEphemeral = - lastEphemeral && - (lastEphemeral.thread_id === props.threadId || - (!props.threadId && - (!lastEphemeral.thread_id || lastEphemeral.thread_id === lastEphemeral.id))); - - useEffect(() => { - if (lastEphemeral && hasEphemeral) { - props.onHasEphemeralMessage(); - } else { - props.onNotEphemeralMessage(); - } - }, [lastEphemeral, hasEphemeral]); - - if (!hasEphemeral) { - return
; - } - - const updatedKey = - lastEphemeral.id + lastEphemeral.ephemeral?.version + lastEphemeral.ephemeral?.id; - - return ( -
-
- {Languages.t('scenes.apps.messages.just_you', [], 'Visible uniquement par vous')} -
- - - - - - -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/input/parts/InputOptions.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/InputOptions.tsx deleted file mode 100644 index b12b2706..00000000 --- a/twake/frontend/src/app/views/applications/messages/input/parts/InputOptions.tsx +++ /dev/null @@ -1,276 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import React, { useState } from 'react'; -import { EditorState } from 'draft-js'; -import { Smile, Video, MoreHorizontal, Paperclip, Type } from 'react-feather'; -import { Button, Tooltip } from 'antd'; -import EmojiPicker from 'components/emoji-picker/emoji-picker'; -import Menu from 'components/menus/menu'; -import MenusManager from 'app/components/menus/menus-manager'; -import Languages from 'app/features/global/services/languages-service'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps'; -import MessageEditorsManager from 'app/features/messages/services/message-editor-service-factory'; -import EditorToolbar from 'app/components/rich-text-editor/editor-toolbar'; -import { Application } from 'app/features/applications/types/application'; -import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; - -type Props = { - channelId: string; - threadId: string; - onAddEmoji?: (emoji: any) => void; - onSend?: () => void; - triggerApp?: (app: any, fromIcon: any, evt: any) => void; - isEmpty: boolean; - onRichTextChange: (editorState: EditorState) => void; - richTextEditorState: EditorState; -}; - -type MenuItem = { - type: string; - emoji?: any; - icon?: any; - text?: string; - onClick?: (event: Event) => void; -}; - -export default (props: Props) => { - const [displayRichTextOptions, setDisplayRichTextOptions] = useState(false); - const [, setDisplayFileMenu] = useState(false); - const [, setDisplayEmojiMenu] = useState(false); - const addon_menu: MenuItem[] = []; - const addon_right_icon: any[] = []; - const addon_files: any[] = []; - const addon_calls: any[] = []; - - const apps = useCompanyApplications().applications.filter( - (app: Application) => app.display?.twake?.chat?.input, - ); - - if (props.triggerApp) { - if (apps.length > 0) { - // eslint-disable-next-line array-callback-return - apps.map((app: Application) => { - if (app) { - let icon = WorkspacesApps.getAppIcon(app); - let emoji = ''; - if ((icon || '').indexOf('http') === 0) { - emoji = icon; - icon = ''; - } - const menu_item: MenuItem = { - type: 'menu', - emoji, - icon, - text: app.identity?.name, - onClick: (evt: unknown) => { - props.triggerApp && props.triggerApp(app, undefined, evt); - }, - }; - - if ( - app.display?.twake?.chat?.input?.type === 'file' && - app?.identity?.code !== 'twake_drive' - ) { - addon_files.push(menu_item); - } else if ( - app?.identity?.code === 'jitsi' || - app.display?.twake?.chat?.input?.type === 'call' - ) { - addon_calls.push(menu_item); - } else if (app?.identity?.code !== 'twake_drive') { - addon_menu.push(menu_item); - } - } - }); - } - } - - const RichTextToolbar = () => ( - props.onRichTextChange(editorState)} - /> - ); - - const displayToolbar = () => { - return displayRichTextOptions; - }; - - return ( -
-
- {addon_files.length > 0 && ( - setDisplayFileMenu(true)} - onClose={() => setDisplayFileMenu(false)} - menu={[ - { - type: 'menu', - icon: 'desktop', - text: Languages.t('scenes.apps.messages.input.attach_file.from_computer'), - onClick: () => { - MessageEditorsManager.get(props.channelId).openFileSelector(props.threadId); - }, - }, - ...addon_files, - ]} - > - - - - - )} - - {addon_files.length === 0 && ( - - - - )} - - {props.onAddEmoji && ( - setDisplayEmojiMenu(true)} - onClose={() => setDisplayEmojiMenu(false)} - menu={[ - { - type: 'react-element', - className: 'menu-cancel-margin', - reactElement: () => { - return ( - { - MenusManager.closeMenu(); - props.onAddEmoji && props.onAddEmoji(emoji); - }} - /> - ); - }, - }, - ]} - > - - - - - )} - - {addon_calls.length > 1 && ( - - - - - - )} - - {addon_calls.length === 1 && ( - - - - )} - - - - - - {addon_right_icon.map((app: Application) => { - return ( - - ); - })} - - {addon_menu.length > 0 && ( - - - - )} -
- - {displayToolbar() && ( -
-
- -
-
- )} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/input/parts/IsWriting.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/IsWriting.tsx deleted file mode 100644 index 58dfe214..00000000 --- a/twake/frontend/src/app/views/applications/messages/input/parts/IsWriting.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { useChannelWritingActivityState } from 'app/features/channels/hooks/use-channel-writing-activity'; -import Languages from 'app/features/global/services/languages-service'; -import WritingLoader from 'app/components/writing-loader/writing-loader'; -import { ChannelWritingActivityType } from 'app/features/channels/state/channel-writing-activity'; - -type PropsType = { - channelId: string; - threadId: string; -}; - -const getChannelActivityMessage = (channelActivityUsers: ChannelWritingActivityType[]) => { - const channelActivityUsersCount = channelActivityUsers.length; - let channelActivityMessage = ''; - - if (channelActivityUsersCount === 1) { - channelActivityMessage = Languages.t( - 'scenes.app.messages.input.parts.is_writing.message.user_is_writing', - [channelActivityUsers[0].name], - ); - } - - if (channelActivityUsersCount === 2) { - channelActivityMessage = Languages.t( - 'scenes.app.messages.input.parts.is_writing.message.users_are_writing', - [channelActivityUsers[0].name, channelActivityUsers[1].name], - ); - } - - if (channelActivityUsersCount > 2) { - channelActivityMessage = Languages.t( - 'scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing', - [channelActivityUsers[0].name, channelActivityUsers[1].name, channelActivityUsersCount - 2], - ); - } - - return channelActivityMessage; -}; - -export default ({ channelId, threadId }: PropsType): JSX.Element => { - const channelActivityUsers = useChannelWritingActivityState(channelId, threadId); - const [writtingInfo, setWritingInfo] = useState(''); - - useEffect(() => { - const message = getChannelActivityMessage(channelActivityUsers); - - setWritingInfo(message); - }, [channelActivityUsers]); - - return writtingInfo.length > 0 ? ( -
-
-
{writtingInfo}
-
-
- ) : ( - <> - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/input/parts/MessageExternalFilePicker.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/MessageExternalFilePicker.tsx deleted file mode 100644 index d0f809a7..00000000 --- a/twake/frontend/src/app/views/applications/messages/input/parts/MessageExternalFilePicker.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React, { ReactNode, useEffect } from 'react'; -import { MessageFileType } from 'app/features/messages/types/message'; -import { useUploadZones } from 'app/features/files/hooks/use-upload-zones'; -import { ChannelType } from 'app/features/channels/types/channel'; -import { useMessageEditor } from 'app/features/messages/hooks/use-message-editor'; - -export default (props: { - children: ReactNode; - setHandler: (handler: (file: MessageFileType) => void) => void; - channel: ChannelType; - threadId?: string; -}) => { - const { key: editorId } = useMessageEditor({ - companyId: props.channel.company_id || '', - workspaceId: props.channel.workspace_id || '', - channelId: props.channel.id, - threadId: props.threadId, - }); - const { files, setFiles } = useUploadZones(editorId); - - useEffect(() => { - props.setHandler((file: MessageFileType) => { - setFiles([...files, file]); - }); - }, [props.setHandler]); - - return <>{props.children}; -}; diff --git a/twake/frontend/src/app/views/applications/messages/input/parts/PendingAttachments.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/PendingAttachments.tsx deleted file mode 100644 index cd2a6d49..00000000 --- a/twake/frontend/src/app/views/applications/messages/input/parts/PendingAttachments.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React, { useEffect } from 'react'; -import { Col, Row } from 'antd'; -import { useUploadZones } from 'app/features/files/hooks/use-upload-zones'; -import '../input.scss'; -import { MessageFileType } from 'app/features/messages/types/message'; -import _ from 'lodash'; -import PossiblyPendingAttachment from '../../message/parts/PossiblyPendingAttachment'; - -type PropsType = { - zoneId: string; - initialValue?: MessageFileType[]; - onChange?: (list: MessageFileType[]) => void; -}; - -export default ({ zoneId, onChange, initialValue }: PropsType) => { - const { files, setFiles } = useUploadZones(zoneId); - - useEffect(() => { - if (initialValue) setFiles(initialValue.filter(f => f?.metadata?.source !== 'pending')); - }, []); - - useEffect(() => { - if (onChange) onChange(files); - }, [files]); - - return files.length > 0 ? ( - - {files.map((file, index) => { - return ( - - - setFiles( - files.filter( - f => !_.isEqual(f.metadata?.external_id, file.metadata?.external_id), - ), - ) - } - /> - - ); - })} - - ) : ( - <> - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/list-builder.tsx b/twake/frontend/src/app/views/applications/messages/list-builder.tsx deleted file mode 100644 index 1e138d95..00000000 --- a/twake/frontend/src/app/views/applications/messages/list-builder.tsx +++ /dev/null @@ -1,150 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable react/prop-types */ -import React, { - forwardRef, - ReactNode, - useCallback, - useEffect, - useImperativeHandle, - useRef, - useState, -} from 'react'; -import { ItemContent, Virtuoso, VirtuosoHandle } from 'react-virtuoso'; -import _ from 'lodash'; - -export type ListBuilderHandle = VirtuosoHandle & unknown; - -type Props = { - items: any[]; - followOutput: false | 'smooth' | 'auto'; - loadMore: (direction: 'history' | 'future', limit: number, offset?: any) => Promise; - itemContent: ItemContent; - itemId: (item: any) => string; - emptyListComponent: ReactNode; - onScroll: (e: React.UIEvent<'div', UIEvent>) => void; - style?: React.CSSProperties; - atBottomStateChange?: (atBottom: boolean) => void; - //Will be called just before to finish append messages for a final filtering - filterOnAppend?: (item: any[]) => any[]; -}; - -let prependMoreLock = false; -let appendMoreLock = false; - -export default React.memo( - forwardRef( - ( - { - emptyListComponent, - filterOnAppend, - followOutput, - itemId, - loadMore, - onScroll, - items: _items, - itemContent, - atBottomStateChange, - style, - }: Props, - ref, - ) => { - const START_INDEX = 10000000; - const INITIAL_ITEM_COUNT = (_items || []).length; - - const [firstItemIndex, setFirstItemIndex] = useState(START_INDEX); - const [items, setItems] = useState(_items || []); - const refVirtuoso = useRef(null); - - useImperativeHandle(ref, () => ({ - ...refVirtuoso.current, - })); - - useEffect(() => { - // Detect append or prepend or full replace items - const ids = items.map(i => itemId(i)); - //Find the first index in props _items that is already in displayed items - const first = _items.findIndex(i => ids.includes(itemId(i))); - //Find the last index in props _items that is already in displayed items - const lastIndex = _items - .slice() - .reverse() - .findIndex(i => ids.includes(itemId(i))); - const last = lastIndex >= 0 ? _items.length - 1 - lastIndex : lastIndex; - if (first == -1) { - //Replacement - setFirstItemIndex(START_INDEX); - setItems(_items); - } else if (first === 0 && last !== _items.length - 1) { - //Append - let newList = [...items, ..._items.slice(last + 1)]; - if (filterOnAppend) newList = filterOnAppend(newList); - setItems(newList); - } else if (last === _items.length - 1 && first !== 0) { - //Prepend - const newItems = _items.slice(0, first); - const nextFirstItemIndex = firstItemIndex - newItems.length; - setFirstItemIndex(() => nextFirstItemIndex); - setItems([...newItems, ...items]); - } else { - if (filterOnAppend) { - const newList = filterOnAppend([...items, ..._items]); - if ( - _.difference( - items.map(i => itemId(i)), - newList.map(i => itemId(i)), - ).length > 0 - ) { - setItems(newList); - } - } - } - }, [_items]); - - const appendItems = useCallback(() => { - if (appendMoreLock) return; - appendMoreLock = true; - - setTimeout(async () => { - await loadMore('future', 20, items[items.length - 1]); - appendMoreLock = false; - }, 10); - - return false; - }, [items]); - - const prependItems = useCallback(() => { - if (prependMoreLock) return; - prependMoreLock = true; - - setTimeout(async () => { - await loadMore('history', 20, items[0]); - prependMoreLock = false; - }, 10); - - return false; - }, [items]); - - if (items.length === 0) { - return
{emptyListComponent}
; - } - - return ( - onScroll(e)} - atBottomStateChange={atBottomStateChange} - computeItemKey={(_index, item) => itemId(item)} - /> - ); - }, - ), -); diff --git a/twake/frontend/src/app/views/applications/messages/message/message-with-replies.tsx b/twake/frontend/src/app/views/applications/messages/message/message-with-replies.tsx deleted file mode 100644 index bc0c2c2e..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/message-with-replies.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React, { useContext, useState } from 'react'; -import Message from './message'; -import Responses from './responses'; -import ReplyBlock from './parts/ReplyBlock'; -import LoadMoreReplies from './parts/LoadMoreReplies'; -import { MessagesListContext } from '../messages-list'; -import ThreadSection from '../parts/thread-section'; -import Thread from '../parts/thread'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import ActivityMessage, { ActivityType } from './parts/ChannelActivity/ActivityMessage'; -import { useHighlightMessage } from 'app/features/messages/hooks/use-highlight-message'; -import { NodeMessage } from 'app/features/messages/types/message'; - -export const MessageContext = React.createContext({ - companyId: '', - workspaceId: '', - channelId: '', - threadId: '', - id: '', -}); - -type Props = { - companyId: string; - workspaceId: string; - channelId: string; - threadId: string; - id?: string; -}; - -export default React.memo(({ threadId, workspaceId, channelId, companyId, id }: Props) => { - return ( - - - - ); -}); - -const MessageType = () => { - const listContext = useContext(MessagesListContext); - const context = useContext(MessageContext); - const { message } = useMessage(context); - const { highlight } = useHighlightMessage(); - const highlighted = - (highlight && - ((highlight.threadId === context.id && !listContext.hideReplies) || - highlight.answerId === context.id)) || - false; - const [firstMessageId, setFirstMessageId] = useState( - message.last_replies?.[0]?.id || message.thread_id, - ); - - if (message.subtype === 'system') { - const activity = message?.context?.activity as ActivityType; - return ; - } - - return ( - - - {!listContext.hideReplies && ( - <> - { - if (firstMessage) setFirstMessageId(firstMessage.id); - }} - /> - - {!listContext.readonly && } - - )} - - ); -}; - -const HeadMessage = () => { - const context = useContext(MessageContext); - const { message } = useMessage(context); - return ( - - - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/message.scss b/twake/frontend/src/app/views/applications/messages/message/message.scss deleted file mode 100644 index 1dc038d3..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/message.scss +++ /dev/null @@ -1,245 +0,0 @@ -.message { - text-align: left; - .deleted-message { - opacity: 0.5; - } - .message_is_loading { - opacity: 0.5; - } - .message-not-sent.content { - opacity: 0.5; - } - .alert_failed_icon { - margin-left: 8px; - margin-top: 0px; - display: flex; - color: var(--red); - } - .sender-space { - width: 28px; - margin-right: 8px; - display: flex; - justify-content: flex-end; - .sender-head, - .app_icon { - width: 28px; - height: 28px; - border-radius: 50%; - background-color: var(--grey-background); - background-size: cover; - background-position: center; - - .online_user_status { - position: relative; - bottom: -20px; - right: -20px; - } - } - - .sender-head { - .user_online_stPPatus { - right: -20px; - } - } - } - .message-content { - flex: 1; - min-width: 0; - width: 0; - - &.link-to-thread { - color: var(--grey-dark); - .content-parent { - &:before { - content: ''; - position: absolute; - left: 0px; - height: 100%; - width: 3px; - border-radius: 2px; - background: var(--grey-light); - } - position: relative; - padding-left: 8px; - } - .sender-status { - display: none; - } - } - .message-content-header-container { - position: relative; - display: inline-block; - overflow: hidden; - white-space: nowrap; - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: center; - .message-content-header { - position: relative; - display: inline-block; - overflow: hidden; - white-space: nowrap; - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: baseline; - - .sender-name { - font-weight: 700; - margin-right: 4px; - cursor: pointer; - } - .sender-status { - font-size: 12px; - color: var(--grey-dark); - margin-right: 4px; - } - .reply-text { - margin-right: 4px; - a, - a * { - display: inline; - } - overflow: hidden; - text-overflow: ellipsis; - } - .date { - color: var(--grey-dark); - font-size: 12px; - &:hover { - text-decoration: underline; - } - } - } - .message_header_loader { - height: 16px; - width: 16px; - margin-left: 4px; - } - } - } - - .message-options { - position: absolute; - background-color: var(--white); - height: 32px; - border-radius: 8px; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); - border: 1px solid var(--grey-light); - display: block; - top: -16px; - margin: auto; - right: 8px; - z-index: 1; - opacity: 0; - display: flex; - flex-direction: row; - overflow: hidden; - - &.drag { - left: -8px; - right: unset; - display: none; - - .option, - .option:hover { - min-width: 28px; - color: var(--primary); - cursor: grab; - } - } - - .separator { - height: 100%; - border-right: 1px solid var(--grey-light); - } - - .option { - min-width: 24px; - display: flex; - align-items: center; - justify-content: center; - color: var(--grey-dark); - cursor: pointer; - margin: 4px; - border-radius: 4px; - - &:hover { - color: var(--black); - background-color: var(--primary-background); - } - - &.active { - border: 1px solid var(--primary); - background-color: var(--primary-background); - } - } - } - .message-content.active { - .message-options.right { - opacity: 1; - } - } - &:hover { - .message-options { - opacity: 1; - } - } - - .message-content.loading-interaction { - opacity: 0.5; - pointer-events: none; - } - - .reactions { - padding-top: 8px; - - .reaction_container { - width: auto; - display: inline-block; - } - - .reaction { - display: inline-flex; - justify-content: center; - align-items: center; - margin-right: 4px; - border-radius: var(--border-radius-base); - box-sizing: border-box; - color: var(--black); - height: 24px; - min-width: 36px; - border: 0; - padding: 3px 4px; - font-size: 14px; - line-height: 16px; - border: 1px solid var(--grey-background); - font-weight: 500; - cursor: pointer; - - .emoji-container { - margin-right: 4px; - line-height: 0px; - } - - &.is_selected { - border: 1px solid var(--primary); - color: var(--primary); - background: var(--white); - } - - &:hover { - background: var(--primary-background); - } - } - } -} - -body:not(.drag_message) { - .draggable { - .message-options.drag { - display: flex; - } - } -} diff --git a/twake/frontend/src/app/views/applications/messages/message/message.tsx b/twake/frontend/src/app/views/applications/messages/message/message.tsx deleted file mode 100644 index 25895bd0..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/message.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react'; -import MessageContent from './parts/MessageContent'; - -export default () => { - return ; -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.tsx deleted file mode 100644 index e184e373..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import Twacode from 'app/components/twacode/twacode'; -import React, { ReactNode, Suspense } from 'react'; -import Markdown from 'markdown-to-jsx'; -import HighlightedCode from 'app/components/highlighted-code/highlighted-code'; -import { preparse, preunparse } from './Blocks.utils'; -import User from 'components/twacode/blocks/user'; -import Chan from 'components/twacode/blocks/chan'; -import { blocksToTwacode, formatData } from 'app/components/twacode/blocksCompiler'; -import environment from 'app/environment/environment'; -import { Block } from 'app/components/twacode/types'; - -type Props = { - blocks: unknown[]; - fallback: string | ReactNode; - onAction: (type: string, id: string, context: unknown, passives: unknown, evt: unknown) => void; - allowAdvancedBlocks?: boolean; -}; - -const Code = ({ className, children }: { className: string; children: string }) => { - children = preunparse(children); - if (children.split('\n').length === 1) { - return {children}; - } - return ; -}; - -const Link = ({ href, children }: { href: string; children: string }) => { - let target = '_blank'; - if (!href) { - return {children}; - } - //If same domain, stay on the same tab - if ( - href - ?.replace(/https?:\/\//g, '') - ?.split('/')[0] - ?.toLocaleLowerCase() === - environment.front_root_url - .replace(/https?:\/\//g, '') - .split('/')[0] - ?.toLocaleLowerCase() - ) { - target = '_self'; - } - - return ( -
- {children} - - ); -}; - -export default React.memo((props: Props) => { - const flattedBlocks: Block[] = []; - formatData(props.blocks || [], 'content', flattedBlocks); - const blocks = blocksToTwacode(flattedBlocks); - - if (!props.blocks?.length || !props.allowAdvancedBlocks) { - return typeof props.fallback === 'string' ? ( -
- ( - <> - {' '} - - ), - }, - channel: { - component: ({ id }) => ( - <> - {' '} - - ), - }, - h1: ({ children }) => children, - h2: ({ children }) => children, - h3: ({ children }) => children, - h4: ({ children }) => children, - h5: ({ children }) => children, - h6: ({ children }) => children, - }, - }} - > - {preparse(props.fallback || '')} - -
- ) : ( - <>{props.fallback} - ); - } - - return ( - }> - - props.onAction(type, id, context, passives, evt) - } - /> - - ); -}); diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.utils.ts b/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.utils.ts deleted file mode 100644 index 714d019e..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.utils.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const preparse = (str: string) => { - const ret = str - //Fix markdown simple line break - .replace(/\n/g, ' \n') - .replace(/^(([0-9]+\.)|[>`\-*].*\n) *$\n/gm, '$1\n\n') - //Prevent html security issues - .replace(/&/g, '&') - .replace(/') - .replace(/([ \t]|^)#([\w]+)/g, '$1') - //Prepare code - .replace(/[^\n]\r?\n{1}`{3}/, '\n\n```'); - return ret; -}; - -export const preunparse = (str: string) => { - return ( - str - //Prepare mentions - .replace(/([ \t]|^)/g, '$1@$2') - .replace(/([ \t]|^)/g, '$1#$2') - //Prevent html security issues - .replace(/&/g, '&') - .replace(/</g, '<') - .replace(/>/g, '>') - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/ChannelActivity/ActivityMessage.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/ChannelActivity/ActivityMessage.tsx deleted file mode 100644 index 857ad575..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/ChannelActivity/ActivityMessage.tsx +++ /dev/null @@ -1,275 +0,0 @@ -import React from 'react'; -import { Row, Typography } from 'antd'; -import Languages from 'app/features/global/services/languages-service'; -import Emojione from 'app/components/emojione/emojione'; -import User from 'app/components/twacode/blocks/user'; -import { ChannelType } from 'app/features/channels/types/channel'; -import { TabType } from 'app/features/tabs/types/tab'; -import { getCompanyApplications } from 'app/features/applications/state/company-applications'; -import Groups from 'app/deprecated/workspaces/groups.js'; -import { ChannelMemberType } from 'app/features/channel-members/types/channel-member-types'; -import { MessageWithReplies } from 'app/features/messages/types/message'; -import { Application } from 'app/features/applications/types/application'; - -enum ChannelActivityEnum { - CHANNEL_MEMBER_CREATED = 'channel:activity:member:created', - CHANNEL_MEMBER_DELETED = 'channel:activity:member:deleted', - CHANNEL_UPDATED = 'channel:activity:updated', - CHANNEL_TAB_CREATED = 'channel:activity:tab:created', - CHANNEL_TAB_DELETED = 'channel:activity:tab:deleted', - CHANNEL_CONNECTOR_CREATED = 'channel:activity:connector:created', - CHANNEL_CONNECTOR_DELETED = 'channel:activity:connector:deleted', -} - -export type ActivityType = { - type: ChannelActivityEnum; - actor: { - type: 'user'; - id: string; - }; - context: { - type: 'add' | 'diff' | 'remove'; - array?: { - type: string; - resource: ChannelMemberType | TabType; - }[]; - previous?: { - type: string; - // should be a real type instead - resource: { id: string; name: string; description: string; icon: string }; - }; - next?: { - type: string; - // should be a real type instead - resource: { id: string; name: string; description: string; icon: string }; - }; - }; -}; - -type PropsType = { - refDom?: React.Ref; - activity: ActivityType; - message: MessageWithReplies; -}; - -// i18n but with react nodes as replacements -// TODO: maybe there is betters ways to do it with lodash -const translateUsingReactNode = (key: string, replacements: JSX.Element[]): JSX.Element[] => { - let temp = - Languages.t( - key, - replacements.map((_, i) => `{${i}}`), - ) || ''; - const list: JSX.Element[] = []; - replacements.forEach((replacement, i) => { - const split = temp.split(`{${i}}`); - list.push( - - {split[0]} - , - ); - list.push(replacement); - temp = split[1]; - }); - list.push( - - {temp} - , - ); - return list; -}; - -export default (props: PropsType): JSX.Element => { - const generateTypographyName = (id: string) => ; - const message = props.message; - - const memberJoinedOrInvited = (activity: ActivityType) => { - if (activity.context.array) { - const resource = activity.context.array[0]?.resource as ChannelMemberType; - - if (activity.actor.id === resource.user_id) { - return [<>]; //Do not show this information to not polute the chat - } - - if (activity.actor.id !== resource.user_id) { - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_added_b_to_the_channel', - [ - - {generateTypographyName(activity.actor.id)} - , - - {generateTypographyName(resource.user_id || '')} - , - ], - ); - } - } - }; - - const memberLeftOrRemoved = (activity: ActivityType) => { - if (activity.context.array) { - const resource = activity.context.array[0]?.resource as ChannelMemberType; - if (activity.actor.id === resource.user_id) { - return []; //Do not show this information to not polute the chat - } - - if (activity.actor.id !== resource.user_id) { - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel', - [ - - {generateTypographyName(activity.actor.id)} - , - - {generateTypographyName(resource.user_id || '')} - , - ], - ); - } - } - }; - - const channelNameOrDescription = (activity: ActivityType) => { - const previous = activity.context.previous; - const next = activity.context.next; - - if ( - previous?.resource?.name !== next?.resource?.name || - previous?.resource?.icon !== next?.resource?.icon - ) { - const icon = ; - - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_updated_channel_name', - [ - - {generateTypographyName(activity.actor.id)} - , - - {icon} {next?.resource?.name} - , - ], - ); - } - - if (previous?.resource.description !== next?.resource.description) { - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_updated_channel_description', - [ - - {generateTypographyName(activity.actor.id)} - , - ], - ); - } - }; - - const channelTabCreatedOrDeleted = (activity: ActivityType) => { - if (activity.context.array) { - const resource = activity.context.array[0].resource as TabType; - const connector = getCompanyApplications(Groups.currentGroupId).filter( - (app: Application) => app.id === resource.application_id, - ); - - if (activity.context.type === 'add') { - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_created_channel_tab', - [ - - {generateTypographyName(activity.actor.id)} - , - - {connector[0]?.identity?.name} - , - - {resource?.name} - , - ], - ); - } - - if (activity.context.type === 'remove') { - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_deleted_channel_tab', - [ - - {generateTypographyName(activity.actor.id)} - , - - {connector[0]?.identity?.name} - , - - {resource?.name} - , - ], - ); - } - } - }; - - const channelConnectorCreatedOrDeleted = (activity: ActivityType) => { - if (activity.context.array) { - const resource = activity.context.array[0].resource as ChannelType; - const connector = getCompanyApplications(Groups.currentGroupId).filter((app: Application) => - resource.connectors?.includes(app.id), - ); - - if (connector.length) { - if (activity.context.type === 'add') { - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_created_channel_connector', - [ - - {generateTypographyName(activity.actor.id)} - , - - {connector[0]?.identity?.name} - , - ], - ); - } - - if (activity.context.type === 'remove') { - return translateUsingReactNode( - 'scenes.apps.messages.message.activity_message.a_deleted_channel_connector', - [ - - {generateTypographyName(activity.actor.id)} - , - - {connector[0]?.identity?.name} - , - ], - ); - } - } - } - }; - - const compute = (): string | JSX.Element[] => { - const process = new Map< - ChannelActivityEnum, - (activity: ActivityType) => JSX.Element[] | undefined - >(); - process - .set(ChannelActivityEnum.CHANNEL_MEMBER_CREATED, memberJoinedOrInvited) - .set(ChannelActivityEnum.CHANNEL_MEMBER_DELETED, memberLeftOrRemoved) - .set(ChannelActivityEnum.CHANNEL_UPDATED, channelNameOrDescription) - .set(ChannelActivityEnum.CHANNEL_TAB_CREATED, channelTabCreatedOrDeleted) - .set(ChannelActivityEnum.CHANNEL_TAB_DELETED, channelTabCreatedOrDeleted) - .set(ChannelActivityEnum.CHANNEL_CONNECTOR_CREATED, channelConnectorCreatedOrDeleted) - .set(ChannelActivityEnum.CHANNEL_CONNECTOR_DELETED, channelConnectorCreatedOrDeleted); - - const method = process.get(props.activity?.type) || (() => undefined); - return method(props.activity) || ''; - }; - - return ( -
- - {compute()} - -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/DeletedContent.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/DeletedContent.tsx deleted file mode 100644 index f49e1c40..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/DeletedContent.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import UsersService from 'app/features/users/services/current-user-service'; -import userAsyncGet from 'app/features/users/utils/async-get'; -import MenuManager from 'app/components/menus/menus-manager'; -import UserCard from 'app/components/user-card/user-card'; -import Languages from 'app/features/global/services/languages-service'; - -import '../message.scss'; -import { Typography } from 'antd'; -import { useDirectChannels } from 'app/features/channels/hooks/use-direct-channels'; -type PropsType = { - userId: string; -}; - -export default ({ userId }: PropsType) => { - const [fullName, setFullName] = useState(''); - const { openDiscussion } = useDirectChannels(); - - const _setFullName = async () => { - const user = await userAsyncGet(userId); - if (user) setFullName(UsersService.getFullName(user)); - else setFullName('not found'); - }; - useEffect(() => { - _setFullName(); - }); - - let user_name_node: HTMLSpanElement | null = null; - const displayUserCard = async () => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const box = (window as any).getBoundingClientRect(user_name_node); - const user = await userAsyncGet(userId); - - MenuManager.openMenu( - [ - user && { - type: 'react-element', - reactElement: () => ( - openDiscussion([user.id || ''])} /> - ), - }, - ], - box, - null, - { margin: 8 }, - ); - }; - - const translateUsingReactNode = (key: string, replacements: JSX.Element[]): JSX.Element[] => { - let temp = Languages.t( - key, - replacements.map((_, i) => `{${i}}`), - ); - const list: JSX.Element[] = []; - replacements.forEach((replacement, i) => { - const split = temp.split(`{${i}}`); - list.push( - - {split[0]} - , - ); - list.push(replacement); - temp = split[1]; - }); - list.push({temp}); - return list; - }; - - const clickableFullName = ( - (user_name_node = node)} - style={{ - fontWeight: 700, - marginRight: 4, - cursor: ' pointer', - }} - onClick={() => displayUserCard()} - > - {fullName} - - ); - - const isCurrentUser = UsersService.getCurrentUserId() === userId; - return isCurrentUser ? ( - <>{Languages.t('scenes.apps.messages.message.parts.deleted_content.text.current_user')} - ) : ( - <> - {translateUsingReactNode('scenes.apps.messages.message.parts.deleted_content.text', [ - clickableFullName, - ])} - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.scss b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.scss deleted file mode 100644 index 4bd5d889..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.scss +++ /dev/null @@ -1,44 +0,0 @@ -.first_message { - width: 100%; - text-align: center; - padding-bottom: 10vh; - padding-top: 10vh; - - .emojione { - width: 88px; - height: 88px; - padding-bottom: 10px; - } - .icon { - display: inline-block; - font-size: 88px; - } - - .channel_first_message_icon { - .ant-avatar-group .ant-avatar:not(:first-child) { - margin-left: -32px !important; - } - - .user_image { - width: 78px; - height: 78px; - background-size: cover; - background-position: center; - background-color: var(--white); - border-radius: 50%; - display: inline-block; - padding-bottom: 20px; - border: 2px solid #fff; - margin-left: -40px; - - &:first-child { - margin-left: 0px; - } - } - } - - .text { - padding-top: 10px; - opacity: 0.5; - } -} diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.tsx deleted file mode 100755 index 847c59f6..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import Languages from 'app/features/global/services/languages-service'; - -import Emojione from 'components/emojione/emojione'; -import './FirstMessage.scss'; - -export default React.memo(() => { - return ( -
-
-
- -
-
- {Languages.t('scenes.apps.messages.message.types.first_channel_message_text')} -
-
-
- ); -}); diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstThreadMessage.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstThreadMessage.tsx deleted file mode 100755 index 89621750..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstThreadMessage.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import './FirstMessage.scss'; - -export default ({ noReplies }: { noReplies?: boolean }) => { - return ( -
-
-
- {noReplies - ? Languages.t('scenes.apps.messages.message.types.no_message_in_thread') - : Languages.t('scenes.apps.messages.message.types.first_message_text')} -
-
-
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.scss b/twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.scss deleted file mode 100644 index 14bf3ab4..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.scss +++ /dev/null @@ -1,70 +0,0 @@ -.link-preview { - border-radius: 0px !important; - border: 4px solid var(--primary) !important; - border-width: 0 0 0 4px !important; - margin-top: 15px !important; - padding-left: 15px !important; - - .delete-link-preview { - display: none; - position: absolute; - left: -32px; - top: -8px; - color: var(--grey) !important; - opacity: 0.5; - cursor: pointer; - padding: 8px; - - &:hover { - opacity: 1; - } - } - &:hover .delete-link-preview { - display: block; - } - - &.ant-card .ant-card-body { - padding: 0; - } - - &.ant-card .ant-card-meta-avatar { - padding-right: 0px; - width: 100%; - margin-bottom: 0px; - - span > img { - width: 16px; - height: 16px; - display: inline-block; - vertical-align: text-top; - } - - .ant-avatar { - text-align: start; - width: 24px; - } - } - - .link-preview-domain { - font-weight: bold; - } - - .preview-title > a { - font-size: 14px; - font-weight: bold; - float: left; - } - - .ant-card-meta-description { - margin-bottom: 10px; - color: var(--grey); - } - - .ant-card-cover { - cursor: pointer; - - img { - border-radius: 8px 8px 8px 8px; - } - } -} diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.tsx deleted file mode 100644 index 96041d95..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/LinkPreview.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { useContext } from 'react'; -import { MessageLinkType } from 'app/features/messages/types/message'; -import './LinkPreview.scss'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import User from 'app/features/users/services/current-user-service'; -import { MessageContext } from '../message-with-replies'; -import { X } from 'react-feather'; - -type PropsType = { - preview: MessageLinkType; -}; - -export default ({ preview }: PropsType): React.ReactElement => { - const context = useContext(MessageContext); - const { deleteLinkPreview, message } = useMessage(context); - - return ( -
- {message.user_id === User.getCurrentUserId() ? ( -
- deleteLinkPreview(preview.url)} /> -
- ) : null} -
-
-
-
- {preview.favicon && ( - - {preview.domain} - - )} - {preview.domain} -
- -
{preview.description}
-
-
- {preview.img && ( -
- {preview.title} window.open(preview.url, '_blank')} - style={{ - maxWidth: preview.img_width ?? '100%', - maxHeight: preview.img_height ?? '100%', - }} - /> -
- )} -
-
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/LoadMoreReplies.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/LoadMoreReplies.tsx deleted file mode 100644 index b362781c..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/LoadMoreReplies.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { useThreadMessages } from 'app/features/messages/hooks/use-thread-messages'; -import React, { useContext } from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import ThreadSection from '../../parts/thread-section'; -import { MessageContext } from '../message-with-replies'; -import { NodeMessage } from 'app/features/messages/types/message'; - -export default (props: { firstMessageId: string; onFirstMessageChanged: (item: NodeMessage) => void }) => { - const context = useContext(MessageContext); - const { message } = useMessage(context); - const { messages, window, loadMore } = useThreadMessages({ - companyId: context.companyId, - threadId: message.thread_id, - }); - - const loadMoreMessages = async (direction: 'history' | 'future') => { - const messages = await loadMore(direction, 10, props.firstMessageId); - props.onFirstMessageChanged && props.onFirstMessageChanged(messages[0]); - }; - - return ( - <> - {!(window.reachedStart && window.start === props.firstMessageId) && - window.end && - messages.length < message.stats.replies && ( - -
- loadMoreMessages('history')} className="link"> - {Languages.t('scenes.apps.messages.message.show_responses_button')} ( - {Math.max(message.stats.replies, messages.length)}) - -
-
- )} - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/MessageAttachments.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageAttachments.tsx deleted file mode 100644 index 85aff423..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/MessageAttachments.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { Row } from 'antd'; -import { useUploadZones } from 'app/features/files/hooks/use-upload-zones'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import 'moment-timezone'; -import { useContext, useEffect } from 'react'; -import { MessageContext } from '../message-with-replies'; -import PossiblyPendingAttachment from './PossiblyPendingAttachment'; - -export default () => { - const context = useContext(MessageContext); - const { message, save } = useMessage(context); - - const { files, setFiles } = useUploadZones(`message-${message.id}`); - - useEffect(() => { - setFiles(message.files || []); - }, [message.files]); - - useEffect(() => { - const uploaded = files.filter(f => f.metadata?.source !== 'pending'); - const inMessage = (message.files || []).filter(f => f.metadata?.source !== 'pending'); - if (uploaded.length > inMessage.length) { - save({ ...message, files: uploaded }); - } - }, [files]); - - if (files.length === 0) { - return <>; - } - - return ( - - {files - .filter(f => f.metadata) - .map(file => ( - 0} - large={ - //If all the documents are images - files.length <= 6 && - files.filter( - file => - file.metadata?.source === 'internal' && - (file.metadata?.thumbnails?.length || 0) > 0, - ).length === files.length - } - onRemove={() => setFiles(files.filter(f => f.id !== file.id))} - /> - ))} - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/MessageContent.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageContent.tsx deleted file mode 100644 index 372911a3..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/MessageContent.tsx +++ /dev/null @@ -1,250 +0,0 @@ -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import { useIsChannelMember } from 'app/features/channels/hooks/use-channel'; -import PseudoMarkdownCompiler from 'app/features/global/services/pseudo-markdown-compiler-service'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; -import { MessageWithReplies } from 'app/features/messages/types/message'; -import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; -import { useUser } from 'app/features/users/hooks/use-user'; -import User from 'app/features/users/services/current-user-service'; -import MessageQuote from 'app/molecules/message-quote'; -import MessageStatus from 'app/molecules/message-status'; -import QuotedContent, { useQuotedMessage } from 'app/molecules/quoted-content'; -import { ViewContext } from 'app/views/client/main-view/MainContent'; -import classNames from 'classnames'; -import 'moment-timezone'; -import { ReactNode, useContext, useEffect, useState } from 'react'; -import { gotoMessage } from 'src/utils/messages'; -import { MessageContext } from '../message-with-replies'; -import Blocks from './Blocks'; -import DeletedContent from './DeletedContent'; -import LinkPreview from './LinkPreview'; -import MessageForward from './message-forward'; -import MessageAttachments from './MessageAttachments'; -import MessageEdition from './MessageEdition'; -import MessageHeader from './MessageHeader'; -import Options from './Options'; -import Reactions from './Reactions'; -import RetryButtons from './RetryButtons'; - -type Props = { - linkToThread?: boolean; - threadHeader?: string; -}; - -let loadingInteractionTimeout = 0; - -export default (props: Props) => { - const [active, setActive] = useState(false); - const [loadingAction, setLoadingAction] = useState(false); - const [didMouseOver, setDidMouseOver] = useState(false); - - const context = useContext(MessageContext); - const channelId = context.channelId; - const { message } = useMessage(context); - - // Quoted message logic - const quotedMessage = useQuotedMessage(message, context); - const showQuotedMessage = quotedMessage && quotedMessage.thread_id; - let authorName = ''; - const currentRouterWorkspace = useRouterWorkspace(); - const workspaceId = - context.workspaceId === 'direct' ? currentRouterWorkspace : context.workspaceId; - const deletedQuotedMessage = quotedMessage && quotedMessage.subtype === 'deleted'; - - if (showQuotedMessage) { - const author = useUser(quotedMessage.user_id || ''); - authorName = author ? User.getFullName(author) : 'Anonymous'; - } - - const onInteractiveMessageAction = (action_id: string, context: unknown, passives: unknown) => { - const app_id = message.application_id; - const type = 'interactive_message_action'; - const event = action_id; - const data = { - interactive_context: context, - form: passives, - message: message, - }; - WorkspacesApps.notifyApp(app_id, type, event, data); - }; - - const onAction = (type: string, id: string, context: unknown, passives: unknown) => { - if (type === 'interactive_action') { - setLoadingAction(true); - clearTimeout(loadingInteractionTimeout); - loadingInteractionTimeout = window.setTimeout(() => { - setLoadingAction(false); - }, 5000); - onInteractiveMessageAction(id, context, passives); - } - }; - - useEffect(() => { - setLoadingAction(false); - }, [JSON.stringify(message.blocks)]); - - const deleted = message.subtype === 'deleted'; - - const location = `message-${message.id}`; - const { active: editorIsActive } = useVisibleMessagesEditorLocation( - location, - useContext(ViewContext).type, - ); - - const showEdition = !props.linkToThread && editorIsActive; - const messageIsLoading = message._status === 'sending'; - const messageSaveFailed = message._status === 'failed'; - - const isChannelMember = useIsChannelMember(channelId); - const quotedContent = ; - const showMessageStatus = message.user_id === User.getCurrentUserId(); - - return ( -
{ - setDidMouseOver(true); - }} - onClick={() => setActive(false)} - key={`message_container_${message.id}`} - > - - {showQuotedMessage && !showEdition && quotedMessage.channel_id === context.channelId && ( - - gotoMessage( - quotedMessage, - quotedMessage.company_id || context.companyId, - quotedMessage.channel_id || context.channelId, - quotedMessage.workspace_id || workspaceId, - ) - } - /> - )} - {showQuotedMessage && !showEdition && quotedMessage.channel_id !== context.channelId && ( - { - if (isChannelMember) onAction(type, id, context, passives); - }} - className="mb-1" - author={authorName} - message={quotedMessage} - closable={false} - deleted={deletedQuotedMessage} - goToMessage={() => - gotoMessage( - quotedMessage, - quotedMessage.company_id || context.companyId, - quotedMessage.channel_id || context.channelId, - quotedMessage.workspace_id || workspaceId, - ) - } - /> - )} - {!!showEdition && !deleted && ( -
- -
- )} - {!showEdition && ( - { - if (isChannelMember) onAction(type, id, context, passives); - }} - deleted={deleted} - linkToThread={props.linkToThread} - message={message} - className={classNames({ - message_is_loading: messageIsLoading, - 'message-not-sent': messageSaveFailed, - })} - suffix={ - <> - {message?.files && (message?.files?.length || 0) > 0 && } - {!messageSaveFailed && } - {messageSaveFailed && !messageIsLoading && } - - } - /> - )} - {isChannelMember && - !showEdition && - !deleted && - !messageSaveFailed && - didMouseOver && - !messageIsLoading && ( - setActive(true)} - onClose={() => setActive(false)} - threadHeader={props.threadHeader} - key={`options_${message.id}`} - /> - )} - {showMessageStatus && !showEdition && ( - - )} -
- ); -}; - -export const MessageBlockContent = ({ - deleted, - message, - linkToThread, - suffix, - className, - onAction, -}: { - deleted: boolean; - linkToThread?: boolean; - message: MessageWithReplies; - suffix?: ReactNode; - className?: string; - onAction: (type: string, id: string, context: unknown, passives: unknown) => void; -}) => { - return ( -
- {deleted === true ? ( -
- -
- ) : ( - <> -
- {!!linkToThread && message.text} - {!linkToThread && ( - <> - - - )} -
- - {message?.links && - (message?.links?.length || 0) > 0 && - message.links - .filter(link => link && (link.title || link.description || link.img)) - .map((preview, i) => ( - - ))} - - {suffix} - - )} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.scss b/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.scss deleted file mode 100644 index 96cb8d5f..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.scss +++ /dev/null @@ -1,18 +0,0 @@ -.message-edition { - padding-top: 4px; - - .message-edition-toolbar { - display: flex; - flex-wrap: wrap; - justify-content: space-between; - align-items: center; - - .editor-toolbar { - padding-left: 0; - - .button-group:first-child { - margin-left: -8px; - } - } - } -} diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.tsx deleted file mode 100644 index 6fd5682a..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import React, { useContext, useEffect, useState } from 'react'; -import 'moment-timezone'; -import MessageInput from '../../input/input'; -import Button from 'components/buttons/button.jsx'; -import AlertManager from 'app/features/global/services/alert-manager-service'; -import Languages from 'app/features/global/services/languages-service'; -import EditorToolbar from 'app/components/rich-text-editor/editor-toolbar'; -import RichTextEditorStateService from 'app/components/rich-text-editor/editor-state-service'; -import './MessageEdition.scss'; -import { EditorState } from 'draft-js'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { MessageContext } from '../message-with-replies'; -import { ViewContext } from 'app/views/client/main-view/MainContent'; -import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; - -type Props = { - /** - * The editor plugins to enable during edition - */ - editorPlugins?: string[]; -}; - -export default (props: Props) => { - const context = useContext(MessageContext); - const { message, remove, save: updateMessage } = useMessage(context); - - const location = `message-${context.id}`; - const subLocation = useContext(ViewContext).type; - const editorId = `thread:${context.threadId}/message:${context.id}`; - const { close } = useVisibleMessagesEditorLocation(location, subLocation); - - const editorPlugins = props.editorPlugins || ['emoji', 'mention', 'channel']; - const format = 'markdown'; - - const [editorState, setEditorState] = useState(); - const [isReady, setReady] = useState(false); - - useEffect(() => { - (async () => { - const dataParser = RichTextEditorStateService.getDataParser(editorPlugins); - const initialContent = message?.text || ''; - - setEditorState(() => - RichTextEditorStateService.get(editorId, { - plugins: editorPlugins, - clearIfExists: true, - initialContent: dataParser.fromString(initialContent, format), - }), - ); - - setReady(true); - })(); - }, []); - - const getContentOutput = (editorState: EditorState) => { - return RichTextEditorStateService.getDataParser(editorPlugins).toString(editorState, format); - }; - - const save = () => { - let content = null; - if (editorState) content = getContentOutput(editorState); - if (!content) { - AlertManager.confirm( - () => { - remove(); - }, - () => undefined, - { - title: Languages.t('scenes.apps.messages.chatbox.chat.delete_message_btn', [], 'Delete'), - }, - ); - } else { - updateMessage({ ...message, text: content }); - } - close(); - }; - - const setRichTextEditorState = (editorState: EditorState): void => { - setEditorState(editorState); - RichTextEditorStateService.set(editorId, editorState); - }; - - return !isReady || !editorState ? ( - <> - ) : ( -
- save()} - editorState={editorState} - onChange={editorState => { - setRichTextEditorState(editorState); - }} - /> - -
-
-
- { - setRichTextEditorState(editorState); - }} - /> -
-
-
- - - -
-
-
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/MessageHeader.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageHeader.tsx deleted file mode 100644 index fe5436eb..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/MessageHeader.tsx +++ /dev/null @@ -1,159 +0,0 @@ -import React, { ReactNode, useContext, useState } from 'react'; - -import 'moment-timezone'; -import Moment from 'react-moment'; -import { Typography } from 'antd'; -import classNames from 'classnames'; -import { AlertTriangle } from 'react-feather'; -import { useRecoilState } from 'recoil'; - -import User from 'app/features/users/services/current-user-service'; -import MenusManager from 'app/components/menus/menus-manager.jsx'; -import UserCard from 'app/components/user-card/user-card'; -import Emojione from 'components/emojione/emojione'; -import RouterServices from 'app/features/router/services/router-service'; -import { NodeMessage } from 'app/features/messages/types/message'; -import Languages from 'app/features/global/services/languages-service'; -import Loader from 'components/loader/loader.jsx'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { MessageContext } from '../message-with-replies'; -import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; -import useRouterChannel from 'app/features/router/hooks/use-router-channel'; -import { useUser } from 'app/features/users/hooks/use-user'; -import { UserType } from 'app/features/users/types/user'; -import { CompanyApplicationsStateFamily } from 'app/features/applications/state/company-applications'; -import { useDirectChannels } from 'app/features/channels/hooks/use-direct-channels'; -import { addUrlTryDesktop } from 'app/views/desktop-redirect'; - -type Props = { - linkToThread?: boolean; -}; - -const { Link } = Typography; - -export default (props: Props) => { - const channelId = useRouterChannel(); - const workspaceId = useRouterWorkspace(); - const [messageLink, setMessageLink] = useState(''); - const { openDiscussion } = useDirectChannels(); - - const context = useContext(MessageContext); - const { message } = useMessage(context); - const parentMessage: NodeMessage | null = useMessage({ - ...context, - id: message.thread_id, - }).message; - - const user = useUser(message.user_id); - - const companyApplications = - useRecoilState(CompanyApplicationsStateFamily(context.companyId))[0] || []; - const application = companyApplications.find(a => a.id === message.application_id); - - const scrollToMessage = () => { - if (message.thread_id !== message.id) { - //TODO messageService.scrollTo({ id: message.thread_id }); - } - }; - - const updateMessageLink = () => { - const url = RouterServices.generateRouteFromState({ - workspaceId: workspaceId, - channelId: channelId, - messageId: message.thread_id || message.id, - }); - setMessageLink(url); - }; - - let userNameRef: ReactNode = null; - const displayUserCard = () => { - if (user) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const box = (window as any).getBoundingClientRect(userNameRef); - MenusManager.openMenu( - [ - { - type: 'react-element', - reactElement: () => ( - openDiscussion([(user as UserType).id || ''])} - /> - ), - }, - ], - box, - null, - { margin: 8 }, - ); - } - }; - - const icon = user?.status ? user.status.split(' ')[0] : undefined; - const status = user?.status ? user.status.split(' ').splice(1).join(' ') : undefined; - return ( -
-
- (userNameRef = node as ReactNode)} - onClick={() => displayUserCard()} - > - {message.override?.title || - (!!user && User.getFullName(user)) || - (message.application_id && application?.identity?.name)} - - {!!user && ( -
- {!!icon && } {!!status && status} -
- )} - {props.linkToThread && ( - - {Languages.t('scenes.apps.messages.input.replied_to')} - scrollToMessage()}>{parentMessage?.text} - - )} - {message.created_at && ( - updateMessageLink()} - rel="noreferrer" - > - 12 * 60 * 60 * 1000 ? 'lll' : 'LT' - } - > - {message.created_at} - - - {message.edited?.edited_at && ( - - {' '} - - {Languages.t('scenes.apps.messages.input.edited', [], 'Edited')} - - )} - - )} -
- {message._status === 'sending' && ( -
- -
- )} - {message._status === 'failed' && ( -
- -
- )} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/Options.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/Options.tsx deleted file mode 100644 index 76e0f97b..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/Options.tsx +++ /dev/null @@ -1,379 +0,0 @@ -import React, { useContext } from 'react'; -import 'moment-timezone'; -import { MoreHorizontal, Smile, ArrowUpRight, Trash2, CornerDownLeft } from 'react-feather'; - -import EmojiPicker from 'components/emoji-picker/emoji-picker.jsx'; -import Menu from 'components/menus/menu.jsx'; -import MenusManager from 'app/components/menus/menus-manager.jsx'; -import Languages from 'app/features/global/services/languages-service'; -import AlertManager from 'app/features/global/services/alert-manager-service'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; -import User from 'app/features/users/services/current-user-service'; -import RouterServices from 'app/features/router/services/router-service'; -import { Application } from 'app/features/applications/types/application'; -import { getCompanyApplications } from 'app/features/applications/state/company-applications'; -import Groups from 'app/deprecated/workspaces/groups.js'; -import { MessageContext } from '../message-with-replies'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; -import useRouterChannel from 'app/features/router/hooks/use-router-channel'; -import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; -import { ViewContext } from 'app/views/client/main-view/MainContent'; -import SideViewService from 'app/features/router/services/side-view-service'; -import Emojione from 'app/components/emojione/emojione'; -import { useChannel } from 'app/features/channels/hooks/use-channel'; -import { useEphemeralMessages } from 'app/features/messages/hooks/use-ephemeral-messages'; -import { copyToClipboard } from 'app/features/global/utils/CopyClipboard'; -import { addUrlTryDesktop } from 'app/views/desktop-redirect'; -import { useMessageQuoteReply } from 'app/features/messages/hooks/use-message-quote-reply'; -import { useMessageSeenBy } from 'app/features/messages/hooks/use-message-seen-by'; -import { EmojiSuggestionType } from 'app/components/rich-text-editor/plugins/emoji'; -import { MessagesListContext } from '../../messages-list'; -import { useSetRecoilState } from 'recoil'; -import { ForwardMessageAtom } from 'app/components/forward-message'; - -type Props = { - onOpen?: () => void; - onClose?: () => void; - threadHeader?: string; -}; - -export default (props: Props) => { - const channelId = useRouterChannel(); - const workspaceId = useRouterWorkspace(); - const context = useContext(MessageContext); - const listContext = useContext(MessagesListContext); - const { message, react, remove, pin } = useMessage(context); - const { channel } = useChannel(channelId); - const { message: thread } = useMessage({ - companyId: channel.company_id || '', - threadId: message.thread_id, - id: message.thread_id, - }); - const { remove: removeLastEphemeral } = useEphemeralMessages({ - companyId: context.companyId, - channelId: channelId, - }); - const location = `message-${message.id}`; - const subLocation = useContext(ViewContext).type; - const { set: setVisibleEditor } = useVisibleMessagesEditorLocation(location, subLocation); - - const { set: setQuoteReply } = useMessageQuoteReply(channelId); - const setForwardMessage = useSetRecoilState(ForwardMessageAtom); - - const { openSeenBy } = useMessageSeenBy(); - - const menu: Record void)>[] = []; - - const triggerApp = (app: Application) => { - const data = { - channel: channel, - thread: thread.id && thread.id !== message.id ? thread : null, - message: message, - }; - WorkspacesApps.notifyApp(app.id, 'action', 'action', data); - }; - - const onOpen = (evt: Event) => { - props.onOpen && props.onOpen(); - if (evt) { - evt.preventDefault(); - evt.stopPropagation(); - } - }; - - if (message.ephemeral) { - menu.push({ - type: 'menu', - icon: 'trash', - text: Languages.t('scenes.apps.messages.message.remove_button', [], 'Delete'), - className: 'error', - onClick: () => { - removeLastEphemeral(); - }, - }); - } else { - if (channel && channel.visibility !== 'direct') { - menu.push({ - type: 'menu', - icon: 'arrow-up-right', - text: Languages.t('scenes.apps.messages.message.show_button', [], 'Display'), - onClick: () => { - SideViewService.select(channel?.id || '', { - app: { identity: { code: 'messages' } } as Application, - context: { - viewType: 'channel_thread', - threadId: message.thread_id, - }, - }); - }, - }); - } - - menu.push({ - type: 'menu', - icon: 'link', - text: Languages.t('scenes.apps.messages.message.copy_link', [], 'Copy link to message'), - onClick: () => { - const url = addUrlTryDesktop( - `${document.location.origin}${RouterServices.generateRouteFromState({ - workspaceId: workspaceId, - channelId: channelId, - threadId: message.thread_id, - messageId: message.id, - })}`, - ); - - copyToClipboard(url); - }, - }); - - if (channel && channel.visibility === 'direct' && !listContext.readonly) { - menu.push({ - type: 'menu', - icon: 'corner-down-left', - text: Languages.t('scenes.apps.messages.message.reply_button', [], 'Reply'), - onClick: () => { - setQuoteReply({ message: message.thread_id, channel: channelId }); - }, - }); - } - - menu.push({ - type: 'menu', - icon: 'comment-info', - text: Languages.t('components.message_seen_by.btn', [], 'Information'), - onClick: () => { - openSeenBy({ - message_id: message.id, - company_id: context.companyId, - thread_id: message.thread_id, - workspace_id: context.workspaceId, - }); - }, - }); - - if (!message.context?.disable_pin && !listContext.readonly) - menu.push({ - type: 'menu', - icon: 'map-pin', - text: Languages.t( - !message.pinned_info?.pinned_at - ? 'scenes.apps.messages.message.pin_button' - : 'scenes.apps.messages.message.unpin_button', - [], - 'Pin message', - ), - className: 'option_button', - onClick: () => { - pin(!message.pinned_info?.pinned_at); - }, - }); - - menu.push({ - type: 'menu', - icon: 'envelope-send', - text: Languages.t('scenes.apps.messages.message.forward'), - className: 'option_button', - onClick: () => { - setForwardMessage({ - id: message.id, - thread_id: message.thread_id, - channel_id: channelId, - workspace_id: context.workspaceId, - company_id: context.companyId, - }); - }, - }); - - const apps = - getCompanyApplications(Groups.currentGroupId).filter( - (app: Application) => app.display?.twake?.chat?.actions?.length, - ) || []; - - if (apps.length > 0 && !listContext.readonly) { - menu.push({ type: 'separator' }); - menu.push({ - type: 'react-element', - reactElement: () => { - return apps.map((app: Application) => { - return ( -
{ - triggerApp(app); - }} - > -
-
- {app?.display?.twake?.chat?.actions?.[0].description || app.identity?.name} -
-
- ); - }); - }, - }); - } - - if ( - (message.user_id === User.getCurrentUserId() || - (message.application_id && message.context?.allow_delete === 'everyone') || - (message.application_id && - WorkspaceUserRights.hasWorkspacePrivilege() && - message.context?.allow_delete === 'administrators')) && - !listContext.readonly - ) { - if (menu.length > 0 && (!message.application_id || !message?.stats?.replies)) { - menu.push({ type: 'separator' }); - } - if (!message.application_id) { - menu.push({ - type: 'menu', - icon: 'edit-alt', - text: Languages.t('scenes.apps.messages.message.modify_button', [], 'Edit'), - onClick: () => { - setVisibleEditor({ location, subLocation }); - }, - }); - } - if (message?.stats?.replies <= 1) { - menu.push({ - type: 'menu', - icon: 'trash-alt', - text: Languages.t('scenes.apps.messages.message.remove_button', [], 'Delete'), - className: 'error', - onClick: () => { - AlertManager.confirm(() => remove()); - }, - }); - } - } - } - - if (message.ephemeral) { - return ( -
-
{ - removeLastEphemeral(); - }} - > - -
-
- ); - } - - const userReactions = (message.reactions || [])?.filter(r => - r.users.includes(User.getCurrentUserId()), - ); - - return ( -
- {/*!props.threadHeader && ( -
-
- -
-
- )*/} -
- {!listContext.readonly && ( - <> - {[':heart:', ':+1:', ':eyes:', ':tada:'].map(emoji => ( - <> -
m.name).includes(emoji) ? 'active' : '') - } - onClick={() => react([emoji], 'toggle')} - > - -
-
- - ))} - - onOpen(evt)} - menu={[ - { - type: 'react-element', - className: 'menu-cancel-margin', - reactElement: () => { - return ( - e.name) || []} - onChange={(emoji: EmojiSuggestionType) => { - MenusManager.closeMenu(); - props.onClose && props.onClose(); - react([emoji.colons], 'toggle'); - }} - /> - ); - }, - }, - ]} - position="top" - > - - -
- - )} - - {!props.threadHeader && channel && channel.visibility !== 'direct' && ( - <> -
{ - SideViewService.select(channelId, { - app: { identity: { code: 'messages' } } as Application, - context: { - viewType: 'channel_thread', - threadId: message.thread_id || message.id, - }, - }); - }} - > - -
-
- - )} - - {channel && channel.visibility === 'direct' && !listContext.readonly && ( - <> -
{ - setQuoteReply({ message: message.thread_id, channel: channelId }); - }} - > - -
-
- - )} - - onOpen(evt)} - onClose={() => props.onClose && props.onClose()} - menu={menu} - position={'left'} - > - - -
-
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/PossiblyPendingAttachment.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/PossiblyPendingAttachment.tsx deleted file mode 100644 index 066afb5a..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/PossiblyPendingAttachment.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import React from 'react'; -import { useUpload } from 'app/features/files/hooks/use-upload'; -import FileComponent from 'app/components/file/file-component'; -import { DataFileType } from 'app/components/file/types'; -import { PendingFileRecoilType } from 'app/features/files/types/file'; -import FileUploadAPIClient from 'app/features/files/api/file-upload-api-client'; -import { MessageFileType } from 'app/features/messages/types/message'; - -type PropsType = { - file: MessageFileType; - onRemove?: () => void; - type: 'input' | 'message'; - large?: boolean; - xlarge?: boolean; -}; - -export default ({ file, onRemove, type, large, xlarge }: PropsType) => { - const { getOnePendingFile } = useUpload(); - - const id = - (typeof file.metadata?.external_id === 'string' - ? file.metadata?.external_id - : file.metadata?.external_id?.id) || ''; - const companyId = - (typeof file.metadata?.external_id === 'string' - ? file.company_id - : file.metadata?.external_id?.company_id) || ''; - - let status: PendingFileRecoilType['status'] | undefined = 'success'; - let progress = 1; - - let formatedFile: DataFileType = { - id: id, - company_id: companyId, - name: file.metadata?.name || '', - size: file.metadata?.size || 0, - thumbnail: FileUploadAPIClient.getFileThumbnailUrlFromMessageFile(file) || '', - thumbnail_ratio: - (file.metadata?.thumbnails?.[0]?.width || 1) / (file.metadata?.thumbnails?.[0]?.height || 1), - type: FileUploadAPIClient.mimeToType(file.metadata?.mime || ''), - }; - - if (file?.metadata?.source === 'pending') { - const pendingFile = getOnePendingFile(id); - if (!pendingFile) { - if (onRemove) onRemove(); - return <>; - } - - formatedFile = { - id: pendingFile?.backendFile?.id || '', - company_id: pendingFile?.backendFile?.company_id || '', - name: pendingFile?.originalFile.name || '', - size: pendingFile?.originalFile.size || 0, - thumbnail: URL.createObjectURL(pendingFile.originalFile), - thumbnail_ratio: 1, - type: FileUploadAPIClient.mimeToType(pendingFile?.originalFile.type || ''), - }; - status = pendingFile.status || undefined; - progress = pendingFile.progress; - } - - return formatedFile ? ( - - ) : ( - <> - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/Reactions.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/Reactions.tsx deleted file mode 100644 index 8a88874d..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/Reactions.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React, { useContext } from 'react'; -import User from 'app/features/users/services/current-user-service'; -import 'moment-timezone'; -import Emojione from 'components/emojione/emojione'; -import { ReactionType } from 'app/features/messages/types/message'; -import { Tooltip } from 'antd'; -import classNames from 'classnames'; -import { MessageContext } from '../message-with-replies'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { getUser } from 'app/features/users/hooks/use-user-list'; -import { MessagesListContext } from '../../messages-list'; - -export default () => { - const context = useContext(MessageContext); - const { message, react } = useMessage(context); - - if ( - !(!message?.context?.disable_reactions && message?.reactions && message?.reactions.length > 0) - ) - return <>; - - return ( -
- {(message?.reactions || []) - .map(r => r) //To avoid modifing the original one with sort - .sort((a, b) => b.count || 0 - a.count) - .map((reaction, index) => ( - - ))} -
- ); -}; - -const Reaction = ({ - reaction, - react, -}: { - reaction: ReactionType; - react: (emojis: string[], mode?: 'add' | 'toggle' | 'remove' | 'replace') => Promise; -}): JSX.Element => { - const listContext = useContext(MessagesListContext); - const noReactions: boolean = (reaction.count || 0) <= 0; - const users: ReactionType['users'] = reaction.users || []; - - if (noReactions) return <>; - - const reactionClassName = classNames('reaction', { - is_selected: reaction.users.includes(User.getCurrentUserId()), - }); - - return ( - } - > -
{ - if (!listContext.readonly) react([reaction.name], 'toggle'); - }} - > - - {reaction.count} -
-
- ); -}; - -const ReactionTooltip = ({ users }: { users: ReactionType['users'] }): JSX.Element => ( - <> - {users.map(id => { - const user = getUser(id); - - if (!user) return <>; - - const name = User.getFullName(user); - - return ( -
- {name} -
- ); - })} - -); diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/ReplyBlock.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/ReplyBlock.tsx deleted file mode 100644 index b292cc52..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/ReplyBlock.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import React, { useContext } from 'react'; -import { CornerDownRight } from 'react-feather'; -import ThreadSection from '../../parts/thread-section'; -import Languages from 'app/features/global/services/languages-service'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { MessageContext } from '../message-with-replies'; -import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; -import { ViewContext } from 'app/views/client/main-view/MainContent'; -import Input from '../../input/input'; -import useRouterChannel from 'app/features/router/hooks/use-router-channel'; -import { getChannel, useIsChannelMember } from 'app/features/channels/hooks/use-channel'; - - -export default () => { - const context = useContext(MessageContext); - const channelId = useRouterChannel(); - const { message } = useMessage(context); - const channel = getChannel(channelId); - - const location = `thread-${message.thread_id}`; - const subLocation = useContext(ViewContext).type; - const { active: editorIsActive, set: setVisibleEditor } = useVisibleMessagesEditorLocation( - location, - subLocation, - ); - - const isChannelMember = useIsChannelMember(channelId); - - if (!isChannelMember) { - return <>; - } - - if (message.subtype === 'deleted' || message.thread_id != message.id) { - return <>; - } - - if (channel?.visibility === 'direct') { - return <>; - } - - if (editorIsActive) { - return ( - -
- -
-
- ); - } - - return ( - -
- - setVisibleEditor({ - location, - subLocation, - }) - } - > - {' '} - {Languages.t('scenes.apps.messages.message.reply_button')} - -
-
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/RetryButtons.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/RetryButtons.tsx deleted file mode 100644 index f0af9fe0..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/RetryButtons.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { useMessageEditor } from 'app/features/messages/hooks/use-message-editor'; -import React, { useContext } from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import { MessageContext } from '../message-with-replies'; - -export default () => { - const context = useContext(MessageContext); - const { message } = useMessage(context); - const { retry, cancel } = useMessageEditor(context); - - return ( -
- retry(message)} - > - {Languages.t('general.retry')} - - cancel(message)}> - {Languages.t('general.remove')} - -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/message-forward/files.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/message-forward/files.tsx deleted file mode 100644 index 2027996a..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/message-forward/files.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Row } from 'antd'; -import { MessageFileType } from 'app/features/messages/types/message'; -import PossiblyPendingAttachment from '../PossiblyPendingAttachment'; - -export const ForwardedFiles = (props: { files: MessageFileType[] }) => { - return ( - - {props.files - .filter(f => f.metadata) - .map(file => ( - - ))} - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/parts/message-forward/index.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/message-forward/index.tsx deleted file mode 100644 index 53588dee..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/parts/message-forward/index.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import { Info } from 'app/atoms/text'; -import Languages from 'app/features/global/services/languages-service'; -import { XIcon } from '@atoms/icons-agnostic'; -import { MessageWithReplies, NodeMessage } from 'app/features/messages/types/message'; -import { UserType } from 'app/features/users/types/user'; -import { MessageBlockContent } from '../MessageContent'; -import { ForwardedFiles } from './files'; - -type PropsType = { - message: NodeMessage & { - users?: UserType[] | undefined; - company_id: string; - workspace_id: string; - channel_id: string; - thread_id: string; - id: string; - }; - author: string; - closable?: boolean; - deleted?: boolean; - goToMessage?: () => void; - onClose?: () => void; - className?: string; - onAction: (type: string, id: string, context: unknown, passives: unknown) => void; -}; - -export default ({ - author, - message, - closable = true, - onClose, - deleted = false, - goToMessage, - className = '', - onAction, -}: PropsType) => { - const clickable = !closable; - - return ( -
{}} - > -
-
-

{author}

-
- {deleted ? ( - {Languages.t('molecules.message_quote.deleted')} - ) : ( - {message.files && }} - /> - )} -
-
- {closable && onClose && ( -
- { - e.stopPropagation(); - onClose(); - }} - /> -
- )} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/responses.tsx b/twake/frontend/src/app/views/applications/messages/message/responses.tsx deleted file mode 100644 index fd5ba94c..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/responses.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react'; -import { useThreadMessages } from 'app/features/messages/hooks/use-thread-messages'; -import Message from './message'; -import { MessageContext } from './message-with-replies'; -import ThreadSection from '../parts/thread-section'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import Numbers from 'app/features/global/utils/Numbers'; - -type Props = { - companyId: string; - workspaceId: string; - channelId: string; - threadId: string; - firstMessageId: string; -}; - -export default ({ threadId, companyId, channelId, workspaceId, firstMessageId }: Props) => { - const { messages } = useThreadMessages({ companyId, threadId }); - - return ( - <> - {messages - .filter(m => !firstMessageId || Numbers.compareTimeuuid(m.id, firstMessageId) >= 0) - .filter(m => m.threadId !== m.id) - .map(m => { - return ( - - - - ); - })} - - ); -}; - -const Reply = () => { - const context = React.useContext(MessageContext); - const { message } = useMessage(context); - return ( - - - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/message/time-separator.tsx b/twake/frontend/src/app/views/applications/messages/message/time-separator.tsx deleted file mode 100644 index 9f6dbff5..00000000 --- a/twake/frontend/src/app/views/applications/messages/message/time-separator.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import Moment from 'react-moment'; -import 'moment-timezone'; -import './message.scss'; - -type Props = { - date: number; -}; - -export default React.memo((props: Props) => { - return ( -
-
-
-
- {new Date().getTime() - props.date > 24 * 60 * 60 * 1000 ? ( - - ) : ( - - )} -
-
-
-
- ); -}); diff --git a/twake/frontend/src/app/views/applications/messages/messages-list.tsx b/twake/frontend/src/app/views/applications/messages/messages-list.tsx deleted file mode 100644 index 5f0661d1..00000000 --- a/twake/frontend/src/app/views/applications/messages/messages-list.tsx +++ /dev/null @@ -1,272 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { useChannelMessages } from 'app/features/messages/hooks/use-channel-messages'; -import ListBuilder, { ListBuilderHandle } from './list-builder'; -import TimeSeparator from './message/time-separator'; -import MessageWithReplies from './message/message-with-replies'; -import FirstMessage from './message/parts/FirstMessage/FirstMessage'; -import LockedHistoryBanner from 'app/components/locked-features-components/locked-history-banner/locked-history-banner'; -import MessageHistoryService from 'app/features/messages/services/message-history-service'; -import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; -import ChannelAPIClient from 'app/features/channels/api/channel-api-client'; -import { - MessagesAndComponentsType, - withNonMessagesComponents, -} from '../../../features/messages/hooks/with-non-messages-components'; -import { useHighlightMessage } from 'app/features/messages/hooks/use-highlight-message'; -import SideViewService from 'app/features/router/services/side-view-service'; -import { Application } from 'app/features/applications/types/application'; -import GoToBottom from './parts/go-to-bottom'; -import { MessagesPlaceholder } from './placeholder'; -import { cleanFrontMessagesFromListOfMessages } from 'app/features/messages/hooks/use-message-editor'; -import { getMessage } from 'app/features/messages/hooks/use-message'; -import messageApiClient from 'app/features/messages/api/message-api-client'; -import User from 'app/features/users/services/current-user-service'; -import { useChannelMembersReadSections } from 'app/features/channel-members/hooks/use-channel-members-read-sections'; -import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; -import { useRefreshPublicOrPrivateChannels } from 'app/features/channels/hooks/use-public-or-private-channels'; -import { usePageVisibility } from "react-page-visibility"; - -type Props = { - companyId: string; - workspaceId?: string; - channelId?: string; - threadId?: string; - readonly?: boolean; -}; - -export const MessagesListContext = React.createContext({ - hideReplies: false, - withBlock: false, - readonly: false, -}); - -export default ({ channelId, companyId, workspaceId, readonly }: Props) => { - const listBuilderRef = useRef(null); - const [atBottom, setAtBottom] = useState(true); - const { seen, refresh: loadReadSections } = useChannelMembersReadSections( - companyId, - workspaceId || 'direct', - channelId || '', - ); - - const { - messages: _messages, - loadMore, - window, - jumpTo, - convertToKeys, - } = useChannelMessages({ - companyId, - workspaceId: workspaceId || '', - channelId: channelId || '', - }); - let messages = _messages; - const { company } = useCurrentCompany(); - const shouldLimit = MessageHistoryService.shouldLimitMessages( - company, - messages[0]?.id || '', - messages.length, - ); - messages = withNonMessagesComponents(messages, window.reachedStart, shouldLimit); - - const loadMoreMessages = async ( - direction: 'history' | 'future', - limit?: number, - offsetItem?: MessagesAndComponentsType, - ) => { - const messages = await loadMore(direction, limit, offsetItem?.threadId); - return withNonMessagesComponents( - convertToKeys(company.id, messages), - window.reachedStart && direction === 'history', - shouldLimit && direction === 'history', - ); - }; - - const { refresh: refreshChannels } = useRefreshPublicOrPrivateChannels(); - const isPageVisible = usePageVisibility(); - - useEffect(() => { - if (messages.length === 0) loadMore('history'); - }, []); - - useEffect(() => { - if (window.reachedEnd && atBottom && messages.length > 0 && isPageVisible) { - const seenMessages = messages.filter(message => { - const m = getMessage(message.id || message.threadId); - const currentUserId = User.getCurrentUserId(); - - if (m.user_id === currentUserId) { - return false; - } - - return m.status === 'delivered' || (m.status === 'read' && !seen(currentUserId, m.id)); - }); - if (seenMessages.length > 0) { - delayRequest('message-list-read-request', async () => { - await messageApiClient.read( - companyId, - channelId || '', - workspaceId || 'direct', - seenMessages, - ); - await loadReadSections(); - }); - } - } - }, [messages, messages.length, window.reachedEnd, isPageVisible]); - - const { highlight, cancelHighlight, reachedHighlight } = useHighlightMessage(); - - useEffect(() => { - //Manage scroll to highlight - if (listBuilderRef.current && highlight && !highlight.reachedThread) { - if (highlight.answerId) { - SideViewService.select(channelId || '', { - app: { identity: { code: 'messages' } } as Application, - context: { - viewType: 'channel_thread', - threadId: highlight.threadId, - }, - }); - } - - // Find the correct index of required message - const index = messages.findIndex(m => m.id === highlight.threadId); - if (index < 0) { - // Load the right portion of messages - jumpTo(highlight.threadId); - return; - } - setTimeout(() => { - if (listBuilderRef.current) - listBuilderRef.current.scrollToIndex({ - align: 'start', - index: index, - }); - setTimeout(() => { - //Need to wait a bit for the scroll to ends - reachedHighlight('thread'); - }, 1000); - }, 1000); - } - }, [highlight, messages.length]); - - useEffect(() => { - if (messages.length) { - ChannelAPIClient.read(companyId, workspaceId || '', channelId || '', { status: true }).then( - () => { - refreshChannels(); - }, - ); - } - }, [messages.length > 0]); - - useEffect(() => { - if (messages.length) { - delayRequest('message-list-load-read-sections', async () => { - loadReadSections(); - }); - } - }, [companyId, workspaceId, channelId, messages.length > 0]); - - const row = React.useMemo( - () => (_: number, m: MessagesAndComponentsType) => { - if (m.type === 'timeseparator') { - return ( -
- -
- ); - } - - if (m.type === 'header') { - return ( -
- -
- ); - } - - if (m.type === 'locked') { - return ( -
- -
- ); - } - - return ( -
- -
- ); - }, - [], - ); - - const jumpToBottom = () => { - if (window.reachedEnd) { - listBuilderRef.current?.scrollTo({ top: 10000000, behavior: 'smooth' }); - } else { - // Load the right portion of messages - jumpTo(''); - } - }; - - //This hide virtuoso but it start to work in backend - const virtuosoLoading = highlight && !highlight?.reachedThread; - - return ( - - {(!window.loaded || virtuosoLoading) && } - {!window.loaded &&
} - {window.loaded && ( - ) => { - const scrollBottom = - (e.target as HTMLElement).scrollHeight - - (e.target as HTMLElement).scrollTop - - (e.target as HTMLElement).clientHeight; - const closeToBottom = scrollBottom < 500; - if (closeToBottom !== atBottom) setAtBottom(closeToBottom); - cancelHighlight(); - }} - items={messages} - filterOnAppend={messages => { - return cleanFrontMessagesFromListOfMessages(messages); - }} - itemId={m => m.type + (getMessage(m.id)?.context?._front_id || m.threadId) + m.id} - emptyListComponent={} - itemContent={row} - followOutput={!!window.reachedEnd && 'smooth'} - loadMore={loadMoreMessages} - atBottomStateChange={async (atBottom: boolean) => { - if (atBottom && window.reachedEnd) { - setAtBottom(true); - await ChannelAPIClient.read(companyId, workspaceId || '', channelId || '', { - status: true, - }); - refreshChannels(); - } - }} - /> - )} - {!(atBottom && window.reachedEnd) && window.loaded && messages.length > 0 && ( - { - jumpToBottom(); - }} - /> - )} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/messages.scss b/twake/frontend/src/app/views/applications/messages/messages.scss deleted file mode 100644 index 47dd4fb7..00000000 --- a/twake/frontend/src/app/views/applications/messages/messages.scss +++ /dev/null @@ -1,281 +0,0 @@ -.messages-view { - position: relative; - width: 100%; - height: 100%; - display: flex; - flex-direction: column; - flex: 1; - overflow: hidden; - - .loading-blink { - @keyframes loading-blink { - 50% { - opacity: 0.5; - } - 20%, - 80% { - opacity: 1; - } - } - animation: loading-blink 1s infinite; - } - - .go-to-bottom { - position: relative; - padding: 0 8px; - bottom: 46px; - margin-bottom: -32px; - height: 28px; - width: fit-content; - z-index: 4; - font-size: 14px; - color: var(--white); - align-items: center; - align-self: center; - display: flex; - flex-direction: row; - justify-content: center; - background-color: var(--primary); - border-radius: 14px; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); - cursor: pointer; - transition: opacity 0.2s; - opacity: 1; - } - - .user-writing-info-message-view { - position: relative; - margin: 0 auto; - min-width: 0; - max-width: 1000px; - width: calc(100% - 32px); - position: relative; - - .user-writing-info-message-view-inner { - position: absolute; - display: flex; - justify-content: flex-start; - align-items: center; - color: var(--grey-dark); - bottom: -8px; - left: 0px; - font-size: 11px; - pointer-events: none; - background: #ffffff88; - border-radius: 4px; - } - } - - .loading-full { - position: absolute; - width: 100%; - height: 100%; - background: #fff; - z-index: 1; - .loading { - position: absolute; - margin: auto; - width: 50px; - height: 50px; - right: 0px; - bottom: 0px; - top: 0px; - left: 0px; - } - } - - .messages-list { - display: flex; - flex-direction: column; - - .header { - display: flex; - justify-content: center; - - .loader { - margin: 10px; - } - } - - .footer { - display: flex; - justify-content: center; - - .loader { - margin: 10px; - } - } - - &:not(.scrolled-up) { - .go-to-bottom { - pointer-events: none; - opacity: 0; - } - } - } - - .messages-scroller-parent { - flex: 1; - min-height: 0; - position: relative; - - &:before { - content: ''; - position: absolute; - width: 100%; - height: 0px; - background: var(--white); - border-top: 1px solid transparent; - z-index: 4; - bottom: 0; - pointer-events: none; - transition: height 0.2s; - } - &:after { - content: ''; - position: absolute; - width: 100%; - height: 100%; - box-shadow: 0 -16px 8px -8px rgba(255, 255, 255, 0) inset; - z-index: 4; - bottom: 8px; - pointer-events: none; - transition: box-shadow 0.2s, bottom 0.2s; - } - &.scrolled-up-100 { - &:after, - &:before { - opacity: 1; - } - &:before { - border-top: 1px solid var(--grey-background); - height: 16px; - } - &:after { - bottom: 16px; - box-shadow: 0 -32px 32px -32px rgba(0, 0, 0, 0.1) inset; - } - } - &.scrolled-up { - &:after { - content: ''; - position: absolute; - width: 100%; - height: 100%; - box-shadow: 0 -16px 8px -8px rgba(255, 255, 255, 1) inset; - z-index: 4; - bottom: 0px; - pointer-events: none; - transition: box-shadow 0.2s, bottom 0.2s; - } - } - - .message_header { - margin-top: 16px; - } - } - - .thread .message_timeline { - text-align: left; - background: var(--white); - margin: 0; - width: 100%; - .time_container { - margin-left: 32px; - top: -12px; - } - &::before { - display: none; - } - } - - .time_separator { - height: 24px; - display: flex; - align-self: center; - justify-content: center; - align-items: baseline; - } - - .message_timeline { - text-align: center; - color: var(--grey-dark); - font-size: 12px; - position: relative; - height: 22px; - margin: 0; - padding-bottom: 0px; - padding-top: 0px; - min-width: 0; - max-width: 1000px; - width: calc(100% - 32px); - - &::before { - content: ''; - z-index: 0; - width: 100%; - border-bottom: 1px solid var(--grey-background); - position: relative; - left: 0; - margin: 0; - display: inline-block; - } - - &.new_messages { - &::before { - border-color: var(--primary); - } - .time_container { - .time { - font-weight: 700; - background: var(--white); - color: var(--primary); - border-radius: 8px; - } - } - } - - .time_container { - display: inline-block; - padding: 0px 11px; - background: var(--white); - top: -15px; - position: relative; - border-radius: 8px; - - .time { - color: var(--grey-dark); - width: auto; - z-index: 1; - height: 22px; - line-height: 22px; - margin: auto; - font-size: 12px; - border-radius: 12px; - padding: 0 4px; - } - } - } - - .writing_message { - font-size: 12px; - color: var(--grey-dark); - font-size: 12px; - padding-bottom: 8px; - position: absolute; - bottom: 0; - left: 0; - margin: auto; - right: 0; - width: calc(100% - 48px); - background: #fff; - transition: opacity 0.2s; - min-width: 0; - max-width: 1000px; - width: calc(100% - 32px); - - &:hover { - opacity: 0.2; - } - } -} diff --git a/twake/frontend/src/app/views/applications/messages/messages.tsx b/twake/frontend/src/app/views/applications/messages/messages.tsx deleted file mode 100644 index 12ce06ca..00000000 --- a/twake/frontend/src/app/views/applications/messages/messages.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import React, { Suspense, useState } from 'react'; -import { ChannelType } from 'app/features/channels/types/channel'; -import { ViewConfiguration } from 'app/features/router/services/app-view-service'; -import NewThread from './input/new-thread'; -import MessagesList from './messages-list'; -import ThreadMessagesList from './thread-messages-list'; -import IsWriting from './input/parts/IsWriting'; -import { - useChannel, - useIsChannelMember, - useIsReadOnlyChannel, -} from 'app/features/channels/hooks/use-channel'; -import { Button } from 'app/atoms/button/button'; -import ChannelsReachableAPIClient from 'app/features/channels/api/channels-reachable-api-client'; -import UserService from 'app/features/users/services/current-user-service'; -import * as Text from '@atoms/text'; -import Languages from 'app/features/global/services/languages-service'; -import MessageSeenBy from 'app/components/message-seen-by/message-seen-by'; -import { useUser } from 'app/features/users/hooks/use-user'; -import { UserType } from 'app/features/users/types/user'; -import { ForwardMessageModal } from 'app/components/forward-message'; -import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; - -type Props = { - channel: ChannelType; - tab?: unknown; - options: ViewConfiguration; -}; - -export default (props: Props) => { - if (!props.channel) { - return <>; - } - - const companyId = props.channel.company_id || ''; - const workspaceId = props.channel.workspace_id || ''; - const channelId = props.channel.id || ''; - const isDirectChannel = props.channel.visibility !== 'direct'; - const threadId = props.options.context?.threadId || ''; - const isChannelMember = useIsChannelMember(channelId); - const currentUser = UserService.getCurrentUser(); - let userIsNotInCompany = false; - const otherChannelsMembersThanMe = - (props.channel.members || []).filter(id => id !== currentUser?.id) || []; - const otherUserThatIsNotMe = useUser(otherChannelsMembersThanMe[0] || ''); - if ( - otherUserThatIsNotMe && - otherChannelsMembersThanMe.length === 1 && - !UserService.isInCompany(otherUserThatIsNotMe as UserType, companyId) - ) { - userIsNotInCompany = true; - } - - const channelIsRestricted = - useIsReadOnlyChannel(channelId) && - currentUser.id !== props.channel.owner && - !AccessRightsService.hasLevel(workspaceId, 'moderator'); - - return ( -
- - - }> - {!threadId ? ( - - ) : ( - - )}{' '} - - - - {isChannelMember && channelIsRestricted && } - {isChannelMember && !channelIsRestricted && !userIsNotInCompany && ( - - )} - {isChannelMember && userIsNotInCompany && } - {!isChannelMember && } -
- ); -}; - -const JoinChanneBlock = ({ channelId }: { channelId: string }) => { - const [loading, setLoading] = useState(false); - const { channel, refresh } = useChannel(channelId); - - if (!channel) { - return <>; - } - - return ( -
- -
- {Languages.t('scenes.client.join_public_channel.info')} -
- ); -}; - -const UserIsNotInCompany = () => { - return ( -
- {Languages.t('scenes.apps.messages.message.user_deactivated')} -
- ); -}; - -const ChannelIsRestricted = () => { - return ( -
- {Languages.t('scenes.client.readonly.info')} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/parts/go-to-bottom.tsx b/twake/frontend/src/app/views/applications/messages/parts/go-to-bottom.tsx deleted file mode 100644 index aa553d0e..00000000 --- a/twake/frontend/src/app/views/applications/messages/parts/go-to-bottom.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import { ArrowDown } from 'react-feather'; - -type Props = { - onClick: () => void; - newMessages?: number; -}; - -export default (props: Props) => { - const msg = props.newMessages - ? Languages.t('scenes.apps.messages.messageslist.go_last_message_button.new_messages') - : Languages.t('scenes.apps.messages.messageslist.go_last_message_button'); - - return ( -
props.onClick()}> - - {msg} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/parts/thread-avatar.tsx b/twake/frontend/src/app/views/applications/messages/parts/thread-avatar.tsx deleted file mode 100644 index 7bad7a10..00000000 --- a/twake/frontend/src/app/views/applications/messages/parts/thread-avatar.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React, { useContext } from 'react'; -import 'moment-timezone'; -import User from 'app/features/users/services/current-user-service'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import Icon from 'app/components/icon/icon.jsx'; -import './threads.scss'; -import { MessageContext } from '../message/message-with-replies'; -import { useMessage } from 'app/features/messages/hooks/use-message'; -import { useRecoilState } from 'recoil'; -import { CompanyApplicationsStateFamily } from 'app/features/applications/state/company-applications'; -import { useUser } from 'app/features/users/hooks/use-user'; - -type Props = { - small?: boolean; -}; - -export default (props: Props) => { - const context = useContext(MessageContext); - const { message } = useMessage(context); - - const user = - useUser(message.user_id) || (message.users || []).find(u => u.id === message.user_id); - const companyApplications = - useRecoilState(CompanyApplicationsStateFamily(context.companyId))[0] || []; - const application = companyApplications.find(a => a.id === message.application_id); - - return ( - <> - {!!user && !message.application_id && ( -
- )} - {!!message.application_id && ( - - )} - - ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/parts/thread-section.tsx b/twake/frontend/src/app/views/applications/messages/parts/thread-section.tsx deleted file mode 100644 index 719b731d..00000000 --- a/twake/frontend/src/app/views/applications/messages/parts/thread-section.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React, { ReactNode, Suspense } from 'react'; -import 'moment-timezone'; -import './threads.scss'; -import ThreadAvatar from './thread-avatar'; - -type Props = { - compact?: boolean; - gradient?: boolean; - small?: boolean; - head?: boolean; - alinea?: boolean; - children?: ReactNode; - noSenderSpace?: boolean; - withAvatar?: boolean; - pinned?: boolean; - className?: string; - onClick?: () => void; -}; - -export default (props: Props) => { - return ( -
-
- {!props.noSenderSpace && ( -
- {props.withAvatar && ( - - - - )} -
- )} - {props.children} -
-
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/parts/thread.tsx b/twake/frontend/src/app/views/applications/messages/parts/thread.tsx deleted file mode 100644 index 8b3ab89d..00000000 --- a/twake/frontend/src/app/views/applications/messages/parts/thread.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React, { ReactNode } from 'react'; -import './threads.scss'; -import classNames from 'classnames'; - -export const LoadingThread = ( -
-
-
-
-
-
-
- -
-
-
-
-
-
-); - -type Props = { - hidden?: boolean; - highlighted?: boolean; - withBlock?: boolean; - className?: string; - children: ReactNode; -}; - -export default ({ hidden, highlighted, className, withBlock, children }: Props) => ( -
-
-
{children}
-
-
-); diff --git a/twake/frontend/src/app/views/applications/messages/parts/threads.scss b/twake/frontend/src/app/views/applications/messages/parts/threads.scss deleted file mode 100644 index 448944f4..00000000 --- a/twake/frontend/src/app/views/applications/messages/parts/threads.scss +++ /dev/null @@ -1,207 +0,0 @@ -.dragged { - .draggable_clone > .thread, - .draggable_clone > .thread-section { - opacity: 1; - border: 1px solid var(--grey-background); - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1); - border-radius: var(--border-radius-base); - width: 100%; - font-size: 14px; - - .message { - padding: 12px; - } - - .sender-space { - width: 28px; - } - } - .draggable_clone > .thread-section, - .draggable_clone > .thread .head-section { - .message-options.drag { - display: flex; - opacity: 1; - box-shadow: none; - } - } -} - -.drag_message { - .thread-container.has-droppable { - .thread:hover:not(.dragging_opacity) { - border: 1px solid var(--primary) !important; - box-shadow: 0 2px 4px 0 var(--primary-background) !important; - overflow: hidden; - } - } - - .message-options { - display: none; - } -} - -.thread-container, -.dragged { - .thread.dragging_opacity > *, - .thread-section.dragging_opacity > * { - opacity: 0.2; - } - - padding-top: 8px; - padding-bottom: 8px; - - &.highlighted .thread, - &.highlighted .thread.with-block { - border-radius: var(--border-radius-base); - box-shadow: 0 0 0 4px #fff892; - .thread-section .message { - border-radius: var(--border-radius-base); - } - } - opacity: 1; - transition: background-color 0.2s, box-shadow 0.2s; - min-width: 0; - - &.hidden { - opacity: 0; - } - - .thread-centerer { - margin: 0 auto; - min-width: 0; - max-width: 1000px; - width: calc(100% - 32px); - position: relative; - } - - .thread { - font-size: 14px; - margin-bottom: 8px; - - &.with-block { - border: 1px solid var(--grey-background); - box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1); - border-radius: var(--border-radius-base); - // in infinite list, margin are bad to compute render size because they are hard to measure - // using padding solves this issue anbd allow to scroll correctly - // cf https://virtuoso.dev/troubleshooting#list-does-not-scroll-to-the-bottom--items-jump-around - margin-bottom: 0px; - background: var(--white); - - .message { - padding: 12px; - } - } - } - - .thread-section { - position: relative; - &.gradient { - margin-bottom: -40px; - height: 64px; - background: linear-gradient(180deg, #fff 40%, #ffffff00); - z-index: 1; - position: relative; - border: none; - .message { - background: none; - } - } - - &:not(:last-child):not(.gradient) { - border-bottom: 1px solid var(--grey-background); - } - - &.compact { - .message { - padding: 4px 12px !important; - } - } - - .message { - border-left: 4px solid transparent; - background-color: var(--white); - padding: 4px; - padding-left: 8px; - display: flex; - border-radius: var(--border-radius-base) 0 0 0; - } - - &.small-section { - .message .sender-space { - .sender-head, - .app_icon { - width: 16px; - height: 16px; - margin-top: 2px; - - .online_user_status { - position: relative; - bottom: -12px; - right: -12px; - } - } - } - } - - &.alinea { - .message { - padding-left: 32px; - } - } - - &.pinned-section { - .message { - border-left: 4px solid var(--primary); - box-shadow: -8px 0px 12px -8px var(--primary-background); - overflow: hidden; - } - } - } - - &.loading { - .sender-head, - .app_icon, - .sender-name, - .content-parent { - animation-duration: 10s; - animation-fill-mode: forwards; - animation-iteration-count: infinite; - animation-name: placeHolderShimmer; - animation-timing-function: linear; - background-repeat: repeat !important; - background-image: linear-gradient( - to right, - var(--grey-light) 0px, - #f2f2f2 120px, - var(--grey-light) 234px - ) !important; - } - .sender-name { - width: 30%; - max-width: 200px; - } - .content-parent { - width: 100%; - } - .sender-name, - .content-parent { - height: 14px; - margin: 4px 0; - display: inline-block; - border-radius: var(--border-radius-base); - } - div, - span { - font-size: 0px !important; - } - - .thread-section { - border: 0px !important; - } - - .thread-section.compact { - display: none; - } - } -} diff --git a/twake/frontend/src/app/views/applications/messages/placeholder.tsx b/twake/frontend/src/app/views/applications/messages/placeholder.tsx deleted file mode 100644 index 38e7dc41..00000000 --- a/twake/frontend/src/app/views/applications/messages/placeholder.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { Skeleton } from 'antd'; -import React from 'react'; - -export const MessagesPlaceholder = () => { - return ( -
- {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(i => ( -
- -
- ))}{' '} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx b/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx deleted file mode 100644 index 105aaf0c..00000000 --- a/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import ListBuilder, { ListBuilderHandle } from './list-builder'; -import TimeSeparator from './message/time-separator'; -import MessageWithReplies from './message/message-with-replies'; -import FirstThreadMessage from './message/parts/FirstMessage/FirstThreadMessage'; -import { MessagesListContext } from './messages-list'; -import { useThreadMessages } from 'app/features/messages/hooks/use-thread-messages'; -import { - MessagesAndComponentsType, - withNonMessagesComponents, -} from '../../../features/messages/hooks/with-non-messages-components'; -import { useHighlightMessage } from 'app/features/messages/hooks/use-highlight-message'; -import GoToBottom from './parts/go-to-bottom'; -import { MessagesPlaceholder } from './placeholder'; -import { cleanFrontMessagesFromListOfMessages } from 'app/features/messages/hooks/use-message-editor'; -import { getMessage } from 'app/features/messages/hooks/use-message'; - -type Props = { - companyId: string; - workspaceId: string; - channelId: string; - threadId: string; - readonly?: boolean; -}; - -export default ({ companyId, workspaceId, channelId, threadId, readonly }: Props) => { - const listBuilderRef = useRef(null); - const [atBottom, setAtBottom] = useState(true); - - const { highlight, cancelHighlight, reachedHighlight } = useHighlightMessage(); - const { - messages: _messages, - loadMore, - window, - jumpTo, - convertToKeys, - } = useThreadMessages({ - companyId, - threadId: threadId || '', - }); - const messages = withNonMessagesComponents(_messages, window.reachedStart); - - useEffect(() => { - loadMore('history'); - }, []); - - const loadMoreMessages = async ( - direction: 'history' | 'future', - limit?: number, - offsetItem?: MessagesAndComponentsType, - ) => { - const messages = await loadMore(direction, limit, offsetItem?.id); - return withNonMessagesComponents( - convertToKeys(companyId, messages), - window.reachedStart && direction === 'history', - ); - }; - - useEffect(() => { - //Manage scroll to highlight - if ( - listBuilderRef.current && - highlight && - highlight.answerId && - highlight.reachedThread && - !highlight.reachedAnswer - ) { - // Find the correct index of required message - const index = messages.findIndex(m => m.id === highlight.answerId); - if (index < 0) { - // Load the right portion of messages - jumpTo(highlight.answerId); - return; - } - setTimeout(() => { - if (listBuilderRef.current) - listBuilderRef.current.scrollToIndex({ - align: 'start', - index: index, - }); - setTimeout(() => reachedHighlight('answer'), 1000); - }, 1000); - } - }, [highlight, messages.length]); - - const jumpToBottom = () => { - if (window.reachedEnd) { - listBuilderRef.current?.scrollTo({ top: 10000000, behavior: 'smooth' }); - } else { - // Load the right portion of messages - jumpTo(''); - } - }; - - //This hide virtuoso but it start to work in backend - const virtuosoLoading = highlight && highlight.answerId && !highlight?.reachedAnswer; - - return ( - - {(!window.loaded || virtuosoLoading) && } - {!window.loaded &&
} - {window.loaded && ( - ) => { - const scrollBottom = - (e.target as HTMLElement).scrollHeight - - (e.target as HTMLElement).scrollTop - - (e.target as HTMLElement).clientHeight; - const closeToBottom = scrollBottom < 100; - if (closeToBottom !== atBottom) setAtBottom(closeToBottom); - cancelHighlight(); - }} - items={messages} - itemId={m => m.type + (getMessage(m.id)?.context?._front_id || m.id) + m.id} - emptyListComponent={} - filterOnAppend={messages => { - return cleanFrontMessagesFromListOfMessages(messages); - }} - itemContent={(_index, m) => { - if (m.type === 'timeseparator') { - return ( -
- -
- ); - } - - if (m.type === 'header') { - return ( -
- -
- ); - } - - return ( -
- -
- ); - }} - loadMore={loadMoreMessages} - /> - )} - {!(atBottom && window.reachedEnd) && window.loaded && messages.length > 0 && ( - { - jumpToBottom(); - }} - /> - )} -
- ); -}; diff --git a/twake/frontend/src/app/views/applications/tasks/board-picker/board-picker.jsx b/twake/frontend/src/app/views/applications/tasks/board-picker/board-picker.jsx deleted file mode 100755 index a3aae0d5..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board-picker/board-picker.jsx +++ /dev/null @@ -1,75 +0,0 @@ -/* eslint-disable react/prop-types */ -/* eslint-disable react/jsx-key */ -import React, { Component } from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import Workspaces from 'app/deprecated/workspaces/workspaces.jsx'; -import Emojione from 'components/emojione/emojione'; -import Loader from 'components/loader/loader.jsx'; - -export default class BoardPicker extends Component { - constructor() { - super(); - this.state = { - i18n: Languages, - }; - Languages.addListener(this); - - this.boards_collection_key = 'boards_picker_' + Workspaces.getCurrentUserId; - - Collections.get('boards').addListener(this); - Collections.get('boards').addSource( - { - http_base_url: 'tasks/board', - http_options: { - workspace_id: Workspaces.getCurrentUserId, - }, - websockets: [{ uri: 'boards/' + Workspaces.getCurrentUserId, options: { type: 'board' } }], - }, - this.boards_collection_key, - // eslint-disable-next-line @typescript-eslint/no-empty-function - () => {}, - ); - } - componentWillUnmount() { - Languages.removeListener(this); - Collections.get('boards').removeSource(this.boards_collection_key); - } - render() { - var boards = Collections.get('boards').findBy({ workspace_id: Workspaces.currentWorkspaceId }); - var loading = - !Collections.get('boards').did_load_first_time[this.boards_collection_key] && - boards.length == 0; - - return ( -
- {loading && ( -
- -
- )} - - {!loading && - boards.map(board => { - return ( -
{ - this.props.onChoose(board); - }} - > -
- {board.emoji && } - {board.title} -
-
- {board.active_tasks || '0'}{' '} - {Languages.t('scenes.apps.tasks.active_tasks', [], 'tâches actives')} -
-
- ); - })} -
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/Board.jsx b/twake/frontend/src/app/views/applications/tasks/board/Board.jsx deleted file mode 100755 index 5b6b66f9..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/Board.jsx +++ /dev/null @@ -1,501 +0,0 @@ -/* eslint-disable react/prop-types */ -import React from 'react'; -import Languages from 'app/features/global/services/languages-service'; - -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import { DragDropContext, Droppable } from 'react-beautiful-dnd'; -import List from './list/list.jsx'; -import PerfectScrollbar from 'react-perfect-scrollbar'; -import Loader from 'components/loader/loader.jsx'; -import './Board.scss'; -import Emojione from 'components/emojione/emojione'; -import Rounded from 'components/inputs/rounded.jsx'; -import Menu from 'components/menus/menu.jsx'; -import ListEditor from './list/list-editor.jsx'; -import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; -import Tabs from 'components/tabs/tabs.jsx'; -import ChevronDownIcon from '@material-ui/icons/KeyboardArrowDownOutlined'; -import User from 'components/user/user.jsx'; -import MenusManager from 'app/components/menus/menus-manager.jsx'; -import RouterService from 'app/features/router/services/router-service'; - -export default class Board extends React.Component { - constructor(props) { - super(props); - this.props = props; - this.state = { - i18n: Languages, - archived: false, - }; - Languages.addListener(this); - - this.board_collection_key = 'board_' + this.props.board.id; - - this.user_mode = this.props.board.id.split('_')[0] === 'user'; - - const { channelId } = RouterService.getStateFromRoute(); - - //Lists (only in board mode, not in user mode) - if (!this.user_mode) { - Collections.get('lists').addListener(this); - Collections.get('lists').addSource( - { - http_base_url: 'tasks/list', - http_options: { - channel_id: channelId, - board_id: this.props.board.id, - }, - websockets: [{ uri: 'board_lists/' + this.props.board.id, options: { type: 'list' } }], - }, - this.board_collection_key, - ); - } - - Collections.get('tasks').addListener(this); - Collections.get('tasks').addSource( - { - http_base_url: 'tasks/task', - http_options: { - channel_id: channelId, - board_id: this.props.board.id, - }, - websockets: [{ uri: 'board_tasks/' + this.props.board.id, options: { type: 'task' } }], - }, - this.board_collection_key, - ); - } - componentWillUnmount() { - Languages.removeListener(this); - - if (!this.user_mode) { - Collections.get('lists').removeListener(this); - Collections.get('lists').removeSource(this.board_collection_key); - } - - Collections.get('tasks').removeListener(this); - Collections.get('tasks').removeSource(this.board_collection_key); - } - - shouldComponentUpdate() { - if (this.retry_update) clearTimeout(this.retry_update); - if (TasksService.paused_notify[this.props.board.id]) { - this.retry_update = setTimeout(() => { - this.setState({}); - }, 1000); - return false; - } - return true; - } - - onDragStart = () => { - TasksService.paused_notify[this.props.board.id] = true; - }; - - onDragEnd = event => { - TasksService.paused_notify[this.props.board.id] = false; - - if (!event.destination) { - return; - } - - if (event.type === 'board') { - var element_front_id = event.draggableId.split('_')[1]; - var new_index = event.destination.index; - var list = Collections.get('lists').findByFrontId(element_front_id); - if (list) { - Collections.get('lists').updateObject( - { - order: TasksService.newIndexAfter( - 'lists_' + this.props.board.id, - new_index - (new_index < event.source.index ? 1 : 0), - ), - }, - list.front_id, - ); - TasksService.setElementIndexPool( - 'lists_' + this.props.board.id, - Collections.get('lists').findBy({ board_id: this.props.board.id }), - ); - Collections.get('lists').save(list, this.board_collection_key); - } - } - - if (event.type === 'list') { - // eslint-disable-next-line no-redeclare - var element_front_id = event.draggableId.split('_')[1]; - var source_list_front_id = event.source.droppableId; - var destination_list_front_id = event.destination.droppableId; - var destination_index = event.destination.index; - - var source_list = Collections.get('lists').findByFrontId(source_list_front_id); - // eslint-disable-next-line no-redeclare - var list = Collections.get('lists').findByFrontId(destination_list_front_id); - var task = Collections.get('tasks').findByFrontId(element_front_id); - - if (task && list && list.id) { - Collections.get('tasks').updateObject( - { - list_id: list.id, - order: TasksService.newIndexAfter( - 'tasks_' + list.id, - destination_index - - (destination_index < event.source.index || - destination_list_front_id !== source_list_front_id - ? 1 - : 0), - ), - }, - task.front_id, - ); - if (source_list && source_list.id) { - TasksService.setElementIndexPool( - 'tasks_' + source_list.id, - Collections.get('tasks').findBy({ - board_id: this.props.board.id, - list_id: source_list.id, - }), - ); - } - TasksService.setElementIndexPool( - 'tasks_' + list.id, - Collections.get('tasks').findBy({ board_id: this.props.board.id, list_id: list.id }), - ); - Collections.get('tasks').save(task, this.board_collection_key); - } - } - }; - - render() { - var current_board = this.props.board; - - this.isDragDisabled = false; - - var lists = Collections.get('lists').findBy({ board_id: this.props.board.id }); - if (this.user_mode) { - lists = [ - { - id: 'allusertasks_' + this.props.board.id.split('_')[1], - title: Languages.t('components.workspace.list_manager.all', [], 'All'), - all: true, - }, - ]; - - var workspaces = []; - TasksService.getTasksInList( - this.props.board.id, - lists[0].id, - this.state.archived ? true : false, - ).forEach(task => { - if (workspaces.indexOf(task.workspace_id) < 0) { - workspaces.push(task.workspace_id); - - var workspace = Collections.get('workspaces').find(task.workspace_id); - - if (workspace) { - lists.push({ - id: - 'workspaceusertasks_' + this.props.board.id.split('_')[1] + '_' + task.workspace_id, - title: workspace.name, - other_group: true, - }); - } - } - }); - - lists.sort((a, b) => { - if (a.all) { - return -1; - } - if (a.other_group) { - return 1; - } - if (b.other_group) { - return -1; - } - return 0; - }); - - this.isDragDisabled = true; - } - - var loading = - (!this.user_mode && - !Collections.get('lists').did_load_first_time[this.board_collection_key]) || - !Collections.get('tasks').did_load_first_time[this.board_collection_key]; - - if (loading) { - return ( -
- -
- ); - } - - TasksService.setElementIndexPool( - 'lists_' + this.props.board.id, - Collections.get('lists').findBy({ board_id: this.props.board.id }), - ); - - // eslint-disable-next-line no-redeclare - var lists = lists.sort( - (a, b) => - TasksService.getElementIndex(a, 'lists_' + a.board_id) - - TasksService.getElementIndex(b, 'lists_' + b.board_id), - ); - if (!this.user_mode) { - lists.push({ - id: 'add_list', - render: ( -
- { - return ( - - ); - }, - }, - ]} - > - - -
- ), - }); - } - - return ( - -
- {!this.props.noTitle && ( -
- {!((this.props.tab || {}).configuration || {}).board_id && ( -
{ - TasksService.openBoard(null); - }} - > - {Languages.t('scenes.apps.board.all_boards', [], 'All Boards')} -
- )} - {current_board.emoji && ( - - )} - {current_board.user_image && ( - - )} - {current_board.title} -
- )} - -
- - {!this.props.hideMore && ( -
{ - MenusManager.openMenu( - [ - { - type: 'title', - text: Languages.t('scenes.apps.board.display_as', [], 'Afficher en tant que'), - }, - { - type: 'menu', - icon: current_board.view_mode === 'grid' ? 'check' : ' ', - className: current_board.view_mode === 'grid' ? 'primary' : ' ', - rightIcon: 'window-restore', - text: Languages.t('scenes.apps.board.kanban', [], 'Kanban'), - onClick: () => { - current_board.view_mode = 'grid'; - Collections.get('boards').save( - current_board, - this.props.boardsCollectionKey, - ); - }, - }, - { - type: 'menu', - icon: current_board.view_mode === 'list' ? 'check' : ' ', - className: current_board.view_mode === 'list' ? 'primary' : ' ', - rightIcon: 'list-ul', - text: Languages.t('scenes.apps.calendar.calendar.list_btn', [], 'Liste'), - onClick: () => { - current_board.view_mode = 'list'; - Collections.get('boards').save( - current_board, - this.props.boardsCollectionKey, - ); - }, - }, - - { type: 'separator' }, - { - type: 'menu', - icon: this.state.archived === false ? 'check' : ' ', - className: this.state.archived === false ? 'primary' : ' ', - text: Languages.t('scenes.apps.board.active_tasks', [], 'Tâches actives'), - onClick: () => { - this.setState({ archived: false }); - }, - }, - { - type: 'menu', - icon: this.state.archived ? 'check' : ' ', - className: this.state.archived ? 'primary' : ' ', - text: Languages.t( - 'scenes.apps.board.archived_tasks', - [ - Collections.get('tasks').findBy({ - archived: true, - board_id: current_board.id, - }).length, - ], - 'Tâches archivées ($1)', - ), - onClick: () => { - this.setState({ archived: true }); - }, - }, - ], - { x: evt.clientX, y: evt.clientY }, - 'bottom', - ); - }} - > - {Languages.t('general.more', [], 'Plus')} - -
- )} -
- -
-
- {this.props.mode === 'list' && ( - { - return { - id: item.front_id || item.id, - titleClassName: item.id === 'add_list' ? 'no-selection-border' : '', - titleStyle: { borderBottomColor: item.color }, - title: () => { - if (item.id === 'add_list') { - return item.render; - } - return ( - (item.title || '-') + - ' (' + - TasksService.getTasksInList( - item.board_id, - item.id, - this.state.archived ? true : false, - ).length + - ')' - ); - }, - render: () => { - if (item.id === 'add_list') { - return ''; - } - return ( - - ); - }, - }; - }) - .reduce((acc, cur) => { - acc[cur.id] = cur; - return acc; - }, {})} - /> - )} - - {this.props.mode === 'grid' && ( - - - {provided => ( -
- {lists - .filter(a => a.id !== 'add_list') - .map(item => { - return ( - - ); - })} - - {provided.placeholder} - - {lists[lists.length - 1].render} -
- )} -
-
- )} -
-
- - {/*{ - MediumPopupManager.open(, {size: {width: 600}}); - }} />*/} - - ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/Board.scss b/twake/frontend/src/app/views/applications/tasks/board/Board.scss deleted file mode 100755 index c79d5395..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/Board.scss +++ /dev/null @@ -1,233 +0,0 @@ -.board { - display: flex; - flex-direction: column; - height: 100%; - flex: 1; - - margin: 0 -32px; - margin-bottom: -15px; - margin-top: -8px; - - &.inline { - height: auto; - .list, - .component_tabs, - .component_tabs > .body, - .lists_before { - display: block !important; - height: auto !important; - position: relative !important; - max-height: none !important; - } - .list .list_draggable .droppable { - max-height: none; - height: auto; - flex: none; - } - } - - &.mode_list { - .lists_before { - padding-top: 16px; - } - .lists_before .component_tabs .body .scrollable_task_list { - padding: 0px 24px; - } - .lists_before .component_tabs .component_tabs_tabs, - .lists_before .component_tabs .body .add_task { - height: auto; - margin-right: 24px; - margin-left: 24px; - } - .component_tabs { - height: 100%; - .body { - display: flex; - flex-direction: column; - } - } - .component_tabs > .body { - padding-left: 0px; - padding-right: 0px; - & > .component_tabs_tab { - &.no-selection-border { - border-bottom: 0px; - margin-left: 0px; - padding-left: 0px; - } - } - } - .list .list_draggable .list_header { - display: none; - } - .list { - position: absolute; - height: 100%; - width: 100%; - } - .list, - .list_draggable { - margin-right: 0px; - width: 100%; - .task_draggable_parent { - margin-bottom: 0px; - .task { - border-left: 0px; - border-right: 0px; - border-top: 0px; - border-radius: 0px; - display: flex; - padding-right: 56px; - - .task_options { - padding-top: 2px; - display: block; - background: transparent; - } - - .task_line_1 { - padding-top: 2px; - flex: 1; - .task_title { - line-height: 22px; - font-size: 14px; - font-weight: bold; - } - .tags-in-name { - display: inline-block; - vertical-align: bottom; - } - } - .task_line_2, - .task_line_tags, - .task_users { - margin-top: 0px; - width: 20%; - max-width: 110px; - } - .task_line_tags { - display: none; - } - } - } - } - .task { - .attachmentPicker { - width: auto; - margin: 0px; - .attachments .attachment { - width: 40px; - height: 40px; - margin-top: -8px; - margin-bottom: -8px; - margin-right: 8px; - } - .attachments, - .attachments .attachment > .file, - .attachments .attachment > .file .preview { - width: 100%; - height: 100%; - margin: 0px; - } - .attachments .attachment > .file .data { - display: none; - } - } - } - } - - .lists_before { - flex: 1; - position: relative; - overflow: hidden; - - .lists_scrollable { - white-space: nowrap; - height: 100%; - position: absolute; - width: 100%; - - & > div:first-child { - padding-left: 32px; - padding-bottom: 16px; - box-sizing: border-box; - padding-top: 16px; - } - } - } - - .list_add { - font-size: 14px; - font-weight: 500; - width: auto; - padding: 4px; - height: 32px; - padding-right: 4px; - padding-left: 8px; - line-height: 24px; - vertical-align: top; - opacity: 0.8; - - &:hover { - opacity: 1; - } - .m-icon-small { - vertical-align: middle; - margin-top: -2px; - font-size: 18px !important; - } - } -} - -.board_header { - display: flex; - - .app_title { - flex: 1; - } - - .options { - font-size: 13px; - margin-left: 10px; - line-height: 18px; - display: flex; - align-items: center; - } - - .view_title { - font-size: 24px; - margin-bottom: 0; - padding-bottom: 0; - line-height: 24px; - height: 50px; - display: flex; - - .name { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - - .filter_input { - flex: 1; - margin-left: 20px; - margin-top: -2px; - margin-right: 20px; - text-align: right; - } - - .anticon { - margin-right: 5px; - line-height: 30px; - } - - .board_parameters { - float: right; - cursor: pointer; - color: #666; - &:hover { - opacity: 0.5; - } - } - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/BoardEditor.jsx b/twake/frontend/src/app/views/applications/tasks/board/BoardEditor.jsx deleted file mode 100755 index e48fc57f..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/BoardEditor.jsx +++ /dev/null @@ -1,76 +0,0 @@ -/* eslint-disable react/prop-types */ -/* eslint-disable react/no-direct-mutation-state */ -import React, { Component } from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import MenuManager from 'app/components/menus/menus-manager.jsx'; -import Workspaces from 'app/deprecated/workspaces/workspaces.jsx'; - -import InputWithIcon from 'components/inputs/input-with-icon'; -import Button from 'components/buttons/button.jsx'; - -export default class BoardEditor extends Component { - constructor() { - super(); - this.state = { - i18n: Languages, - name: '', - emoji: '', - }; - Languages.addListener(this); - } - UNSAFE_componentWillMount() { - if (this.props.id) { - var board = Collections.get('boards').find(this.props.id); - if (board) { - this.state.name = board.title; - this.state.emoji = board.emoji; - } - } - } - componentWillUnmount() { - Languages.removeListener(this); - } - save() { - var board = {}; - if (this.props.id) { - board = Collections.get('boards').find(this.props.id); - } else { - board = Collections.get('boards').editCopy({}); - board.workspace_id = Workspaces.currentWorkspaceId; - } - board.title = this.state.name; - board.emoji = this.state.emoji; - Collections.get('boards').save(board, this.props.collectionKey); - MenuManager.closeMenu(); - } - render() { - return ( -
-
- this.save()} - onChange={value => { - this.setState({ emoji: value[0], name: value[1] }); - }} - /> -
-
-
-
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/list/add-task.jsx b/twake/frontend/src/app/views/applications/tasks/board/list/add-task.jsx deleted file mode 100755 index e9c64221..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/list/add-task.jsx +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-disable react/prop-types */ -import React, { Component } from 'react'; - -import Languages from 'app/features/global/services/languages-service'; -import Input from 'components/inputs/input.jsx'; -import Button from 'components/buttons/button.jsx'; -import OutsideClickHandler from 'react-outside-click-handler'; - -export default class AddTask extends Component { - constructor(props) { - super(props); - this.state = { - i18n: Languages, - unselected: true, - }; - Languages.addListener(this); - } - componentWillUnmount() { - Languages.removeListener(this); - } - newTask() { - this.setState({ new_task_title: '' }); - if (!(this.state.new_task_title || '').trim()) { - return; - } - - var task = { - title: this.state.new_task_title, - }; - - this.props.onSubmit(task); - } - render() { - if (this.state.unselected) { - return ( -
{ - this.setState({ unselected: false }); - }} - > - {Languages.t('scenes.apps.board.new_task', [], '+ New task')} -
- ); - } - - return ( - { - this.setState({ unselected: true }); - }} - > -
- { - this.setState({ new_task_title: evt.target.value }); - }} - onEnter={() => { - this.newTask(); - }} - /> -
-
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/list/list-editor.jsx b/twake/frontend/src/app/views/applications/tasks/board/list/list-editor.jsx deleted file mode 100755 index cf3c7edc..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/list/list-editor.jsx +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-disable react/prop-types */ -/* eslint-disable react/no-direct-mutation-state */ -import React, { Component } from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import MenuManager from 'app/components/menus/menus-manager.jsx'; - -import InputWithColor from 'components/inputs/input-with-color.jsx'; -import Button from 'components/buttons/button.jsx'; -import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; - -export default class ListEditor extends Component { - constructor() { - super(); - this.state = { - i18n: Languages, - name: '', - emoji: '', - }; - Languages.addListener(this); - } - UNSAFE_componentWillMount() { - if (this.props.id) { - var list = Collections.get('lists').find(this.props.id); - if (list) { - this.state.name = list.title; - this.state.color = list.color; - } - } - } - componentWillUnmount() { - Languages.removeListener(this); - } - save() { - var list = {}; - if (this.props.id) { - list = Collections.get('lists').find(this.props.id); - } else { - list = Collections.get('lists').editCopy({}); - list.board_id = this.props.board.id; - list.order = TasksService.newIndexAfter('lists_' + this.props.board.id); - } - list.title = this.state.name; - list.color = this.state.color; - Collections.get('lists').save(list, this.props.collectionKey); - MenuManager.closeMenu(); - } - render() { - return ( -
-
- this.save()} - onChange={value => { - this.setState({ color: value[0], name: value[1] }); - }} - /> -
-
-
-
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/list/list.jsx b/twake/frontend/src/app/views/applications/tasks/board/list/list.jsx deleted file mode 100755 index 568b51a6..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/list/list.jsx +++ /dev/null @@ -1,280 +0,0 @@ -/* eslint-disable react/prop-types */ -import React from 'react'; - -import Languages from 'app/features/global/services/languages-service'; -import { Draggable, Droppable } from 'react-beautiful-dnd'; -import Task from '../task/Task.jsx'; -import Icon from 'app/components/icon/icon.jsx'; -import MenusManager from 'app/components/menus/menus-manager.jsx'; -import ListEditor from './list-editor.jsx'; -import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; -import AlertManager from 'app/features/global/services/alert-manager-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; -import AddTask from './add-task.jsx'; -import UserListManager from 'components/user-list-manager/user-list-manager'; -import PerfectScrollbar from 'react-perfect-scrollbar'; - -import './list.scss'; -import '../task/Task.scss'; - -export default class List extends React.Component { - constructor(props) { - super(props); - this.state = { - i18n: Languages, - }; - Languages.addListener(this); - Collections.get('lists').addListener(this); - Collections.get('tasks').addListener(this); - Collections.get('lists').listenOnly(this, [props.list.front_id]); - - this.did_fade_in = false; - } - componentWillUnmount() { - Languages.removeListener(this); - Collections.get('lists').removeListener(this); - Collections.get('tasks').removeListener(this); - } - listOptions() { - var list = this.props.list; - var menu = []; - menu = [ - { - text: Languages.t('general.edit'), - submenu_replace: true, - submenu: [ - { - type: 'title', - text: Languages.t('scenes.apps.tasks.list_modal.modify_list', [], 'Edit list'), - }, - { - type: 'react-element', - reactElement: level => { - return ( - - ); - }, - }, - ], - }, - ]; - - if (!WorkspaceUserRights.isInvite()) { - if (WorkspaceUserRights.hasWorkspacePrivilege()) { - menu.push( - { - text: Languages.t( - 'scenes.apps.tasks.list_modal.predefined_participants', - [], - 'Participants prédéfinis...', - ), - submenu_replace: true, - submenu: [ - { - type: 'title', - text: Languages.t( - 'scenes.apps.tasks.list_modal.predefined_participants', - [], - 'Participants prédéfinis', - ), - }, - { - type: 'react-element', - reactElement: () => { - return ( -
- { - return { id: id }; - })} - disableExterne={true} - scope="workspace" - onChange={ids => { - list.auto_participants = ids; - Collections.get('lists').save(list, this.props.collectionKey); - MenusManager.closeMenu(); - }} - onCancel={() => { - MenusManager.closeMenu(); - }} - /> -
- ); - }, - }, - ], - }, - - /*{type: "separator"}, - {text: "Déplacer les tâches vers...", submenu: []},*/ - - { type: 'separator' }, - { - text: Languages.t( - 'scenes.apps.tasks.list_modal.archive_all_tasks', - [], - 'Archiver toutes les tâches', - ), - hide: this.props.showArchived, - onClick: () => { - TasksService.archiveAllTasksInList(list, this.props.collectionKey); - }, - }, - { - text: Languages.t( - 'scenes.apps.tasks.list_modal.remove_archived_tasks', - [TasksService.getTasksInList(list.board_id, list.id, true).length], - 'Supprimer les archivées ($1)', - ), - className: 'error', - onClick: () => { - TasksService.removeAllTasksInList(list, true, this.props.collectionKey); - }, - }, - { - text: Languages.t('scenes.apps.tasks.list_modal.remove'), - hide: this.props.showArchived, - className: 'error', - onClick: () => { - AlertManager.confirm(() => { - Collections.get('lists').remove(list, this.props.collectionKey); - }); - }, - }, - ); - } - } - var elementRect = window.getBoundingClientRect(this.options_dom); - elementRect.x = elementRect.x || elementRect.left; - elementRect.y = elementRect.y || elementRect.top; - MenusManager.openMenu(menu, elementRect, 'right'); - } - - shouldComponentUpdate() { - if (this.retry_update) clearTimeout(this.retry_update); - if (TasksService.paused_notify[this.props.board.id]) { - this.retry_update = setTimeout(() => { - this.setState({}); - }, 1000); - return false; - } - - this.did_fade_in = true; - return true; - } - - newTask(task) { - var list = Collections.get('tasks').editCopy({}); - list.title = task.title; - list.archived = false; - list.board_id = this.props.board.id; - list.list_id = this.props.list.id; - list.order = TasksService.newIndexAfter('tasks_' + this.props.list.id, -1); - Collections.get('tasks').save(list, this.props.collectionKey); - } - - render() { - var list = this.props.list; - - var tasks = TasksService.getTasksInList( - list.board_id, - list.id, - this.props.showArchived ? true : false, - ); - TasksService.setElementIndexPool( - 'tasks_' + list.id, - Collections.get('tasks').findBy({ board_id: this.props.board.id, list_id: list.id }), - ); - - return ( -
- - {(provided, snapshot) => ( -
-
-
- - - {list.title || '-'} - - - { - this.options_dom = node; - }} - className="options" - type="ellipsis-h" - onClick={evt => this.listOptions(evt)} - /> -
- - {this.props.canCreate && this.newTask(task)} />} - - - {(provided, snapshot) => ( -
- - {(tasks || []) - .sort( - (a, b) => - TasksService.getElementIndex(a, 'tasks_' + a.list_id) - - TasksService.getElementIndex(b, 'tasks_' + b.list_id), - ) - .map((item, index) => ( - - ))} - - {(tasks || []).length == 0 && ( - - {this.state.i18n.t('scenes.apps.tasks.no_tasks')} - - )} - - {(tasks || []).length > 0 && provided.placeholder} - -
- )} -
-
-
- )} -
-
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/list/list.scss b/twake/frontend/src/app/views/applications/tasks/board/list/list.scss deleted file mode 100755 index 66576b26..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/list/list.scss +++ /dev/null @@ -1,181 +0,0 @@ -.board .list { - display: inline-block; - height: 100%; - vertical-align: top; - position: relative; - - .list_draggable_parent { - height: 100%; - overflow: visible; - display: flex; - align-items: stretch; - } - - .scrollable_task_list { - max-height: 100%; - overflow: scroll; - flex: 1; - position: relative; - } - - .list_draggable { - width: 280px; - max-height: 100%; - overflow: hidden; - position: relative; - display: flex; - flex-direction: column; - border-radius: var(--border-radius-base); - margin-right: 16px; - transition: box-shadow 0.2s, transform 0.2s !important; - - &.isDragging:active { - transform: rotateZ(3deg); - } - - &:hover { - .list_header .options { - display: block; - } - } - - .list_header { - width: 100%; - display: block; - box-sizing: border-box; - margin-bottom: 0; - position: relative; - - .list_title { - padding: 4px 8px; - position: relative; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - max-width: 60%; - display: inline-block; - line-height: 24px; - - .list_title_background { - position: absolute; - width: 100%; - height: 100%; - opacity: 0.15; - top: 0; - left: 0; - border-radius: var(--border-radius-large); - } - } - - .list_color { - width: calc(100% + 2px); - height: 3px; - border-radius: var(--border-radius-base); - top: -1px; - position: absolute; - left: -1px; - } - - img.emojione { - margin-right: 6px; - margin-top: -4px; - } - - .options { - display: none; - float: right; - margin: 0px; - color: var(--black); - font-size: 20px; - margin-top: 4px; - line-height: normal; - cursor: pointer; - - &:hover { - opacity: 0.8; - } - } - } - - .add_task { - margin-bottom: 8px; - padding-top: 0px; - display: flex; - transition: opacity 0.2s, height 0.2s; - border-radius: var(--border-radius-large); - background: var(--grey-background); - padding-right: 4px; - &:hover { - background: var(--primary-background); - } - - button { - margin-top: 4px; - } - - input { - flex: 1; - margin-right: 8px; - } - - &.unselected { - &:hover { - background: var(--grey-background); - color: var(--black); - } - background: transparent; - border-radius: var(--border-radius-base); - font-size: 14px; - line-height: 32px; - padding: 0 8px; - color: var(--grey-dark); - cursor: pointer; - } - } - - .droppable { - flex: 1; - transition: padding-bottom 0.2s; - max-height: calc(100% - 80px); - height: auto; - - .empty { - height: 70px; - padding: 16px; - padding-top: 20px; - box-sizing: border-box; - font-size: 12px; - border-radius: 2px; - text-align: center; - color: var(--grey-dark); - display: inline-block; - width: 100%; - transition: all 0.2s; - } - } - } -} - -.list.done { - margin: 0; - background: #eee; - padding: 0 10px; - - .list_header { - border-top: 0px; - } - - .list_header { - margin-bottom: 10px; - } - - .task { - opacity: 0.5; - transition: all 0.2s; - - &:hover, - &.selected { - opacity: 1; - } - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/task/Modal.scss b/twake/frontend/src/app/views/applications/tasks/board/task/Modal.scss deleted file mode 100755 index d80d45db..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/task/Modal.scss +++ /dev/null @@ -1,135 +0,0 @@ -.taskModal { - .title { - font-size: 22px; - margin-bottom: 8px; - .text { - margin-top: 8px; - font-size: 12px; - font-weight: normal; - color: var(--grey-dark); - } - } - - .date.subtitle, - .location.subtitle, - .reminders.subtitle { - color: var(--grey-dark); - } - - .date_and_type { - display: flex; - .select { - min-width: 25%; - flex: 1; - max-width: 140px; - margin-right: 8px; - } - .date_selector_full { - & > div { - vertical-align: top; - } - } - } - - .participants > .menu-list { - padding: 0; - margin: 0 -16px; - width: calc(100% + 32px); - } - - .task_type { - display: inline-block; - height: 32px; - padding: 0 8px; - margin-right: 8px; - line-height: 32px; - vertical-align: middle; - background: var(--white); - border-radius: var(--border-radius-base); - border: 1px solid var(--grey-background); - box-sizing: border-box; - font-size: 14px; - padding-left: 4px; - .icon-unicon { - color: var(--grey-dark); - } - } - - .checklist { - .progress_bar_container { - display: flex; - margin-bottom: 8px; - span { - width: 40px; - font-size: 12px; - color: var(--grey-dark); - } - .progress_bar { - background: var(--grey-background); - border-radius: var(--border-radius-base); - height: 8px; - flex: 1; - overflow: hidden; - position: relative; - top: 4px; - .progress { - background: var(--primary); - position: absolute; - top: 0; - left: 0; - height: 8px; - transition: width 0.2s; - } - } - } - - .checklist_element_editor { - flex: 1; - margin-top: -4px; - } - - .checklist-row { - min-height: 24px; - margin-bottom: 0px; - margin-top: 0px; - display: flex; - font-size: 13px; - - .edit-task.icon-unicon { - opacity: 0; - font-size: 14px; - line-height: normal !important; - top: 2px; - position: relative; - margin-left: 4px !important; - } - &:hover { - .edit-task { - opacity: 1; - } - } - .checkbox { - top: 0px; - position: relative; - margin-right: 8px; - } - span { - top: 2px; - position: relative; - cursor: pointer; - } - .trash.icon-unicon, - .edit-task.icon-unicon { - cursor: pointer; - line-height: 24px; - margin-left: 8px; - &:hover { - color: var(--primary); - &.trash { - color: var(--red); - } - } - } - } - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/task/Task.jsx b/twake/frontend/src/app/views/applications/tasks/board/task/Task.jsx deleted file mode 100755 index ad88c3fa..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/task/Task.jsx +++ /dev/null @@ -1,168 +0,0 @@ -/* eslint-disable react/prop-types */ -import React, { Component } from 'react'; - -import Languages from 'app/features/global/services/languages-service'; - -import { Draggable } from 'react-beautiful-dnd'; - -import './Task.scss'; -import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import TaskDetails from './TaskDetails.jsx'; -import MediumPopupManager from 'app/components/modal/modal-manager'; -import Icon from 'app/components/icon/icon.jsx'; -import UserListManager from 'components/user-list-manager/user-list-manager'; -import TagPicker from 'components/tag-picker/tag-picker.jsx'; -import AttachmentPicker from 'components/attachment-picker/attachment-picker.jsx'; - -export default class Task extends Component { - constructor(props) { - super(props); - this.state = { - i18n: Languages, - }; - Languages.addListener(this); - Collections.get('tasks').addListener(this); - Collections.get('tasks').listenOnly(this, [props.task.front_id]); - } - componentWillUnmount() { - Languages.removeListener(this); - Collections.get('tasks').removeListener(this); - } - - render() { - var task = this.props.task; - - if (!task) { - return ''; - } - - return ( - - {(provided, snapshot) => ( -
-
{ - MediumPopupManager.open( - , - { size: { width: 600 } }, - ); - }} - className={ - 'task task_draggable noselect ' + (snapshot.isDragging ? 'isDragging ' : '') - } - > -
-
- {task.title} -    - -
-
- -
-
- - {!!task.attachments && task.attachments.length > 0 && ( - - )} - - {!!( - task.description || - (task.attachments && task.attachments.length) || - (!!task.checklist && task.checklist.length > 0) - ) && ( -
- {!!task.description && - task.description.original_str && - task.description.original_str.trim() && ( -
- -
- )} - {!!task.attachments && task.attachments.length > 0 && ( -
- -
- )} - {!!task.start && task.start > 0 && ( -
- -
- )} - {!!task.before && task.before > 0 && ( -
- -
- )} - {!!task.checklist && task.checklist.length > 0 && ( -
- - - {' '} - {parseInt( - (100 * - task.checklist.map(e => (e.value ? 1 : 0)).reduce((a, b) => a + b)) / - task.checklist.length, - )} - % - -
- )} -
- )} - -
- -
- - {!!task.participants && task.participants.length > 0 && ( -
- { - return { id: participant.user_id_or_mail }; - })} - readOnly - collapsed - medium - /> -
- )} -
-
-
- )} - - ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/task/Task.scss b/twake/frontend/src/app/views/applications/tasks/board/task/Task.scss deleted file mode 100755 index a127f990..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/task/Task.scss +++ /dev/null @@ -1,150 +0,0 @@ -.task_draggable_parent { - margin-bottom: 8px; -} - -.task_draggable_parent.archived { - opacity: 0.5; -} - -.task_draggable { - white-space: pre-wrap; - padding: 16px; - border: 1px solid var(--grey-background); - border-radius: var(--border-radius-base); - font-size: 14px; - transition: box-shadow 0.2s, transform 0.2s; - background: var(--white); - - &.isDragging:active { - box-shadow: 0 0 16px rgba(0, 0, 0, 0.2); - border: 1px solid var(--white); - border-radius: var(--border-radius-base); - transform: rotateZ(3deg); - } - - .attachmentPicker { - margin-top: 8px; - width: 100%; - .attachments, - .attachments .attachment, - .attachments .attachment > .file, - .attachments .attachment > .file .preview { - width: 100%; - margin: 0px; - } - } - - .task.ant-card { - .ant-card-body { - padding: 14px; - } - - .addon_icon { - float: right; - margin-left: 5px; - - .anticon { - line-height: 20px; - } - } - } - - .task.selected { - border-color: #0487e7; - } -} - -.task { - position: relative; - - .tags-in-name { - display: none; - } - - .task_options { - display: none; - position: absolute; - top: 8px; - right: 8px; - height: 24px; - background: var(--grey-background); - border-radius: var(--border-radius-base); - line-height: 24px; - cursor: pointer; - &:hover { - background: var(--primary-background); - } - } - &:hover .task_options { - display: block; - } - - .task_line_2 { - float: left; - vertical-align: top; - padding: 5px 0; - padding-bottom: 0; - height: 18px; - margin-top: 8px; - } - - .task_line_tags { - margin-bottom: -8px; - margin-top: 8px; - } - - .task_users { - float: right; - vertical-align: top; - height: 26px; - margin-top: 8px; - } - - .task_info { - display: inline; - color: var(--black); - line-height: 16px; - font-weight: 500; - font-size: 12px; - vertical-align: top; - margin-right: 4px; - i { - color: var(--grey-dark); - &:before { - margin-left: 0px; - } - } - span, - i { - vertical-align: top; - line-height: 18px; - } - } - - .text { - font-size: 14px; - } - - .isDone { - display: none; - position: absolute; - bottom: 14px; - right: 14px; - font-size: 14px; - border: solid 1px rgba(0, 0, 0, 0.6); - border-radius: 50%; - padding: 2px; - background: #fff; - box-shadow: 0 0 10px 10px rgba(255, 255, 255, 1); - } - .isDone:hover { - cursor: pointer; - color: rgb(81, 183, 91); - border-color: rgb(81, 183, 91); - } -} -.task:hover { - .isDone { - display: block; - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/task/TaskDetails.jsx b/twake/frontend/src/app/views/applications/tasks/board/task/TaskDetails.jsx deleted file mode 100755 index 999a269c..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/task/TaskDetails.jsx +++ /dev/null @@ -1,240 +0,0 @@ -/* eslint-disable react/prop-types */ -import React, { Component } from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import UserListManager from 'components/user-list-manager/user-list-manager'; -import Button from 'components/buttons/button.jsx'; -import Menu from 'components/menus/menu.jsx'; -import TagPicker from 'components/tag-picker/tag-picker.jsx'; -import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; -import TaskEditor from './TaskEditor.jsx'; -import MediumPopupManager from 'app/components/modal/modal-manager'; -import Checklist from './parts/Checklist.jsx'; -import { - ObjectModal, - ObjectModalFormTitle, - ObjectModalTitle, -} from 'components/object-modal/deprecated-object-modal.jsx'; -import Twacode from 'components/twacode/twacode'; -import AttachmentPicker from 'components/attachment-picker/attachment-picker.jsx'; -import moment from 'moment'; -import './Modal.scss'; - -export default class TaskDetails extends Component { - constructor() { - super(); - this.state = { - i18n: Languages, - }; - Languages.addListener(this); - } - componentWillUnmount() { - this.update_timeout && clearTimeout(this.update_timeout); - Languages.removeListener(this); - } - remove() { - TasksService.remove(this.props.task, this.props.collectionKey); - } - archive() { - TasksService.archive(this.props.task, this.props.collectionKey); - } - unarchive() { - TasksService.unarchive(this.props.task, this.props.collectionKey); - } - changeTags(tags) { - this.props.task.tags = tags; - Collections.get('tasks').updateObject(this.props.task); - this.setState({}); - this.changeTask(); - } - changeParticipants(pa) { - this.props.task.participants = pa; - Collections.get('tasks').updateObject(this.props.task); - this.changeTask(); - } - changeChecklist(cl) { - this.props.task.checklist = cl; - Collections.get('tasks').updateObject(this.props.task); - this.changeTask(); - } - changeTask(notify) { - if (notify || notify === undefined) { - this.update_timeout && clearTimeout(this.update_timeout); - this.update_timeout = setTimeout(() => { - Collections.get('tasks').save(this.props.task, this.props.collectionKey); - }, 1000); - this.setState({}); - } - } - edit() { - var task = this.props.task; - TasksService.edited = Collections.get('tasks').editCopy(task); - MediumPopupManager.open( - { - console.log(task); - }} - />, - { size: { width: 600 } }, - ); - } - render() { - var task = this.props.task; - var readonly = false; - - var list = Collections.get('lists').find(task.list_id) || {}; - - return ( - MediumPopupManager.closeAll()} - onEdit={ - readonly - ? false - : () => { - this.edit(); - } - } - footer={ -
- {!readonly && ( -
- - - - {!task.archived && ( - - )} -
- )} -
- } - title={ -
- {task.title || ''} - {list.title && ( -
- {Languages.t('scenes.apps.tasks.board.tasks.in_list', [], 'In list')}{' '} - {list.title} -
- )} -
- } - > - { - this.changeTags(values); - }} - /> - - {!!task.description && - task.description.original_str && - task.description.original_str.trim() && ( -
- - -
- )} - - - { - this.changeChecklist(val); - }} - /> - - - { - return { id: participant.user_id_or_mail }; - })} - scope="workspace" - onUpdate={ids_mails => { - this.changeParticipants( - ids_mails.map(id => { - return { user_id_or_mail: id }; - }), - ); - Menu.closeAll(); - }} - /> - - - - - - - {!!task.start && task.start > 0 && ( - - {Languages.t('scenes.apps.tasks.board.starts', [], 'Démarre le')}{' '} - {moment(new Date(task.start * 1000)).format('L LT')}.{' '} - - )} -
- {!!task.before && task.before > 0 && ( - - {Languages.t('scenes.apps.tasks.board.ends', [], 'À terminer avant le')}{' '} - {moment(new Date(task.before * 1000)).format('L LT')}.{' '} - - )} -
- -
-
-
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/task/TaskEditor.jsx b/twake/frontend/src/app/views/applications/tasks/board/task/TaskEditor.jsx deleted file mode 100755 index e51262d2..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/task/TaskEditor.jsx +++ /dev/null @@ -1,259 +0,0 @@ -/* eslint-disable react/prop-types */ -import React from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import Button from 'components/buttons/button.jsx'; -import ReminderSelector from 'components/reminder-selector/reminder-selector.jsx'; -import UserListManager from 'components/user-list-manager/user-list-manager'; -import Menu from 'components/menus/menu.jsx'; -import Input from 'components/inputs/input.jsx'; -import DateSelectorInput from 'components/calendar/date-picker.jsx'; -import TimeSelector from 'components/calendar/time-selector.jsx'; -import Checkbox from 'app/components/inputs/deprecated_checkbox.jsx'; -import MediumPopupManager from 'app/components/modal/modal-manager'; -import Checklist from './parts/Checklist.jsx'; -import TagPicker from 'components/tag-picker/tag-picker.jsx'; -import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; -import { - ObjectModal, - ObjectModalFormTitle, -} from 'components/object-modal/deprecated-object-modal.jsx'; -import PseudoMarkdownCompiler from 'app/features/global/services/pseudo-markdown-compiler-service'; -import AttachmentPicker from 'components/attachment-picker/attachment-picker.jsx'; - -import './Modal.scss'; - -export default class TaskEditor extends React.Component { - constructor(props) { - super(props); - this.state = { - i18n: Languages, - }; - Languages.addListener(this); - Collections.get('tasks').addListener(this); - // Collections.get("tasks").listenOnly(this, [props.task.front_id]); - } - UNSAFE_componentWillMount() { - TasksService.preview = null; - } - componentWillUnmount() { - Languages.removeListener(this); - Collections.get('tasks').removeListener(this); - } - remove() { - TasksService.remove(this.props.task, this.props.collectionKey); - } - archive() { - TasksService.archive(this.props.task, this.props.collectionKey); - } - unarchive() { - TasksService.unarchive(this.props.task, this.props.collectionKey); - } - change(key, value) { - this.props.task[key] = value; - Collections.get('tasks').notify(); - } - render() { - var task = this.props.task; - task.description = task.description || ''; - var description = task.description; - - if ((description || {}).original_str === '') { - description = ''; - } else if (typeof description == 'object') { - description = PseudoMarkdownCompiler.compileToText(description); - } - - return ( - MediumPopupManager.closeAll()} - footer={ -
- - - -
- } - > - - { - this.change('title', evt.target.value); - }} - className="full_width" - big - /> - -
- { - this.change('tags', values, true); - }} - /> -
- - - { - this.change('description', evt.target.value); - }} - className="full_width" - /> - - - { - this.change('checklist', val); - }} - /> - - - { - return { id: participant.user_id_or_mail }; - })} - scope="workspace" - onUpdate={ids_mails => { - this.change( - 'participants', - ids_mails.map(id => { - return { user_id_or_mail: id }; - }), - ); - Menu.closeAll(); - }} - /> - - - this.change('attachments', attachments)} - /> - - - - 0} - onChange={v => { - this.change('before', v ? new Date().setHours(10, 0, 0) / 1000 + 60 * 60 * 24 * 7 : 0); - }} - className="small" - label={Languages.t('scenes.apps.tasks.board.tasks.use_deadline', [], 'Use deadline')} - /> -
- {!!task.before && task.before > 0 && ( -
- this.change('before', value)} - className="small bottom-margin right-margin" - /> - this.change('before', value)} - className="small bottom-margin" - /> -
- )} - {!!task.before && task.before > 0 && ( - this.change('notifications', reminders)} - /> - )} - -
- 0} - onChange={v => { - this.change('start', v ? new Date().setHours(10, 0, 0) / 1000 + 60 * 60 * 24 : 0); - }} - className="small" - label={Languages.t('scenes.apps.tasks.board.tasks.use_starttime', [], 'Use start time')} - /> -
- {!!task.start && task.start > 0 && ( -
- this.change('start', value)} - className="small bottom-margin right-margin" - /> - this.change('start', value)} - className="small bottom-margin" - /> -
- )} - -
-
-
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/task/TaskElement.jsx b/twake/frontend/src/app/views/applications/tasks/board/task/TaskElement.jsx deleted file mode 100755 index 5f99ab94..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/task/TaskElement.jsx +++ /dev/null @@ -1,62 +0,0 @@ -import React, { Component } from 'react'; -import Icon from 'app/components/icon/icon.jsx'; -import './Task.scss'; - -export default class TaskElement extends React.Component { - constructor() { - super(); - - this.state = {}; - } - render() { - var task = this.props.task; - - if (!task) { - return ''; - } - return ( -
- {task.name} - - {task.like != 0 && ( -
- {task.like} -
- )} - {task.weight > 1 && ( -
- {task.weight} -
- )} - {task.to > 0 && ( -
- -
- )} - {task.from > 0 && ( -
- -
- )} - {task.description && ( -
- -
- )} - {this.state.boardService && task.list != this.state.boardService.doneId && ( -
- this.state.boardService.moveTask(task.id, this.state.boardService.doneId, 0) - } - > - -
- )} -
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/board/task/parts/Checklist.jsx b/twake/frontend/src/app/views/applications/tasks/board/task/parts/Checklist.jsx deleted file mode 100755 index ba6de1a2..00000000 --- a/twake/frontend/src/app/views/applications/tasks/board/task/parts/Checklist.jsx +++ /dev/null @@ -1,122 +0,0 @@ -/* eslint-disable react/prop-types */ -import React from 'react'; -import Icon from 'app/components/icon/icon.jsx'; -import Checkbox from 'app/components/inputs/deprecated_checkbox.jsx'; -import InputEnter from 'components/inputs/input-enter.jsx'; -import Button from 'components/buttons/button.jsx'; -import Languages from 'app/features/global/services/languages-service'; - - -export default class Checklist extends React.Component { - constructor() { - super(); - this.state = { - checklist_edit: {}, - }; - } - onChange(cl) { - this.props.onChange && this.props.onChange(cl); - this.setState({}); - } - render() { - var checklist = this.props.value || []; - var progress = - checklist.length > 0 - ? parseInt( - (100 * checklist.map(e => (e.value ? 1 : 0)).reduce((a, b) => a + b)) / - checklist.length, - ) - : 0; - - return ( -
- {checklist.length > 0 && ( -
- {progress}% -
-
-
-
- )} - - { - (checklist || []).map((item, i) => { - if (item) { - return ( -
-
- { - item.value = v; - this.onChange(checklist); - }} - /> - {!(this.state.checklist_edit === i) && {item.text}} - {this.state.checklist_edit === i && !this.props.readOnly && ( -
- { - item.text = v.target.value; - this.setState({}); - }} - onEnter={() => { - this.setState({ checklist_edit: -1 }); - this.onChange(checklist); - }} - /> -
- )} - {!this.props.readOnly && ( - { - this.setState({ - checklist_edit: this.state.checklist_edit === i ? -1 : i, - }); - this.setState({}); - }} - /> - )} -
- {!this.props.readOnly && ( - { - checklist.splice(i, 1); - this.onChange(checklist); - }} - /> - )} -
- ); - } - }) - } - {!this.props.readOnly && ( - - )} -
- ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/tasks-content.jsx b/twake/frontend/src/app/views/applications/tasks/tasks-content.jsx deleted file mode 100755 index 307534aa..00000000 --- a/twake/frontend/src/app/views/applications/tasks/tasks-content.jsx +++ /dev/null @@ -1,368 +0,0 @@ -/* eslint-disable react/prop-types */ -/* eslint-disable react/jsx-key */ -import React, { Component } from 'react'; - -import UnconfiguredTab from './unconfigured-tab.jsx'; -import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import Emojione from 'components/emojione/emojione'; -import Loader from 'components/loader/loader.jsx'; -import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; -import WorkspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; -import Workspaces from 'app/deprecated/workspaces/workspaces.jsx'; -import UserService from 'app/features/users/services/current-user-service'; -import Rounded from 'components/inputs/rounded.jsx'; -import Menu from 'components/menus/menu.jsx'; -import BoardEditor from './board/BoardEditor.jsx'; -import MoreIcon from '@material-ui/icons/MoreHorizOutlined'; -import AlertManager from 'app/features/global/services/alert-manager-service'; -import { getCompanyApplications } from 'app/features/applications/state/company-applications'; -import ConnectorsListManager from 'components/connectors-list-manager/connectors-list-manager.jsx'; -import popupManager from 'app/deprecated/popupManager/popupManager.js'; -import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.jsx'; -import Globals from 'app/features/global/services/globals-twake-app-service'; -import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; -import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; -import Groups from 'app/deprecated/workspaces/groups.js'; - -import Board from './board/Board.jsx'; - -import './tasks.scss'; -import UserListManager from 'app/components/user-list-manager/user-list-manager'; -import RouterService from 'app/features/router/services/router-service'; - -export default class Tasks extends Component { - constructor(props) { - super(props); - this.props = props; - - this.state = {}; - - Languages.addListener(this); - TasksService.addListener(this); - WorkspacesUsers.addListener(this); - const { workspaceId, channelId } = RouterService.getStateFromRoute(); - if (workspaceId && channelId) { - this.boards_collection_key = 'boards_' + workspaceId; - - Collections.get('boards').addListener(this); - Collections.get('boards').addSource( - { - http_base_url: 'tasks/board', - http_options: { - channel_id: channelId, - workspace_id: workspaceId, - }, - websockets: [{ uri: 'boards/' + workspaceId, options: { type: 'board' } }], - }, - this.boards_collection_key, - ); - } - } - - componentWillUnmount() { - Languages.removeListener(this); - TasksService.removeListener(this); - WorkspacesUsers.removeListener(this); - - Collections.get('boards').removeSource(this.boards_collection_key); - } - - getSortingValue(user_id) { - var last_activity = - (WorkspacesUsers.getUsersByWorkspace(Workspaces.currentWorkspaceId)[user_id] || {}) - .last_access || 0; - var val = (new Date().getTime() / 1000 - last_activity) / (60 * 60 * 12); - return 0 - val; - } - - render() { - var current_board = null; - if (((this.props.tab || {}).configuration || {}).board_id) { - current_board = Collections.get('boards').find(this.props.tab.configuration.board_id); - } else if (TasksService.current_board_by_workspace[Workspaces.currentWorkspaceId]) { - if ( - TasksService.current_board_by_workspace[Workspaces.currentWorkspaceId].split('_')[0] === - 'user' - ) { - var user_id = - TasksService.current_board_by_workspace[Workspaces.currentWorkspaceId].split('_')[1]; - var user = Collections.get('users').find(user_id) || {}; - current_board = { - id: TasksService.current_board_by_workspace[Workspaces.currentWorkspaceId], - user_image: UserService.getThumbnail(user), - title: UserService.getFullName(user), - }; - } else { - current_board = Collections.get('boards').find( - TasksService.current_board_by_workspace[Workspaces.currentWorkspaceId], - ); - } - } - - var boards = Collections.get('boards').findBy({ workspace_id: Workspaces.currentWorkspaceId }); - var loading = - !Collections.get('boards').did_load_first_time[this.boards_collection_key] && - boards.length === 0; - - if ( - this.props.tab != null && - (!this.props.tab.configuration || this.props.tab.configuration.board_id === undefined) && - !loading && - !current_board - ) { - return ( - - ); - } - - if (current_board && current_board.id) { - Globals.window.location.hash = '#' + current_board.id; - } else { - Globals.window.location.hash = '#'; - } - - return ( - <> - {loading && ( -
- -
- )} - - {!loading && !current_board && ( -
-
-
- {Languages.t('scenes.apps.tasks.boards', [], 'Boards')} -
- -
- {Languages.t('components.workspace.list_manager.all', [], 'All')} -
- - {boards.map(board => { - return ( -
{ - TasksService.openBoard(board.id); - }} - > -
- {board.emoji && } - {board.title} - - {WorkspaceUserRights.hasWorkspacePrivilege() && ( - { - return ( - - ); - }, - }, - ], - }, - { - text: Languages.t('general.delete', [], 'Delete'), - className: 'error', - onClick: () => { - AlertManager.confirm(() => { - Collections.get('boards').remove( - board, - this.boards_collection_key, - ); - }); - }, - }, - { type: 'separator' }, - { - type: 'menu', - text: Languages.t( - 'scenes.apps.tasks.connectors_menu', - 'Connecteurs...', - ), - submenu: [ - { - type: 'react-element', - reactElement: () => { - var apps = getCompanyApplications(Groups.currentGroupId).filter( - () => false, - ); - if (apps.length > 0) { - return ( - getApplication(id)) - .filter(item => item)} - configurable={item => - ((item.display || {}).configuration || {}) - .can_configure_in_tasks - } - onChange={ids => { - board.connectors = ids; - Collections.get('boards').save( - board, - this.boards_collection_key, - ); - }} - onConfig={app => { - this.configureCalendarConnector(app, board); - }} - /> - ); - } - return ( -
- {Languages.t( - 'scenes.apps.tasks.no_connectors_menu_text', - "Vous n'avez aucun connecteur capable de se connecter à un calendrier.", - )} -
- ); - }, - }, - { type: 'separator' }, - { - type: 'menu', - text: Languages.t( - 'scenes.apps.tasks.connectors_search_menu', - 'Chercher des connecteurs...', - ), - onClick: () => { - popupManager.open( - , - true, - 'workspace_parameters', - ); - }, - }, - ], - }, - ]} - className="options" - > - -
- )} -
-
- {board.active_tasks || '0'}{' '} - {Languages.t('scenes.apps.tasks.active_tasks', 'tâches actives')} -
-
- ); - })} - - {WorkspaceUserRights.hasWorkspacePrivilege() && ( - { - return ( - - ); - }, - }, - ]} - > - - - )} -
- {Languages.t('scenes.apps.tasks.my_tasks', 'Mes tâches')} - -
- TasksService.openBoard('user_' + ids[0])} - /> -
-
- -
-
- )} - - {current_board && ( -
- -
- )} - - ); - } -} diff --git a/twake/frontend/src/app/views/applications/tasks/tasks.scss b/twake/frontend/src/app/views/applications/tasks/tasks.scss deleted file mode 100755 index 8b60dc95..00000000 --- a/twake/frontend/src/app/views/applications/tasks/tasks.scss +++ /dev/null @@ -1,184 +0,0 @@ -.boardPicker { - max-height: 250px; - overflow: auto; - width: 100%; - - .board_frame { - vertical-align: top; - width: 216px; - height: 60px; - border: 1px solid var(--grey-background); - border-radius: var(--border-radius-base); - margin-bottom: 16px; - margin-right: 16px; - display: inline-block; - padding: 16px; - box-sizing: border-box; - position: relative; - cursor: pointer; - - &:hover { - border-color: #fff; - box-shadow: 4px 4px 16px 0 #00000022; - } - - .board_name { - line-height: 24px; - height: 24px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - img.emojione { - margin-right: 8px; - margin-top: -4px; - } - - .board_info { - display: none; - } - } -} - -.tasks_app { - height: 100%; - width: 100%; - left: 0; - right: 0; - flex-direction: column; - padding: 16px 24px; - box-sizing: border-box; - overflow-y: auto; - display: flex; - - .app_title { - .emoji-container { - margin-right: 6px; - margin-top: -4px; - } - .user_head { - display: inline-block; - vertical-align: middle; - margin-right: 8px; - margin-top: -4px; - } - } - - .board_add { - width: 22px; - height: 22px; - line-height: 20px; - padding-top: 2px; - vertical-align: middle; - opacity: 0.8; - margin-top: 35px; - &:hover { - opacity: 1; - } - .m-icon-small { - font-size: 18px !important; - } - } - - .board_frame { - vertical-align: top; - width: 216px; - height: 90px; - border: 1px solid var(--grey-background); - border-radius: var(--border-radius-base); - margin-bottom: 16px; - margin-right: 16px; - display: inline-block; - padding: 16px; - box-sizing: border-box; - position: relative; - cursor: pointer; - - &:hover { - border-color: #fff; - box-shadow: 4px 4px 16px 0 #00000022; - } - - .board_name { - line-height: 24px; - height: 24px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - - img.emojione { - margin-right: 6px; - margin-top: -4px; - } - - .board_info { - font-size: 14px; - color: var(--grey-dark); - } - - .options { - opacity: 0; - position: absolute; - right: 16px; - top: 16px; - .m-icon-small { - font-size: 20px !important; - } - } - &:hover { - .options { - opacity: 1; - } - } - } - - .team_member { - display: inline-flex; - text-align: center; - overflow: hidden; - text-overflow: ellipsis; - width: 176px; - height: 42px; - margin-right: 16px; - margin-bottom: 16px; - border-radius: var(--border-radius-base); - cursor: pointer; - - .user_head { - display: inline-block; - } - - .team_username { - flex: 1; - text-align: left; - margin-left: 8px; - min-width: 0px; - .name { - margin-top: 2px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-weight: bold; - font-size: 16px; - margin-bottom: 4px; - } - .username { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-size: 12px; - color: var(--grey-dark); - } - } - } -} - -.unconfigured_tab { - width: 100%; - max-width: 400px; - text-align: center; - margin: auto; - margin-top: 10vh; -} diff --git a/twake/frontend/src/app/views/applications/tasks/tasks.tsx b/twake/frontend/src/app/views/applications/tasks/tasks.tsx deleted file mode 100644 index 3099603e..00000000 --- a/twake/frontend/src/app/views/applications/tasks/tasks.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { ChannelType } from 'app/features/channels/types/channel'; -import { TabType } from 'app/features/tabs/types/tab'; -import React from 'react'; -import { ViewConfiguration } from '../../../features/router/services/app-view-service'; -import { useTab } from '../../../features/tabs/hooks/use-tabs'; -import TasksContent from './tasks-content'; - -type Props = { - channel: ChannelType; - options: ViewConfiguration; -}; - -export default (props: Props) => { - const tabId = props.options?.context?.tabId; - const { tab, save } = useTab(tabId); - - return ( - { - save({ ...tab, configuration }); - }} - /> - ); -}; diff --git a/twake/frontend/src/app/views/applications/tasks/unconfigured-tab.jsx b/twake/frontend/src/app/views/applications/tasks/unconfigured-tab.jsx deleted file mode 100755 index c8498310..00000000 --- a/twake/frontend/src/app/views/applications/tasks/unconfigured-tab.jsx +++ /dev/null @@ -1,92 +0,0 @@ -/* eslint-disable react/prop-types */ -import React, { Component } from 'react'; - -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import Languages from 'app/features/global/services/languages-service'; -import BoardPicker from './board-picker/board-picker.jsx'; -import Menu from 'components/menus/menu.jsx'; -import Button from 'components/buttons/button.jsx'; -import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; -import WorkspaceService from 'app/deprecated/workspaces/workspaces'; -import RouterService from 'app/features/router/services/router-service'; - -export default class UnconfiguredTab extends Component { - constructor() { - super(); - - this.state = { - i18n: Languages, - }; - - Languages.addListener(this); - } - componentWillUnmount() { - Languages.removeListener(this); - } - initInBoard(board) { - if (!board.id) { - Menu.closeAll(); - return; - } - if (this.props.saveTab) this.props.saveTab({ board_id: board.id }); - Menu.closeAll(); - } - createFromChannel() { - if (this.creating) { - return; - } - this.creating = true; - var board = Collections.get('boards').editCopy({}); - board.workspace_id = RouterService.getStateFromRoute().workspaceId; - board.title = this.props.channel.name; - board.emoji = this.props.channel.icon; - Collections.get('boards').save(board, this.props.collectionKey, board => { - this.creating = false; - this.initInBoard(board); - }); - } - render() { - return ( -
-
-
{this.props.tab.name}
-
- {Languages.t( - 'scenes.apps.tasks.unconfigured_tab', - [], - "Cet onglet n'est pas encore configuré.", - )} -
- - {AccessRightsService.getCompanyLevel(WorkspaceService.currentGroupId) !== 'guest' && ( - <> -
- - - - this.initInBoard(board)} />, - }, - ]} - style={{ display: 'inline-block' }} - > - - - - )} -
-
- ); - } -} diff --git a/twake/frontend/src/app/views/client/app.tsx b/twake/frontend/src/app/views/client/app.tsx index 366a2c7c..7744161e 100755 --- a/twake/frontend/src/app/views/client/app.tsx +++ b/twake/frontend/src/app/views/client/app.tsx @@ -1,7 +1,7 @@ -import React, { Suspense } from 'react'; +import { Suspense } from 'react'; -import Client from 'app/views/client'; import InitService from 'app/features/global/services/init-service'; +import Client from 'app/views/client'; export default () => { const isAppReady = InitService.useWatcher(() => InitService.app_ready); diff --git a/twake/frontend/src/app/views/applications/drive/browser.tsx b/twake/frontend/src/app/views/client/body/drive/browser.tsx similarity index 73% rename from twake/frontend/src/app/views/applications/drive/browser.tsx rename to twake/frontend/src/app/views/client/body/drive/browser.tsx index 75f03fdc..cd0fa6ab 100644 --- a/twake/frontend/src/app/views/applications/drive/browser.tsx +++ b/twake/frontend/src/app/views/client/body/drive/browser.tsx @@ -14,7 +14,7 @@ import useRouterCompany from 'app/features/router/hooks/use-router-company'; import _ from 'lodash'; import { memo, Suspense, useCallback, useEffect, useRef, useState } from 'react'; import { atomFamily, useRecoilState, useSetRecoilState } from 'recoil'; -import { DrivePreview } from '../viewer/drive-preview'; +import { DrivePreview } from '../../viewer/drive-preview'; import { useOnBuildContextMenu } from './context-menu'; import { DocumentRow } from './documents/document-row'; import { FolderRow } from './documents/folder-row'; @@ -59,8 +59,7 @@ export default memo( loading: loadingParent, path, } = useDriveItem(parentId); - const { item: trash } = useDriveItem('trash'); - const { uploadTree, uploadFromUrl } = useDriveUpload(); + const { uploadTree } = useDriveUpload(); const loading = loadingParent || loadingParentChange; @@ -118,7 +117,8 @@ export default memo( return ( - uploadZoneRef.current?.open()} - addFromUrl={(url, name) => { - setCreationModalState({ parent_id: '', open: false }); - uploadFromUrl(url, name, { - companyId, - parentId, - }); - }} - /> @@ -156,33 +146,20 @@ export default memo(
- {document.location.origin.includes('canary') && access !== 'read' && !inPublicSharing && ( -
- - Welcome to the next version of Twake Drive. -
- Your documents are not migrated yet, you can switch back to{' '} - - https://web.twake.app - {' '} - to see all your documents. Documents added here will not be visible yet on - production but will be kept after the final migration. - -
- )} -
+
+ {access !== 'read' && ( {formatBytes(item?.size || 0)} used in this folder )} onBuildContextMenu(details)}> {' '} -
- {!(inTrash || access === 'read') && ( -
openItemModal()} - > - -
- )} - - {item?.id === 'trash' && ( -
- You are in the trash -
- -
-
- )} - {access !== 'read' && item?.id === 'root' && ( -
- Welcome to your company drive. -
- - {formatBytes(item?.size || 0)} - <Base> used, </Base> <Base>{formatBytes(trash?.size || 0)} in trash</Base> - -
-
- )} - {item?.id !== 'root' && item?.id !== 'trash' &&
} -
{folders.length > 0 && ( <> diff --git a/twake/frontend/src/app/views/applications/drive/components/public-icon.tsx b/twake/frontend/src/app/views/client/body/drive/components/public-icon.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/components/public-icon.tsx rename to twake/frontend/src/app/views/client/body/drive/components/public-icon.tsx diff --git a/twake/frontend/src/app/views/applications/drive/components/select-users.tsx b/twake/frontend/src/app/views/client/body/drive/components/select-users.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/components/select-users.tsx rename to twake/frontend/src/app/views/client/body/drive/components/select-users.tsx diff --git a/twake/frontend/src/app/views/applications/drive/context-menu.tsx b/twake/frontend/src/app/views/client/body/drive/context-menu.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/context-menu.tsx rename to twake/frontend/src/app/views/client/body/drive/context-menu.tsx diff --git a/twake/frontend/src/app/views/applications/drive/documents/common.tsx b/twake/frontend/src/app/views/client/body/drive/documents/common.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/documents/common.tsx rename to twake/frontend/src/app/views/client/body/drive/documents/common.tsx diff --git a/twake/frontend/src/app/views/applications/drive/documents/document-row.tsx b/twake/frontend/src/app/views/client/body/drive/documents/document-row.tsx similarity index 98% rename from twake/frontend/src/app/views/applications/drive/documents/document-row.tsx rename to twake/frontend/src/app/views/client/body/drive/documents/document-row.tsx index e721330d..6db57a7f 100644 --- a/twake/frontend/src/app/views/applications/drive/documents/document-row.tsx +++ b/twake/frontend/src/app/views/client/body/drive/documents/document-row.tsx @@ -15,7 +15,7 @@ import { useDrivePreview } from 'app/features/drive/hooks/use-drive-preview'; import { formatBytes } from 'app/features/drive/utils'; import fileUploadApiClient from 'app/features/files/api/file-upload-api-client'; import { useState } from 'react'; -import Avatar from '../../../../atoms/avatar'; +import Avatar from '../../../../../atoms/avatar'; import { PublicIcon } from '../components/public-icon'; import { CheckableIcon, DriveItemProps } from './common'; diff --git a/twake/frontend/src/app/views/applications/drive/documents/folder-row.tsx b/twake/frontend/src/app/views/client/body/drive/documents/folder-row.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/documents/folder-row.tsx rename to twake/frontend/src/app/views/client/body/drive/documents/folder-row.tsx diff --git a/twake/frontend/src/app/views/applications/drive/drive-item.tsx b/twake/frontend/src/app/views/client/body/drive/drive-item.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/drive-item.tsx rename to twake/frontend/src/app/views/client/body/drive/drive-item.tsx diff --git a/twake/frontend/src/app/views/applications/drive/header-path.tsx b/twake/frontend/src/app/views/client/body/drive/header-path.tsx similarity index 98% rename from twake/frontend/src/app/views/applications/drive/header-path.tsx rename to twake/frontend/src/app/views/client/body/drive/header-path.tsx index 4f8838df..90e50aea 100644 --- a/twake/frontend/src/app/views/applications/drive/header-path.tsx +++ b/twake/frontend/src/app/views/client/body/drive/header-path.tsx @@ -31,7 +31,7 @@ export const PathRender = ({ onClick: (id: string) => void; }) => { return ( - + <Title className="overflow-hidden whitespace-nowrap mr-2 pl-px inline-flex"> {(path || [])?.map((a, i) => ( <PathItem key={a.id} diff --git a/twake/frontend/src/app/views/client/body/drive/index.tsx b/twake/frontend/src/app/views/client/body/drive/index.tsx new file mode 100644 index 00000000..d6718045 --- /dev/null +++ b/twake/frontend/src/app/views/client/body/drive/index.tsx @@ -0,0 +1,26 @@ +import Browser from './browser'; +import { SelectorModal } from './modals/selector'; + +export type EmbedContext = { + companyId?: string; + workspaceId?: string; + channelId?: string; + tabId?: string; +}; + +export default ({ + initialParentId, + context, + inPublicSharing, +}: { + initialParentId?: string; + context?: EmbedContext; + inPublicSharing?: boolean; +}) => { + return ( + <> + <SelectorModal /> + <Browser initialParentId={initialParentId} inPublicSharing={inPublicSharing} /> + </> + ); +}; diff --git a/twake/frontend/src/app/views/applications/drive/modals/confirm-delete/index.tsx b/twake/frontend/src/app/views/client/body/drive/modals/confirm-delete/index.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/confirm-delete/index.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/confirm-delete/index.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/confirm-trash/index.tsx b/twake/frontend/src/app/views/client/body/drive/modals/confirm-trash/index.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/confirm-trash/index.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/confirm-trash/index.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/create/create-folder.tsx b/twake/frontend/src/app/views/client/body/drive/modals/create/create-folder.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/create/create-folder.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/create/create-folder.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/create/index.tsx b/twake/frontend/src/app/views/client/body/drive/modals/create/index.tsx similarity index 98% rename from twake/frontend/src/app/views/applications/drive/modals/create/index.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/create/index.tsx index a68a9d03..c28d57b9 100644 --- a/twake/frontend/src/app/views/applications/drive/modals/create/index.tsx +++ b/twake/frontend/src/app/views/client/body/drive/modals/create/index.tsx @@ -146,7 +146,7 @@ const CreateModalOption = (props: { icon: ReactNode; text: string; onClick: () = return ( <div onClick={props.onClick} - className="flex flex-row p-4 bg-slate-100 hover:bg-slate-200 cursor-pointer rounded-md m-2" + className="flex flex-row p-4 bg-zinc-100 hover:bg-zinc-200 cursor-pointer rounded-md m-2" > <div className="flex items-center justify-center">{props.icon}</div> <div className="grow flex items-center ml-2"> diff --git a/twake/frontend/src/app/views/applications/drive/modals/properties/index.tsx b/twake/frontend/src/app/views/client/body/drive/modals/properties/index.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/properties/index.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/properties/index.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/selector/index.tsx b/twake/frontend/src/app/views/client/body/drive/modals/selector/index.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/selector/index.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/selector/index.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/update-access/common.tsx b/twake/frontend/src/app/views/client/body/drive/modals/update-access/common.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/update-access/common.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/update-access/common.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/update-access/index.tsx b/twake/frontend/src/app/views/client/body/drive/modals/update-access/index.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/update-access/index.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/update-access/index.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/update-access/internal-access.tsx b/twake/frontend/src/app/views/client/body/drive/modals/update-access/internal-access.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/update-access/internal-access.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/update-access/internal-access.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/update-access/public-link-access.tsx b/twake/frontend/src/app/views/client/body/drive/modals/update-access/public-link-access.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/drive/modals/update-access/public-link-access.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/update-access/public-link-access.tsx diff --git a/twake/frontend/src/app/views/applications/drive/modals/versions/index.tsx b/twake/frontend/src/app/views/client/body/drive/modals/versions/index.tsx similarity index 97% rename from twake/frontend/src/app/views/applications/drive/modals/versions/index.tsx rename to twake/frontend/src/app/views/client/body/drive/modals/versions/index.tsx index 29f53518..003c1016 100644 --- a/twake/frontend/src/app/views/applications/drive/modals/versions/index.tsx +++ b/twake/frontend/src/app/views/client/body/drive/modals/versions/index.tsx @@ -64,7 +64,7 @@ const VersionModalContent = ({ id }: { id: string }) => { }} > {access !== 'read' && ( - <div className={'flex flex-row items-center bg-slate-100 rounded-md mb-4 p-4'}> + <div className={'flex flex-row items-center bg-zinc-100 rounded-md mb-4 p-4'}> <div className="flex flex-row"> <div className="grow flex items-center"> <Base> diff --git a/twake/frontend/src/app/views/applications/drive/shared.tsx b/twake/frontend/src/app/views/client/body/drive/shared.tsx similarity index 80% rename from twake/frontend/src/app/views/applications/drive/shared.tsx rename to twake/frontend/src/app/views/client/body/drive/shared.tsx index 22760bd4..4188cb51 100755 --- a/twake/frontend/src/app/views/applications/drive/shared.tsx +++ b/twake/frontend/src/app/views/client/body/drive/shared.tsx @@ -5,12 +5,12 @@ import Api from 'app/features/global/framework/api-service'; import Languages from 'app/features/global/services/languages-service'; import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; import RouterService from 'app/features/router/services/router-service'; -import Drive from 'app/views/applications/drive'; -import Avatar from '../../../atoms/avatar'; -import { setPublicLinkToken } from '../../../features/drive/api-client/api-client'; +import Drive from 'app/views/client/body/drive'; +import Avatar from '../../../../atoms/avatar'; +import { setPublicLinkToken } from '../../../../features/drive/api-client/api-client'; import { useParams } from 'react-router-dom'; import shortUUID from 'short-uuid'; -import useRouterCompany from '../../../features/router/hooks/use-router-company'; +import useRouterCompany from '../../../../features/router/hooks/use-router-company'; export default () => { const companyId = useRouterCompany(); @@ -55,17 +55,13 @@ export default () => { <div className="shrink-0"> <a href="https://twake.app" target="_BLANK" rel="noreferrer" className="!text-white"> <span className="nomobile text-white"> - {Languages.t( - 'scenes.app.mainview.create_account', - [], - 'Créez votre espace de travail gratuitement sur ', - )} + {Languages.t('scenes.app.mainview.create_account')} </span> - Twake   👉 + Twake Workplace   👉 </a> </div> </div> - <div className="main-view public "> + <div className="main-view public p-4"> <Drive initialParentId={documentId} inPublicSharing /> </div> <MenusBodyLayer /> diff --git a/twake/frontend/src/app/views/client/main-view/MainView.tsx b/twake/frontend/src/app/views/client/body/index.tsx similarity index 70% rename from twake/frontend/src/app/views/client/main-view/MainView.tsx rename to twake/frontend/src/app/views/client/body/index.tsx index 6bc92526..f4ffcad0 100644 --- a/twake/frontend/src/app/views/client/main-view/MainView.tsx +++ b/twake/frontend/src/app/views/client/body/index.tsx @@ -7,12 +7,7 @@ import CompanyBillingBanner from 'app/components/on-boarding/company-billing-ban import useRouterChannel from 'app/features/router/hooks/use-router-channel'; import useRouterCompany from 'app/features/router/hooks/use-router-company'; import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; -import MainContent from './MainContent'; -import Search from './MainHeader/Search'; -import './MainView.scss'; -import CompanyHeader from '../channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader'; -import CurrentUser from '../channels-bar/Parts/CurrentUser/CurrentUser'; -import Footer from '../channels-bar/Parts/Footer'; +import Drive from './drive'; type PropsType = { className?: string; @@ -24,22 +19,19 @@ const MainView: FC<PropsType> = ({ className }) => { const channelId = useRouterChannel(); return ( - <Layout className={'global-view-layout ' + (className ? className : '')}> + <div className={'grow min-h-full relative ' + (className ? className : '')}> <AccountStatusComponent /> {companyId && <CompanyBillingBanner companyId={companyId || ''} />} - <div className="bg-white flex space-between w-full"> - <CurrentUser /> - <Search /> - <Footer /> - </div> <MainContentWrapper key={companyId + workspaceId + channelId} /> - </Layout> + </div> ); }; //This is used to delay render and make rest of UI faster export const MainContentWrapper = () => { const [delayed, setDelayed] = useState(true); + const companyId = useRouterCompany(); + const workspaceId = useRouterWorkspace(); //This delay make the app superfast useEffect(() => { @@ -50,7 +42,14 @@ export const MainContentWrapper = () => { return <></>; } - return <MainContent />; + return ( + <Drive + context={{ + companyId, + workspaceId, + }} + /> + ); }; export default ({ className }: PropsType) => { diff --git a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss deleted file mode 100755 index 07dccd3f..00000000 --- a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss +++ /dev/null @@ -1,193 +0,0 @@ -.current-company-header { - display: flex; - margin-left: 12px; - margin-right: 12px; - width: auto; - box-sizing: border-box; - - .notifications { - cursor: pointer; - color: var(--black-alpha-50); - font-size: 16px; - - .bell { - display: flex; - align-items: center; - cursor: pointer; - height: 24px; - - &:hover { - background: var(--primary-background); - border-radius: var(--border-radius-base); - } - - &.disabled { - color: var(--red); - } - &.sleep { - color: var(--warning); - } - } - - .remaning-time { - color: grey; - font-style: italic; - } - } - - .current-company { - flex: 1; - overflow: hidden; - height: 48px; - cursor: pointer; - - .name { - display: flex; - cursor: pointer; - - .text { - height: 22px; - font-size: 16px; - color: var(--secondary); - letter-spacing: 0; - line-height: 22px; - font-weight: 700; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - .icon { - height: 22px; - line-height: 22px; - font-size: 20px; - min-width: 24px; - margin-left: -4px; - color: var(--secondary); - } - } - - .user-info { - display: flex; - color: var(--black-alpha-70); - align-items: center; - - .ant-badge-status { - align-items: center; - margin-right: 5px; - - .ant-badge-status-text { - display: none; - } - } - .ant-avatar-image { - width: 16px; - height: 16px; - line-height: 16px; - font-size: 18px; - overflow: clip; - border-radius: 50%; - margin-right: 3px; - vertical-align: top; - } - - .status { - position: relative; - display: inline-block; - margin-right: 4px; - width: 8px; - height: 8px; - border-radius: 6px; - background: var(--green); - border: 1px solid var(--grey-background); - - &.grey { - background: var(--grey-dark); - } - &.red { - background: var(--red); - } - } - - .icon { - display: flex; - align-items: center; - padding-right: 2px; - margin-right: 4px; - cursor: pointer; - } - - .text { - font-size: 14px; - line-height: 20px; - flex: 1; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - - .emoji-container { - margin-right: 3px; - display: inline-block; - height: 16px; - } - } - } -} - -.loading_render { - .current_user { - pointer-events: none; - .user_head { - background: #dfdfdf !important; - } - .user_head, - .name, - .subname { - background: var(--primary-background); - animation-duration: 1s; - animation-fill-mode: forwards; - animation-iteration-count: infinite; - animation-name: placeHolderShimmer; - animation-timing-function: linear; - background: var(--primary-background); - background: linear-gradient( - to right, - var(--primary-background) 8%, - #f2f2f2 18%, - var(--primary-background) 33% - ); - background-size: 800px 104px; - & > * { - display: none !important; - } - } - .name { - background: #dfdfdf !important; - height: 16px; - border-radius: var(--border-radius-large); - width: 70%; - margin-top: 2px; - } - .subname { - margin-top: 6px; - height: 16px; - border-radius: var(--border-radius-large); - width: 90%; - } - } -} - -.current_company_header_loader { - display: flex; - width: auto; - box-sizing: border-box; - - .current_company_loader { - flex: 1; - overflow: hidden; - height: 48px; - .ant-skeleton > .ant-skeleton-content { - height: 48px; - } - } -} diff --git a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx deleted file mode 100755 index 5215a8b9..00000000 --- a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import React from 'react'; -import { Badge } from 'antd'; - -import UserService from 'app/features/users/services/current-user-service'; -import Icon from 'app/components/icon/icon.jsx'; -import Emojione from 'components/emojione/emojione'; - -import './CompanyHeader.scss'; -import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; -import { useCurrentWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; - -type PropsType = { - onClickUser?: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void; - refDivUser: React.LegacyRef<HTMLDivElement> | undefined; -}; - -export default (props: PropsType): JSX.Element => { - const { user } = useCurrentUser(); - const { workspace } = useCurrentWorkspace(); - - return ( - <div className="current-company-header"> - <div - ref={props.refDivUser} - className="current-company" - onClick={evt => props.onClickUser && props.onClickUser(evt)} - > - <div className="name"> - <div className="text">{workspace?.name || '-'}</div> - <div className="icon"> - <Icon type="angle-down" /> - </div> - </div> - - {user && ( - <div className="user-info"> - <Badge count={1} size="small" dot color="green" /> - {!!user.status && ( - <Emojione className="emoji-status" type={user.status.split(' ')[0]} /> - )} - - <span className="text"> - {UserService.getFullName(user)} ({user.email}) - </span> - </div> - )} - </div> - </div> - ); -}; diff --git a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CurrentUser.jsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CurrentUser.jsx deleted file mode 100755 index 3d7fde39..00000000 --- a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CurrentUser.jsx +++ /dev/null @@ -1,268 +0,0 @@ -// eslint-disable-next-line no-use-before-define -import React, { Component } from 'react'; - -import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import UserService from 'app/features/users/services/current-user-service'; -import MenusManager from 'app/components/menus/menus-manager.jsx'; -import LoginService from 'app/features/auth/login-service'; -import WorkspaceService from 'app/deprecated/workspaces/workspaces.jsx'; -import WorkspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; -import ListenUsers from 'app/features/users/services/listen-users-service'; -import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.jsx'; -import AccountParameter from 'app/views/client/popup/UserParameter/UserParameter'; -import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; -import NotificationParameters from 'app/deprecated/user/notification_parameters.js'; -import CreateWorkspacePage from 'app/views/client/popup/CreateWorkspacePage/CreateWorkspacePage.jsx'; -import CompanyHeaderUI from 'app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader'; -import ModalManagerDepreciated from 'app/deprecated/popupManager/popupManager'; -import InitService from 'app/features/global/services/init-service'; -import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; -import Workspaces from 'app/deprecated/workspaces/workspaces.jsx'; -import FeatureTogglesService, { - FeatureNames, -} from 'app/features/global/services/feature-toggles-service'; -import LockedWorkspacePopup from 'app/components/locked-features-components/locked-workspace-popup/locked-workspace-popup'; -import ModalManager from 'app/components/modal/modal-manager'; -import CompanyMessagesCounter from 'components/company-messages-counter/company-messages-counter'; -import ConsoleService from 'app/features/console/services/console-service'; -import MenuCompanyHeader from './MenuCompanyHeader'; - -export default class CurrentUser extends Component { - constructor() { - super(); - - this.users_repository = Collections.get('users'); - this.i18n = Languages; - - this.state = { - new_status: ['', ''], - showingMenu: false, - }; - - this.preferedEmojisStatus = [ - 'trash', - ':palm_tree:', - ':calendar:', - ':red_car:', - ':hamburger:', - ':sleeping_accommodation:', - ]; - } - - UNSAFE_componentWillMount() { - this.user_id = UserService.getCurrentUserId(); - - ListenUsers.listenUser(this.user_id); - Collections.get('users').addListener(this); - Collections.get('users').listenOnly(this, [ - Collections.get('users').find(this.user_id).front_id, - ]); - Languages.addListener(this); - this.refreshUserState = setInterval(() => { - this.setState({}); - }, 60000); - } - componentWillUnmount() { - ListenUsers.cancelListenUser(this.user_id); - Collections.get('users').removeListener(this); - Languages.removeListener(this); - clearInterval(this.refreshUserState); - } - - componentDidMount() { - const new_status = { - ...this.users_repository.known_objects_by_id[this.user_id].status.split(' '), - }; - if (!new_status[0]) { - new_status[1] = ''; - } - this.setState({ new_status } || [new_status[0], '']); - } - - onClickUser() { - this.showMenu(); - this.setState({ showingMenu: !this.state.showingMenu }); - } - - hideMenu() { - MenusManager.closeMenu(); - } - - showMenu() { - var current_user = this.users_repository.known_objects_by_id[this.user_id]; - var usermenu = [ - { - type: 'react-element', - reactElement: () => <MenuCompanyHeader />, - }, - ]; - - if (!FeatureTogglesService.isActiveFeatureName(FeatureNames.MESSAGE_HISTORY)) { - usermenu.push( - ...[ - { type: 'separator' }, - { - type: 'react-element', - className: 'menu-cancel-left-padding', - reactElement: () => <CompanyMessagesCounter />, - }, - ], - ); - } - - if ( - !WorkspaceUserRights.isGroupInvite() && - (AccessRightsService.hasLevel(Workspaces.currentWorkspaceId, 'member') || - AccessRightsService.hasCompanyLevel(Workspaces.currentGroupId, 'admin')) - ) { - usermenu.push({ type: 'separator' }); - - usermenu.push({ - type: 'menu', - icon: 'users-alt', - text: Languages.t('scenes.app.channelsbar.currentuser.collaborateurs'), - onClick: () => { - ModalManagerDepreciated.open( - <WorkspaceParameter initial_page={2} />, - true, - 'workspace_parameters', - ); - }, - }); - - usermenu.push({ - type: 'menu', - icon: 'plus', - text: Languages.t('scenes.app.channelsbar.currentuser.create_workspace_page'), - onClick: () => { - if (FeatureTogglesService.isActiveFeatureName(FeatureNames.MULTIPLE_WORKSPACES)) { - ModalManagerDepreciated.open(<CreateWorkspacePage />); - } else { - ModalManager.open( - <LockedWorkspacePopup />, - { - position: 'center', - size: { width: '600px' }, - }, - false, - ); - } - }, - }); - } - - if (!WorkspaceUserRights.isInvite()) { - if (WorkspaceUserRights.hasWorkspacePrivilege()) { - usermenu.push( - { type: 'separator' }, - { - type: 'menu', - icon: 'cog', - text: Languages.t('scenes.app.channelsbar.currentuser.workspace_parameters'), - onClick: () => { - ModalManagerDepreciated.open(<WorkspaceParameter />, true, 'workspace_parameters'); - }, - }, - ); - - if ( - AccessRightsService.hasCompanyLevel(WorkspaceService.currentGroupId, 'member') && - InitService.server_infos?.configuration?.accounts?.type === 'console' - ) { - usermenu.push({ - type: 'menu', - icon: 'home', - text: Languages.t('scenes.app.popup.workspaceparameter.pages.company_identity_title'), - rightIcon: 'external-link-alt', - onClick: () => { - return window.open( - ConsoleService.getCompanyManagementUrl(WorkspaceService.currentGroupId), - '_blank', - ); - }, - }); - } - } - } else { - usermenu.push( - { type: 'separator' }, - { - type: 'text', - text: Languages.t('scenes.app.channelsbar.currentuser.invited_status'), - }, - { - type: 'menu', - text: Languages.t('scenes.app.popup.workspaceparameter.pages.quit_workspace_menu'), - icon: 'plane-fly', - className: 'error', - onClick: () => { - WorkspacesUsers.leaveWorkspace(); - }, - }, - ); - } - - usermenu = usermenu.concat([ - { type: 'separator' }, - - { - type: 'menu', - icon: 'user', - text: Languages.t('scenes.app.channelsbar.currentuser.title', [], 'Paramètres du compte'), - onClick: () => { - ModalManagerDepreciated.open(<AccountParameter />, true, 'account_parameters'); - }, - }, - { - type: 'menu', - icon: 'sign-out-alt', - text: Languages.t('scenes.app.channelsbar.currentuser.logout', [], 'Se déconnecter'), - className: 'error', - onClick: () => { - LoginService.logout(); - }, - }, - ]); - - var pos = window.getBoundingClientRect(this.node); - pos.x = pos.x || pos.left; - pos.y = pos.y || pos.top; - - MenusManager.openMenu( - usermenu, - { x: pos.x + pos.width / 2, y: pos.y + pos.height + 10 }, - 'bottom', - ); - } - - render() { - var current_user = this.users_repository.known_objects_by_id[this.user_id]; - - if (!current_user) { - return ''; - } - - var notifications_disabled = false; - if ( - current_user && - NotificationParameters.hasNotificationsDisabled(current_user.notifications_preferences) - ) { - notifications_disabled = true; - } - var status = NotificationParameters.getNotificationsStatus(current_user); - - return ( - <CompanyHeaderUI - refDivUser={node => (this.node = node)} - refDivBell={node => (this.bell_node = node)} - status={status} - notificationsDisabled={notifications_disabled} - onClickUser={evt => { - this.onClickUser(evt); - }} - style={{ marginBottom: 10 }} - /> - ); - } -} diff --git a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/MenuCompanyHeader.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/MenuCompanyHeader.tsx deleted file mode 100644 index 25eb78bc..00000000 --- a/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/MenuCompanyHeader.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import environment from 'app/environment/environment'; -import { CurrentCompanyLogo } from 'app/views/client/workspaces-bar/components/CompanySelector'; -import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; -import { useCurrentWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; -import React from 'react'; - -export default () => { - const { company } = useCurrentCompany(); - const { workspace } = useCurrentWorkspace(); - - return ( - <div style={{ display: 'flex', flexDirection: 'row', alignItems: 'start' }}> - <div style={{ width: 32, height: 32, marginRight: 8 }}> - <CurrentCompanyLogo size={32} withCompanyName={false} /> - </div> - <div style={{ flex: 1, lineHeight: '1.2em' }}> - <span - style={{ - whiteSpace: 'nowrap', - overflow: 'hidden', - textOverflow: 'ellipsis', - maxWidth: '180px', - display: 'inline-block', - }} - > - <b> - {(company.name || '').substr(0, 16)} - {workspace?.name} - </b> - </span> - <span style={{ opacity: 0.5 }}> - {environment.api_root_url.split('//').pop()?.split('/').shift()} - </span> - <span className="link" style={{ marginLeft: 8 }}> - Plan {company.plan?.name} - </span> - </div> - </div> - ); -}; diff --git a/twake/frontend/src/app/views/client/channels-bar/Parts/Footer.jsx b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer.jsx deleted file mode 100755 index f952a30b..00000000 --- a/twake/frontend/src/app/views/client/channels-bar/Parts/Footer.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import React, { Component } from 'react'; - -import Languages from 'app/features/global/services/languages-service'; -import Groups from 'app/deprecated/workspaces/groups.js'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import InitService from 'app/features/global/services/init-service'; - -import FooterUI from 'app/views/client/channels-bar/Parts/Footer/Footer.jsx'; - -export default class Footer extends Component { - constructor() { - super(); - - this.state = { - i18n: Languages, - }; - - Languages.addListener(this); - Collections.get('groups').addListener(this); - Collections.get('groups').listenOnly(this, [Groups.currentGroupId]); - } - componentWillUnmount() { - Languages.removeListener(this); - Collections.get('groups').removeListener(this); - } - shouldComponentUpdate() { - Collections.get('groups').listenOnly(this, [Groups.currentGroupId]); - return true; - } - render() { - var group = Collections.get('groups').find(Groups.currentGroupId); - - return ( - <FooterUI - planName={group?.plan} - onClickHelp={ - InitService.server_infos?.configuration?.help_url && - (() => { - window.open(InitService.server_infos?.configuration?.help_url); - }) - } - onClickDocumentation={() => { - window.open('https://linagora.github.io/Twake/index.html'); - }} - /> - ); - } -} diff --git a/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.jsx b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.jsx deleted file mode 100755 index ffb22bf5..00000000 --- a/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.jsx +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable react/prop-types */ -import React from 'react'; - -import './Footer.scss'; - -import Icon from 'app/components/icon/icon.jsx'; -import InitService from 'app/features/global/services/init-service'; -import Languages from 'app/features/global/services/languages-service'; -import Globals from 'app/features/global/services/globals-twake-app-service'; -import Menu from 'components/menus/menu.jsx'; -import Version from 'app/environment/version'; - -export default class Footer extends React.Component { - constructor(props) { - super(); - this.onpremise = !!((InitService.server_infos || {}).branding || {}).name; - this.menu = [ - { type: 'text', text: `Twake v${Version.version_detail}` }, - ...(props.onClickHelp - ? [ - { - type: 'menu', - text: Languages.t('general.help.support', [], 'Support'), - icon: 'comment', - onClick: props.onClickHelp, - }, - ] - : []), - { - type: 'menu', - text: Languages.t('general.help.documentation', [], 'Documentation'), - icon: 'book', - onClick: props.onClickDocumentation, - }, - ]; - } - componentDidMount() { - try { - if (!this.onpremise) { - var config = { - selector: '#changelog_text', - account: '7L9kKJ', - translations: { - title: 'Twake Changelog', - readMore: 'Read more', - footer: 'View more changes', - }, - }; - if (typeof Globals.window?.Headway != 'undefined') { - Globals.window.Headway.init(config); - } - } - } catch (err) { - console.log(err); - } - } - render() { - return ( - <div className="channel_footer"> - <div className="line_2"> - {this.props.onClickHelp && ( - <Menu menu={this.menu} className="options" position="top"> - <div className="help"> - <Icon type="question-circle" /> - {Languages.t('general.help', [], 'Help')} - </div> - </Menu> - )} - {!this.onpremise && ( - <div - className="help" - style={{ textAlign: 'right', flex: 1, position: 'relative' }} - id="changelog_text" - > - Changelog - </div> - )} - {this.onpremise && ( - <div className={'plan'}> - {((InitService.server_infos || {}).branding || {}).name} Server - </div> - )} - </div> - </div> - ); - } -} diff --git a/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.scss deleted file mode 100755 index e2ec0a01..00000000 --- a/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.scss +++ /dev/null @@ -1,95 +0,0 @@ -#HW_frame_cont { - left: 70px !important; -} - -.channel_footer { - border-top: 1px solid var(--grey-background); - flex-direction: column; - box-sizing: border-box; - display: flex; - - & > div { - display: flex; - flex-direction: row; - padding: 11px 14px; - box-sizing: border-box; - } - - .line_1 { - line-height: 24px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - color: var(--grey-dark); - font-size: 14px; - - .group_switch { - margin-right: 8px; - height: 24px; - .current_company_logo { - width: 24px; - height: 24px; - border-radius: var(--border-radius-base); - } - } - } - - .line_2 { - height: 46px; - } - - #HW_badge_cont { - position: absolute; - top: -6px; - right: 0; - width: 90px; - - span.HW_visible { - background: #827dff; - } - } - - .help { - font-size: 12px; - color: var(--grey-dark); - line-height: 22px; - width: auto; - float: left; - cursor: pointer; - - &:hover { - color: var(--black); - } - } - - .plan { - border-radius: var(--border-radius-base); - font-size: 12px; - height: 22px; - float: right; - line-height: 22px; - vertical-align: middle; - background: #e2f4e8; - color: var(--green); - padding: 0px 4px; - font-weight: 700; - text-transform: uppercase; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - margin-left: auto; - cursor: pointer; - display: inline; - - &.free { - background: #fff3cd; - color: #ff9d00; - } - } -} - -.loading_render { - .channel_footer { - display: none !important; - } -} diff --git a/twake/frontend/src/app/views/client/common/account.tsx b/twake/frontend/src/app/views/client/common/account.tsx new file mode 100644 index 00000000..c85c0031 --- /dev/null +++ b/twake/frontend/src/app/views/client/common/account.tsx @@ -0,0 +1,58 @@ +import Avatar from 'app/atoms/avatar'; +import { Base, Info } from 'app/atoms/text'; +import Menu from 'app/components/menus/menu'; +import LoginService from 'app/features/auth/login-service'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import currentUserService from 'app/features/users/services/current-user-service'; +import AccountParameter from 'app/views/client/popup/UserParameter/UserParameter'; +import Languages from '../../../features/global/services/languages-service'; +import ModalManagerDepreciated from 'app/deprecated/popupManager/popupManager'; + +export default ({ sidebar }: { sidebar?: boolean }): JSX.Element => { + const { user } = useCurrentUser(); + + if (!user) return <></>; + + return ( + <Menu + className="flex flex-row items-center max-w-xs cursor-pointer" + position="bottom" + menu={[ + { + type: 'menu', + icon: 'user', + text: Languages.t('scenes.app.channelsbar.currentuser.title'), + onClick: () => { + ModalManagerDepreciated.open(<AccountParameter />, true, 'account_parameters'); + }, + }, + { + type: 'menu', + icon: 'sign-out-alt', + text: Languages.t('scenes.app.channelsbar.currentuser.logout'), + className: 'error', + onClick: () => { + LoginService.logout(); + }, + }, + ]} + > + <Avatar + size="md" + className="shrink-0 border-0" + avatar={user.thumbnail} + title={currentUserService.getFullName(user)} + /> + <div + className={'sm:block ml-2 mr-2 flex flex-col overflow-hidden ' + (sidebar ? '' : 'hidden')} + > + <Base className="font-bold overflow-hidden text-ellipsis whitespace-nowrap w-full block -mb-1"> + {currentUserService.getFullName(user)} + </Base> + <Info className="font-semibold overflow-hidden text-ellipsis whitespace-nowrap w-full"> + {user.email} + </Info> + </div> + </Menu> + ); +}; diff --git a/twake/frontend/src/app/views/client/common/app-grid.tsx b/twake/frontend/src/app/views/client/common/app-grid.tsx new file mode 100644 index 00000000..390aa3ed --- /dev/null +++ b/twake/frontend/src/app/views/client/common/app-grid.tsx @@ -0,0 +1,49 @@ +import { ViewGridIcon } from '@heroicons/react/outline'; +import { Button } from 'app/atoms/button/button'; +import Menu from 'app/components/menus/menu'; +import { Base } from '../../../atoms/text'; +import InitService from '../../../features/global/services/init-service'; + +export default ({ className }: { className?: string }): JSX.Element => { + const applications = InitService?.server_infos?.configuration?.app_grid || []; + + if (applications.length === 0) { + return <></>; + } + + return ( + <Menu + position="bottom" + menu={[ + { + type: 'react-element', + reactElement: ( + <div className="grid grid-cols-3"> + {applications.map((app, index) => { + return ( + <a + key={index} + target="_blank" + rel="noreferrer" + href={app.url} + className="inline-block flex flex-col items-center justify-center cursor-pointer hover:bg-zinc-100 rounded-md p-2 pb-1" + > + <img src={app.logo} className="w-14 h-14 mb-1" /> + <Base>{app.name}</Base> + </a> + ); + })} + </div> + ), + }, + ]} + > + <Button + theme="default" + size="md" + className={'!rounded-full border-0 ' + className} + icon={() => <ViewGridIcon className="w-6 h-6 text-blue-500" />} + /> + </Menu> + ); +}; diff --git a/twake/frontend/src/app/views/client/common/disk-usage.tsx b/twake/frontend/src/app/views/client/common/disk-usage.tsx new file mode 100644 index 00000000..b44fccb2 --- /dev/null +++ b/twake/frontend/src/app/views/client/common/disk-usage.tsx @@ -0,0 +1,22 @@ +import { Base, Title } from '@atoms/text'; +import { useDriveItem } from '@features/drive/hooks/use-drive-item'; +import { formatBytes } from '@features/drive/utils'; + +export default () => { + const { access, item } = useDriveItem('root'); + const { item: trash } = useDriveItem('trash'); + return ( + <> + {access !== 'read' && item?.id === 'root' && ( + <div className="bg-zinc-500 dark:bg-zinc-800 bg-opacity-10 rounded-md p-4 w-auto max-w-md"> + <div className="w-full"> + <Title> + {formatBytes(item?.size || 0)} + <Base> used, </Base> <Base>{formatBytes(trash?.size || 0)} in trash</Base> + +
+
+ )} + + ); +}; diff --git a/twake/frontend/src/app/views/client/common/search.tsx b/twake/frontend/src/app/views/client/common/search.tsx new file mode 100644 index 00000000..8ac53ffa --- /dev/null +++ b/twake/frontend/src/app/views/client/common/search.tsx @@ -0,0 +1,58 @@ +import { Button } from '@atoms/button/button'; +import { Input } from '@atoms/input/input-text'; +import { AdjustmentsIcon, SearchIcon } from '@heroicons/react/outline'; +import { InputDecorationIcon } from 'app/atoms/input/input-decoration-icon'; +import Languages from 'app/features/global/services/languages-service'; +import RouterServices from 'app/features/router/services/router-service'; +import { useSearchModal } from 'app/features/search/hooks/use-search'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { useRecoilState } from 'recoil'; + +export default (): JSX.Element => { + const { workspaceId, channelId } = RouterServices.getStateFromRoute(); + const { setOpen: setOpenSearch } = useSearchModal(); + const [searchState, setSearchState] = useRecoilState(SearchInputState); + + const setOpen = () => { + if ( + searchState.query === '' || + (searchState.channelId && searchState.channelId !== channelId) + ) { + setSearchState({ query: searchState.query, workspaceId: workspaceId, channelId: channelId }); + } + setOpenSearch(true); + }; + + return ( + <> +
+ ( + + )} + suffix={() => ( +
+ + ); +}; diff --git a/twake/frontend/src/app/views/client/header/index.tsx b/twake/frontend/src/app/views/client/header/index.tsx new file mode 100644 index 00000000..4b456622 --- /dev/null +++ b/twake/frontend/src/app/views/client/header/index.tsx @@ -0,0 +1,39 @@ +import { MenuIcon } from '@heroicons/react/outline'; +import Account from '../common/account'; +import AppGrid from '../common/app-grid'; +import Search from '../common/search'; + +export default ({ openSideMenu }: { openSideMenu: () => void }) => { + return ( +
+
+ Tdrive + Tdrive +
+
openSideMenu()} + className="sm:hidden block shrink-0 w-10 hover:text-zinc-600 text-zinc-500 cursor-pointer -mx-2 px-2" + > + +
+ +
+ +
+ +
+
+ +
+ +
+ ); +}; diff --git a/twake/frontend/src/app/views/client/index.tsx b/twake/frontend/src/app/views/client/index.tsx index 574f3111..aea5b055 100755 --- a/twake/frontend/src/app/views/client/index.tsx +++ b/twake/frontend/src/app/views/client/index.tsx @@ -1,37 +1,34 @@ // eslint-disable-next-line @typescript-eslint/no-use-before-define -import React, { Suspense, useState } from 'react'; -import { Menu } from 'react-feather'; -import { Layout } from 'antd'; import classNames from 'classnames'; +import React, { Suspense, useState } from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import PopupService from 'app/deprecated/popupManager/popupManager.js'; -import PopupComponent from 'components/popup-component/popup-component.jsx'; -import MainView from './main-view/MainView'; -import DraggableBodyLayer from 'components/draggable/draggable-body-layer.jsx'; -import MenusBodyLayer from 'app/components/menus/menus-body-layer.jsx'; -import DriveUploadViewer from 'components/uploads/upload-viewer.jsx'; -import ChatUploadsViewer from 'app/components/file-uploads/uploads-viewer'; -import ConfigBodyLayer from 'components/configurators/config-body-layer.jsx'; -import Viewer from 'app/views/applications/viewer/viewer'; -import ModalComponent from 'app/components/modal/modal-component'; -import ConnectionIndicator from 'components/connection-indicator/connection-indicator'; -import SearchPopup from 'components/search-popup/search-popup'; -import NewVersionComponent from 'components/new-version/new-version-component'; -import SideBars from './side-bars'; -import CompanyStatusComponent from 'app/components/on-boarding/company-status-component'; -import UserContext from 'app/features/users/state/integration/user-context'; -import { useCurrentUser, useCurrentUserRealtime } from 'app/features/users/hooks/use-current-user'; -import { useFeatureToggles } from 'app/components/locked-features-components/feature-toggles-hooks'; -import useUsetiful from 'app/features/global/hooks/use-usetiful'; import UsersSearchModal from 'app/components/channel-members-list/users-search-modal'; +import ChatUploadsViewer from 'app/components/file-uploads/uploads-viewer'; +import { useFeatureToggles } from 'app/components/locked-features-components/feature-toggles-hooks'; +import MenusBodyLayer from 'app/components/menus/menus-body-layer.jsx'; +import ModalComponent from 'app/components/modal/modal-component'; +import CompanyStatusComponent from 'app/components/on-boarding/company-status-component'; +import PopupService from 'app/deprecated/popupManager/popupManager.js'; +import useUsetiful from 'app/features/global/hooks/use-usetiful'; +import Languages from 'app/features/global/services/languages-service'; +import { useCurrentUser, useCurrentUserRealtime } from 'app/features/users/hooks/use-current-user'; +import UserContext from 'app/features/users/state/integration/user-context'; +import Viewer from 'app/views/client/viewer/viewer'; +import ConnectionIndicator from 'components/connection-indicator/connection-indicator'; +import DraggableBodyLayer from 'components/draggable/draggable-body-layer.jsx'; +import NewVersionComponent from 'components/new-version/new-version-component'; +import PopupComponent from 'components/popup-component/popup-component.jsx'; +import SearchPopup from 'components/search-popup/search-popup'; +import DriveUploadViewer from 'components/uploads/upload-viewer.jsx'; +import MainView from './body'; -import './styles.scss'; -import DownloadAppBanner from 'app/components/download-app-banner/download-app-banner'; import ChannelAttachementList from 'app/components/channel-attachement-list/channel-attachement-list'; +import DownloadAppBanner from 'app/components/download-app-banner/download-app-banner'; import { EditChannelModal } from 'app/components/edit-channel'; import Invitation from 'app/components/invitation/invitation'; -import DesktopRedirect from '../desktop-redirect'; +import DesktopRedirect from '../../components/desktop-redirect'; +import Header from './header'; +import SideBar from './side-bar'; export default React.memo((): JSX.Element => { const [menuIsOpen, setMenuIsOpen] = useState(false); @@ -49,34 +46,52 @@ export default React.memo((): JSX.Element => { if (user?.id) { page = ( - +
+ - - } - breakpoint="lg" - collapsedWidth="0" - theme="light" - width={70} - onCollapse={(collapsed, type) => { - if (type === 'responsive') return setTimeout(() => setMenuIsOpen(false), 0); - setTimeout(() => setMenuIsOpen(!collapsed), 0); - }} - > - }> - - - - }> - - - + <> +
setMenuIsOpen(true)} /> +
+
+ }> + + +
+
setMenuIsOpen(false)} + className="absolute left-0 top-0 h-full w-full bg-black bg-opacity-50 transition-all z-40 opacity-0" + >
+
+ }> + + +
+
+ - +
); } @@ -88,7 +103,6 @@ export default React.memo((): JSX.Element => { - diff --git a/twake/frontend/src/app/views/client/main-view/AppView/AppView.tsx b/twake/frontend/src/app/views/client/main-view/AppView/AppView.tsx deleted file mode 100644 index 4ab0ecd9..00000000 --- a/twake/frontend/src/app/views/client/main-view/AppView/AppView.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import useRouterCompany from 'app/features/router/hooks/use-router-company'; -import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; -import AppViewService from 'app/features/router/services/app-view-service'; -import Drive from 'app/views/applications/drive'; -import { FC } from 'react'; - -type PropsType = { - viewService: AppViewService; - id: string; -}; - -const AppView: FC = props => { - const companyId = useRouterCompany(); - const workspaceId = useRouterWorkspace(); - - return ( - - ); -}; -export default AppView; diff --git a/twake/frontend/src/app/views/client/main-view/ContentRestricted.tsx b/twake/frontend/src/app/views/client/main-view/ContentRestricted.tsx deleted file mode 100644 index df8488bf..00000000 --- a/twake/frontend/src/app/views/client/main-view/ContentRestricted.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import Languages from 'app/features/global/services/languages-service'; -import { LockOpenIcon } from '@heroicons/react/outline'; - -export default () => { - return ( -
-
- -
-
- {Languages.t('scenes.client.join_private_channel.info')} -
-
-
-
- ); -}; diff --git a/twake/frontend/src/app/views/client/main-view/MainContent.tsx b/twake/frontend/src/app/views/client/main-view/MainContent.tsx deleted file mode 100644 index 082d5e8d..00000000 --- a/twake/frontend/src/app/views/client/main-view/MainContent.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { FC, Suspense } from 'react'; - -import { Layout } from 'antd'; -import MainViewService from 'app/features/router/services/main-view-service'; -import SideViewService from 'app/features/router/services/side-view-service'; -import AppView from './AppView/AppView'; - -export const ViewContext = React.createContext({ type: '', id: '' }); - -const MainContent: FC = () => { - const [, mainId] = MainViewService.useWatcher(() => [ - MainViewService.getViewType(), - MainViewService.getId(), - ]); - - // Put the sideview in full screen if screen has not a big width - const { innerWidth } = window; - let sideViewWidth = '40%'; - if (innerWidth < 768) { - sideViewWidth = '100%'; - } - return ( - - - - - - - - }> - - - - - - - - - - ); -}; - -export default MainContent; diff --git a/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx deleted file mode 100644 index b2f436e9..00000000 --- a/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import RouterServices from 'app/features/router/services/router-service'; -import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; -import Languages from 'app/features/global/services/languages-service'; -import { useSearchModal } from 'app/features/search/hooks/use-search'; -import { Button } from '@atoms/button/button'; -import { SearchIcon } from '@heroicons/react/solid'; -import { Input } from '@atoms/input/input-text'; -import { InputDecorationIcon } from 'app/atoms/input/input-decoration-icon'; -import { useRecoilState } from 'recoil'; -import { SearchInputState } from 'app/features/search/state/search-input'; - -export default (): JSX.Element => { - const { workspaceId, companyId, channelId } = RouterServices.getStateFromRoute(); - const { setOpen: setOpenSearch } = useSearchModal(); - const [searchState, setSearchState] = useRecoilState(SearchInputState); - - const setOpen = () => { - if ( - searchState.query === '' || - (searchState.channelId && searchState.channelId !== channelId) - ) { - setSearchState({ query: searchState.query, workspaceId: workspaceId, channelId: channelId }); - } - setOpenSearch(true); - }; - - const disable = !( - AccessRightsService.hasLevel(workspaceId, 'member') && - AccessRightsService.getCompanyLevel(companyId) !== 'guest' - ); - - return ( - <> -
- {!disable && ( - ( - setOpen()} - /> - )} - /> - )} -
- -
- {!disable && ( -
- - ); -}; diff --git a/twake/frontend/src/app/views/client/main-view/MainView.scss b/twake/frontend/src/app/views/client/main-view/MainView.scss deleted file mode 100644 index 80ebb196..00000000 --- a/twake/frontend/src/app/views/client/main-view/MainView.scss +++ /dev/null @@ -1,168 +0,0 @@ -.ant-layout .main-view-layout { - height: 100%; - overflow: hidden; - .main-view-content { - position: relative; - & > div { - position: absolute; - left: 0; - top: 0; - width: 100%; - height: 100%; - } - } -} - -.ant-layout .global-view-layout { - &.collapsed .global-view-header { - .channel-name { - margin-left: 26px; - } - .app-name { - margin-left: 40px; - } - } - .global-view-header { - padding: 8px 0; - height: 56px; - background-color: #FFF; - - .ant-divider { - margin: 0; - height: 2px; - } - .ant-row { - white-space: nowrap; - padding: 0 16px; - line-height: 47px; - } - } - - .global-side-view { - background-color: var(--white); - border-left: 1px solid var(--grey-background); - transition-duration: 0s !important; - - .side-header { - height: 40px; - background: #f5f5f7; - background: var(--grey-background); - font-size: 13px; - font-weight: 500; - color: var(--primary); - color: var(--black-alpha-70); - padding: 8px 8px 8px 16px; - line-height: 24px; - box-sizing: border-box; - overflow: hidden; - display: flex; - - span { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - min-width: 0; - flex: 1 1; - } - - svg { - cursor: pointer; - right: 8px; - color: var(--black-alpha-50); - &:hover { - color: var(--black); - } - } - } - } - - .global-view-content { - & > .ant-layout { - max-width: 100%; - } - padding: 0px; - display: flex; - - .main-view-tabs-header { - background-color: #FFF; - height: 47px; - margin-top: -8px; - padding: 0 8px; - } - - .main-view-tabs { - .ant-tabs-nav { - padding: 0 8px; - } - } - } -} - -.main-view, -.main-view-content { - flex: 1; - background: var(--white); - box-sizing: border-box; - display: flex; - flex-direction: column; - position: relative; - border-top: 1px solid var(--grey-background); - - .app_loader { - position: absolute; - margin: auto; - width: 50px; - height: 50px; - right: 0px; - bottom: 0px; - top: 0px; - left: 0px; - } - - .no-channel-text { - color: #000; - position: absolute; - margin: auto; - left: 0; - right: 0; - top: 0; - bottom: 0; - height: 200px; - width: 300px; - text-align: center; - font-size: 16px; - opacity: 0.5; - } -} - -.public_header { - background-color: var(--primary); - flex-direction: column; - width: 100vw; - height: 64px; - display: flex; - flex-direction: row; - - .left { - padding: 16px; - padding-left: 24px; - display: flex; - flex-direction: row; - } - - .right { - flex: 1; - text-align: right; - font-size: 12px; - padding: 16px; - padding-right: 24px; - line-height: 32px; - - a { - color: #fff; - &:hover { - opacity: 0.8; - } - } - } -} diff --git a/twake/frontend/src/app/views/client/main-view/NoApp.tsx b/twake/frontend/src/app/views/client/main-view/NoApp.tsx deleted file mode 100644 index 82acdeeb..00000000 --- a/twake/frontend/src/app/views/client/main-view/NoApp.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; -import Languages from 'app/features/global/services/languages-service'; - -export default () => { - return ( -
-
- {Languages.t( - 'scenes.app.mainview.instruction_current_tab', - [], - 'Commencez par sélectionner une chaîne sur votre gauche.', - )} -
-
- ); -}; diff --git a/twake/frontend/src/app/views/client/main-view/Tabs/DefaultChannelTab.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/DefaultChannelTab.tsx deleted file mode 100644 index fda65e9c..00000000 --- a/twake/frontend/src/app/views/client/main-view/Tabs/DefaultChannelTab.tsx +++ /dev/null @@ -1,142 +0,0 @@ -import React from 'react'; -import classNames from 'classnames'; -import RouterServices from 'app/features/router/services/router-service'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import Menu from 'components/menus/menu.jsx'; -import { MoreHorizontal, MessageCircle } from 'react-feather'; -import Languages from 'app/features/global/services/languages-service'; -import popupManager from 'app/deprecated/popupManager/popupManager.js'; -import WorkspaceParameter from '../../popup/WorkspaceParameter/WorkspaceParameter'; -import { Application } from 'app/features/applications/types/application'; -import ConnectorsListManager from 'app/components/connectors-list-manager/connectors-list-manager'; -import MainViewService from 'app/features/router/services/main-view-service'; -import { isArray } from 'lodash'; -import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; -import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; -import { getCompanyApplications } from 'app/features/applications/state/company-applications'; -import Groups from 'app/deprecated/workspaces/groups.js'; -import { useChannel } from 'app/features/channels/hooks/use-channel'; - -export default ({ selected }: { selected: boolean }): JSX.Element => { - const { companyId, workspaceId, channelId } = RouterServices.getStateFromRoute(); - const { channel, save: saveChannel } = useChannel(channelId || ''); - - const configureChannelConnector = (app: Application): void => { - return WorkspacesApps.notifyApp(app.id, 'configuration', 'channel', { - channel: channel, - }); - }; - - const onChange = (ids: string[]): void => { - saveChannel({ ...channel, connectors: ids }); - }; - - const current = () => { - return ( - isArray(channel.connectors) && - channel.connectors - .map((id: string) => getApplication(id)) - .filter(application => application !== undefined) - ); - }; - - if (selected) { - MainViewService.select(MainViewService.getId(), { - app: { - identity: { - code: 'messages', - name: '', - icon: '', - description: '', - website: '', - categories: [], - compatibility: [], - }, - }, - context: { type: 'channel' }, - hasTabs: MainViewService.getConfiguration().hasTabs, - }); - } - - return ( - { - const route: string = RouterServices.generateRouteFromState({ - tabId: '', - }); - return RouterServices.push(route); - }} - > - - - - {Languages.t('scenes.app.mainview.discussion')} - - - {!!selected && - AccessRightsService.hasLevel(workspaceId, 'member') && - AccessRightsService.getCompanyLevel(companyId) !== 'guest' && ( - { - const apps = getCompanyApplications(Groups.currentGroupId).filter( - (app: Application) => - (app?.display?.twake?.configuration || []).includes('channel'), - ); - - if (apps.length) { - return ( - - ); - } - return ( -
- {Languages.t( - 'scenes.app.mainview.tabs.no_connected_connectors_for_channel', - [], - "Vous n'avez aucun connecteur capable de se connecter à une chaîne.", - )} -
- ); - }, - }, - { type: 'separator' }, - { - type: 'menu', - text: Languages.t( - 'scenes.app.mainview.tabs.searching_connectors', - [], - 'Chercher des connecteurs...', - ), - onClick: () => - popupManager.open( - , - true, - ), - }, - ], - }, - ]} - > - -
- )} -
- ); -}; diff --git a/twake/frontend/src/app/views/client/main-view/Tabs/Tab.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/Tab.tsx deleted file mode 100644 index e221adda..00000000 --- a/twake/frontend/src/app/views/client/main-view/Tabs/Tab.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React from 'react'; -import classNames from 'classnames'; -import { TabType } from 'app/features/tabs/types/tab'; -import RouterServices from 'app/features/router/services/router-service'; -import TabsTemplateEditor from './TabsTemplateEditor'; -import ModalManager from 'app/components/modal/modal-manager'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import Menu from 'components/menus/menu.jsx'; -import { MoreHorizontal } from 'react-feather'; -import Languages from 'app/features/global/services/languages-service'; -import { capitalize } from 'lodash'; -import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; -import MainViewService from 'app/features/router/services/main-view-service'; -import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; -import { useTab } from 'app/features/tabs/hooks/use-tabs'; - -type PropsType = { - tabId: string; - currentUserId: string; - selected: boolean; -}; - -export default ({ selected, tabId, currentUserId }: PropsType): JSX.Element => { - const { workspaceId, companyId } = RouterServices.getStateFromRoute(); - const { tab, remove, save } = useTab(tabId || ''); - const isCurrentUserAdmin: boolean = AccessRightsService.useWatcher(() => - AccessRightsService.hasLevel(workspaceId, 'moderator'), - ); - - if (!tab) { - return <>; - } - - if (selected && tab) { - MainViewService.select(MainViewService.getId(), { - context: { - tabId: tab.id, - configuration: tab.configuration || {}, - name: tab.name, - type: 'application', - }, - app: getApplication(tab.application_id || ''), - hasTabs: MainViewService.getConfiguration().hasTabs, - }); - } - - return ( - { - const route: string = RouterServices.generateRouteFromState({ - tabId: tab.id, - }); - return RouterServices.push(route); - }} - > - {WorkspacesApps.getAppIconComponent(tab, { size: 14 })} - {capitalize(tab.name)} - {selected && - AccessRightsService.hasLevel(workspaceId, 'member') && - AccessRightsService.getCompanyLevel(companyId) !== 'guest' && ( - - ModalManager.open( - save(item)} />, - { - position: 'center', - size: { width: '600px', minHeight: '329px' }, - }, - ), - }, - { - type: 'menu', - hide: currentUserId !== tab.owner && !isCurrentUserAdmin, - text:
{Languages.t('general.delete')}
, - onClick: () => remove(), - }, - ]} - > - -
- )} -
- ); -}; diff --git a/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.scss b/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.scss deleted file mode 100644 index 27231807..00000000 --- a/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.scss +++ /dev/null @@ -1,57 +0,0 @@ -.align-items-center { - display: flex; - align-items: center; -} -.tabs-global-container { - width: 100%; - height: 47px; - overflow: auto; - .main-view-tabs { - height: 47px; - margin-inline: 8px; - overflow: auto; - - .tab-component { - cursor: pointer; - line-height: 31px; - margin-right: 8px; - padding-inline: 8px; - &:hover { - opacity: 0.8; - color: var(--primary); - } - } - .tab-component-selected { - cursor: pointer; - line-height: 31px; - margin-right: 8px; - padding-inline: 8px; - border-radius: 8px; - text-shadow: 0 0 0.25px currentColor; - color: var(--primary); - background-color: var(--primary-background); - } - - .tab-name { - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - max-width: 108px; - } - .add-tab-button { - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - border-radius: var(--border-radius-large); - background-color: var(--grey-background); - - &:hover { - background-color: var(--grey-light); - color: var(--grey-dark); - } - } - } -} diff --git a/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.tsx deleted file mode 100644 index dfffd743..00000000 --- a/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import { Plus } from 'react-feather'; -import { TabType } from 'app/features/tabs/types/tab'; - -import TabsTemplateEditor from './TabsTemplateEditor'; -import ModalManager from 'app/components/modal/modal-manager'; -import RouterServices from 'app/features/router/services/router-service'; -import DefaultChannelTab from 'app/views/client/main-view/Tabs/DefaultChannelTab'; -import Tab from 'app/views/client/main-view/Tabs/Tab'; -import UserService from 'app/features/users/services/current-user-service'; -import useTabs from 'app/features/tabs/hooks/use-tabs'; -import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; -import useRouterCompany from '../../../../features/router/hooks/use-router-company'; -import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; -import useRouterTab from 'app/features/router/hooks/use-router-tab'; - -import './Tabs.scss'; - -export default (): JSX.Element => { - const workspaceId = useRouterWorkspace(); - const companyId = useRouterCompany(); - const tabId = useRouterTab(); - const { tabs, save } = useTabs(); - - const currentUser = UserService.getCurrentUser(); - const tabsList = [...tabs]; - - if (tabId && tabs.map(e => e.id).indexOf(tabId || '') < 0) { - const route: string = RouterServices.generateRouteFromState({ - tabId: '', - }); - RouterServices.push(route); - } - - return ( -
- {tabsList.sort((a, b) => (a.order || '').localeCompare(b.order || '')) && ( - - - {tabsList.map((tab: TabType) => { - return ( - tab.id && ( - - ) - ); - })} - {AccessRightsService.hasLevel(workspaceId, 'member') && - AccessRightsService.getCompanyLevel(companyId) !== 'guest' && ( -
{ - return ModalManager.open( - save(item)} - />, - { - position: 'center', - size: { width: '600px', minHeight: '329px' }, - }, - ); - }} - > - -
- )} -
- )} -
- ); -}; diff --git a/twake/frontend/src/app/views/client/main-view/Tabs/TabsTemplateEditor.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/TabsTemplateEditor.tsx deleted file mode 100644 index 21f3ae45..00000000 --- a/twake/frontend/src/app/views/client/main-view/Tabs/TabsTemplateEditor.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { Button, Row, Input, Select } from 'antd'; - -import { Application, AppType } from 'app/features/applications/types/application'; -import Groups from 'app/deprecated/workspaces/groups.js'; -import { TabType } from 'app/features/tabs/types/tab'; -import Icon from 'app/components/icon/icon'; -import ModalManager from 'app/components/modal/modal-manager'; -import ObjectModal from 'components/object-modal/object-modal'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx'; -import Languages from 'app/features/global/services/languages-service'; -import { getCompanyApplications } from 'app/features/applications/state/company-applications'; -import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; -import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; - -const { Option } = Select; - -type PropsType = { - tab?: TabType; - onChangeTabs: (tab: TabType) => void; - currentUserId?: string; -}; - -export default (props: PropsType): JSX.Element => { - const [appId, setAppId] = useState(props.tab?.application_id || ''); - const [tabName, setTabName] = useState(props.tab?.name || ''); - const [, setWorkspacesApps] = useState([]); - const { company } = useCurrentCompany(); - - const { applications: companyApplications } = useCompanyApplications(company?.id || ''); - - useEffect(() => { - generateWorkspacesApps(); - }, []); - - const generateWorkspacesApps = () => { - const apps: AppType[] = getCompanyApplications(Groups.currentGroupId); - return setWorkspacesApps(apps); - }; - - return ( - { - let editedTab: TabType | undefined = props.tab; - - ModalManager.closeAll(); - - if (editedTab?.id) { - editedTab = { - ...editedTab, - name: tabName, - }; - } else { - editedTab = { - name: tabName, - order: '' + new Date().getTime(), - owner: props.currentUserId, - application_id: appId, - configuration: {}, - }; - } - - return props.onChangeTabs(editedTab); - }} - > - {Languages.t(props.tab?.id ? 'general.edit' : 'general.create')} - - } - > -
- - setTabName(e.target.value)} - className="medium full_width bottom-margin" - type="text" - placeholder="Tab name" - /> - - {!props.tab?.id && ( - - - - )} -
-
- ); -}; diff --git a/twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.jsx b/twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.jsx index be3841b3..121e1c18 100755 --- a/twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.jsx +++ b/twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.jsx @@ -90,7 +90,7 @@ export default class UserParameter extends Component {
{this.state.i18n.t('scenes.apps.account.title')}
{this.canEditAccount() && ( <> - {InitService.server_infos?.configuration?.accounts?.type === 'console' && ( + {InitService.server_infos?.configuration?.accounts?.type === 'remote' && ( <> {Languages.t('scenes.apps.account.on_console')} + + )} + {!(inTrash || access === 'read') && ( + <> + + + + )} + + ); +}; diff --git a/twake/frontend/src/app/views/client/side-bar/index.tsx b/twake/frontend/src/app/views/client/side-bar/index.tsx new file mode 100644 index 00000000..12bcb6b2 --- /dev/null +++ b/twake/frontend/src/app/views/client/side-bar/index.tsx @@ -0,0 +1,110 @@ +import { Button } from '@atoms/button/button'; +import { + ClockIcon, + CloudIcon, + ExternalLinkIcon, + HeartIcon, + PlusIcon, + ShareIcon, + TrashIcon, + UploadIcon, +} from '@heroicons/react/outline'; +import { useRecoilState } from 'recoil'; +import { Title } from '../../../atoms/text'; +import { useDriveItem } from '../../../features/drive/hooks/use-drive-item'; +import { DriveCurrentFolderAtom } from '../body/drive/browser'; +import Account from '../common/account'; +import AppGrid from '../common/app-grid'; +import DiskUsage from '../common/disk-usage'; +import Actions from './actions'; + +export default () => { + const [parentId, setParentId] = useRecoilState(DriveCurrentFolderAtom('root')); + const active = false; + const { access: rootAccess } = useDriveItem('root'); + const { inTrash } = useDriveItem(parentId); + const activeClass = 'bg-zinc-50 dark:bg-zinc-800 !text-blue-500'; + return ( +
+
+
+
+
+ +
+ +
+ +
+ Actions +
+ + + +
+ Drive + + {false && ( + <> + + + + )} + {rootAccess === 'manage' && ( + + )} + + {false && ( + <> +
+ Shared + + + + )} +
+ +
+ +
+
+ ); +}; diff --git a/twake/frontend/src/app/views/client/side-bars.tsx b/twake/frontend/src/app/views/client/side-bars.tsx deleted file mode 100755 index f1801e87..00000000 --- a/twake/frontend/src/app/views/client/side-bars.tsx +++ /dev/null @@ -1,24 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-use-before-define -import { Layout } from 'antd'; - -import WorkspacesBar from './workspaces-bar'; - -import { useCurrentCompanyRealtime } from '../../features/companies/hooks/use-companies'; - -import { useNotifications } from 'app/features/users/hooks/use-notifications'; -import { usePreloadSomeUsers } from 'app/features/users/hooks/use-user-list'; -import './workspaces-bar/styles.scss'; - -export default () => { - useCurrentCompanyRealtime(); - - // We call this hook here to be able to preload some users in user list state - usePreloadSomeUsers(); - useNotifications(); - - return ( - - - - ); -}; diff --git a/twake/frontend/src/app/views/client/styles.scss b/twake/frontend/src/app/views/client/styles.scss deleted file mode 100755 index 1dfe6c9e..00000000 --- a/twake/frontend/src/app/views/client/styles.scss +++ /dev/null @@ -1,69 +0,0 @@ -.appPage { - display: flex; - flex-direction: row; - width: 100vw; - height: 100%; - position: absolute; - top: 0; - left: 0; - background: #fff; -} - -.twake_bad_device { - width: 100%; - height: 100%; - background: #fff; - text-align: center; - overflow: hidden; - box-sizing: border-box; - overflow-y: auto; - overflow-x: hidden; - - .top, - .bottom { - padding: 20px; - } - .bottom { - z-index: 2; - position: relative; - width: 100%; - box-sizing: border-box; - } - - .top { - background: var(--primary); - height: 50vh; - position: relative; - &:after { - content: ''; - width: 200%; - height: 270px; - background: #ffffff; - position: absolute; - transform: translateX(-50%) rotateZ(-4deg); - bottom: -200px; - } - .title { - position: absolute; - width: calc(100% - 40px); - margin: auto; - top: 0; - bottom: 0; - height: 150px; - } - } - - .title { - margin-bottom: 40px; - color: var(--white); - } - - .subtitle { - margin-bottom: 40px; - } - - .store_img { - height: 48px; - margin: 8px; - } -} diff --git a/twake/frontend/src/app/views/applications/viewer/archive/controls.tsx b/twake/frontend/src/app/views/client/viewer/archive/controls.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/archive/controls.tsx rename to twake/frontend/src/app/views/client/viewer/archive/controls.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/archive/display.tsx b/twake/frontend/src/app/views/client/viewer/archive/display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/archive/display.tsx rename to twake/frontend/src/app/views/client/viewer/archive/display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/code/controls.tsx b/twake/frontend/src/app/views/client/viewer/code/controls.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/code/controls.tsx rename to twake/frontend/src/app/views/client/viewer/code/controls.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/code/display.tsx b/twake/frontend/src/app/views/client/viewer/code/display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/code/display.tsx rename to twake/frontend/src/app/views/client/viewer/code/display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/controls.tsx b/twake/frontend/src/app/views/client/viewer/controls.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/controls.tsx rename to twake/frontend/src/app/views/client/viewer/controls.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/display.tsx b/twake/frontend/src/app/views/client/viewer/display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/display.tsx rename to twake/frontend/src/app/views/client/viewer/display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/drive-display.tsx b/twake/frontend/src/app/views/client/viewer/drive-display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/drive-display.tsx rename to twake/frontend/src/app/views/client/viewer/drive-display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/drive-preview.tsx b/twake/frontend/src/app/views/client/viewer/drive-preview.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/drive-preview.tsx rename to twake/frontend/src/app/views/client/viewer/drive-preview.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/images/controls.tsx b/twake/frontend/src/app/views/client/viewer/images/controls.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/images/controls.tsx rename to twake/frontend/src/app/views/client/viewer/images/controls.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/images/display.tsx b/twake/frontend/src/app/views/client/viewer/images/display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/images/display.tsx rename to twake/frontend/src/app/views/client/viewer/images/display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/other/controls.tsx b/twake/frontend/src/app/views/client/viewer/other/controls.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/other/controls.tsx rename to twake/frontend/src/app/views/client/viewer/other/controls.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/other/display.tsx b/twake/frontend/src/app/views/client/viewer/other/display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/other/display.tsx rename to twake/frontend/src/app/views/client/viewer/other/display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/other/editors-service.ts b/twake/frontend/src/app/views/client/viewer/other/editors-service.ts similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/other/editors-service.ts rename to twake/frontend/src/app/views/client/viewer/other/editors-service.ts diff --git a/twake/frontend/src/app/views/applications/viewer/pdf/controls.tsx b/twake/frontend/src/app/views/client/viewer/pdf/controls.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/pdf/controls.tsx rename to twake/frontend/src/app/views/client/viewer/pdf/controls.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/pdf/display.tsx b/twake/frontend/src/app/views/client/viewer/pdf/display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/pdf/display.tsx rename to twake/frontend/src/app/views/client/viewer/pdf/display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/videos/controls.tsx b/twake/frontend/src/app/views/client/viewer/videos/controls.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/videos/controls.tsx rename to twake/frontend/src/app/views/client/viewer/videos/controls.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/videos/display.tsx b/twake/frontend/src/app/views/client/viewer/videos/display.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/videos/display.tsx rename to twake/frontend/src/app/views/client/viewer/videos/display.tsx diff --git a/twake/frontend/src/app/views/applications/viewer/viewer.tsx b/twake/frontend/src/app/views/client/viewer/viewer.tsx similarity index 100% rename from twake/frontend/src/app/views/applications/viewer/viewer.tsx rename to twake/frontend/src/app/views/client/viewer/viewer.tsx diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/index.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/index.tsx deleted file mode 100644 index eebff3ac..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/index.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import React, { ReactNode } from 'react'; -import classNames from 'classnames'; -import Menu from 'components/menus/menu'; -import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; -import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; -import RouterService from 'app/features/router/services/router-service'; -import Languages from 'app/features/global/services/languages-service'; -import PopupService from 'app/deprecated/popupManager/popupManager.js'; - -import './styles.scss'; -import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; -import { - useCompanyNotifications, - useOtherCompanyNotifications, -} from 'app/features/users/hooks/use-notifications'; -import menusManager from 'app/components/menus/menus-manager'; -import { UserCompanyType } from 'app/features/users/types/user'; - -type MenuObjectType = { [key: string]: unknown }; - -export default ({ - children, - withCompanyName = true, -}: { - children?: ReactNode; - withCompanyName?: boolean; -}) => { - const { user } = useCurrentUser(); - - return ( - c.company) - .sort((a, b) => a.name.localeCompare(b.name)) - .map(c => ({ - type: 'react-element', - reactElement: ( -
{ - PopupService.closeAll(); - menusManager.closeMenu(); - RouterService.push( - RouterService.generateRouteFromState( - { - companyId: c.id, - }, - { replace: true }, - ), - ); - }} - style={{ display: 'flex' }} - > - -
- ), - key: c.id, - })), - ]} - position="top" - > - {!children && } - {!!children && children} -
- ); -}; - -export const CurrentCompanyLogo = ({ - size, - withCompanyName = true, - showBadge = false, -}: { - size?: number; - withCompanyName?: boolean; - showBadge?: boolean; -}) => { - const { company } = useCurrentCompany(); - const { badges } = useOtherCompanyNotifications(company?.id || ''); - - if (!company) { - return <>; - } - - return ( -
- {showBadge && badges.length > 0 &&
} - -
- {`${company.name}-`[0].toUpperCase()} -
- {withCompanyName ?
{company.name}
: <>} -
- ); -}; - -const CompanyInMenu = (props: { company: UserCompanyType['company'] }) => { - const c = props.company; - const { badges } = useCompanyNotifications(c.id || ''); - - return ( - <> -
-
- {`${c.name}-`[0].toUpperCase()} -
-
- - {c.name} - - {badges.length > 0 &&
{Math.max(1, badges.length)}
} - - ); -}; diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/styles.scss b/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/styles.scss deleted file mode 100644 index 222f6bde..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/styles.scss +++ /dev/null @@ -1,88 +0,0 @@ -.company-selector-container { - width: 100%; - position: relative; - transition: top 0.2s, height 0.2s, opacity 0.2s; - cursor: pointer; - - .image { - color: var(--secondary); - border-radius: var(--border-radius-base); - - background-color: var(--white); - background-size: cover; - background-position: center; - - display: flex !important; - justify-content: center; - align-items: center; - - font-size: 14px; - text-align: center; - width: 32px; - height: 32px; - line-height: 32px; - margin: auto; - margin-bottom: 8px; - background-size: cover; - background-position: center; - font-weight: 500; - overflow: visible; - - &.has_image { - font-size: 0px; - } - } - - .name { - color: var(--white); - opacity: 1; - text-align: center; - font-size: 12px; - height: 16px; - margin-right: 5%; - margin-left: 5%; - font-weight: 500; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - text-transform: capitalize; - } - - .notification_dot { - position: absolute; - top: -8px; - left: calc(50% + 8px); - background: var(--red); - width: 16px; - height: 16px; - border: 2px solid var(--secondary); - box-sizing: border-box; - border-radius: 50%; - } -} - -.company-in-menu { - margin: -8px !important; - - .text { - line-height: 32px; - flex: 1; - } - - .notification_dot { - min-width: 16px; - height: 16px; - color: var(--white); - background: var(--red); - font-size: 10px; - font-weight: 700; - text-align: center; - line-height: 16px; - border-radius: var(--border-radius-small); - margin: 8px 0px; - padding: 0 2px; - vertical-align: top; - box-sizing: border-box; - display: inline-block; - } -} diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/GotALink.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/GotALink.tsx deleted file mode 100644 index 9587d02d..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/GotALink.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Button, Col, Row, Input } from 'antd'; -import React from 'react'; - -export default () => { - const [isInvitationLink, setIsInvitationLink] = React.useState(false); - const [invitationLink, setInvitationLink] = React.useState(''); - return ( -
- setIsInvitationLink(true)}> - Got an invitation link ? - - {isInvitationLink && ( -
- - - setInvitationLink(e.target.value)} - /> - - - - - -
- )} -
- ); -}; diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies.tsx deleted file mode 100644 index 6df0cde6..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React, { Component } from 'react'; -import Emojione from 'components/emojione/emojione'; -import LoginService from 'app/features/auth/login-service'; -import Languages from 'app/features/global/services/languages-service'; -import Groups from 'app/deprecated/workspaces/groups.js'; -import Workspaces from 'app/deprecated/workspaces/workspaces.jsx'; -import GotALink from './GotALink'; - -import './styles.scss'; - -export default class WelcomePage extends Component { - private retrying = false; - constructor(props: unknown) { - super(props); - this.state = { - i18n: Languages, - workspaces: Workspaces, - group: Groups, - page: 1, - }; - Languages.addListener(this); - Workspaces.addListener(this); - Groups.addListener(this); - } - componentWillUnmount() { - Languages.removeListener(this); - Workspaces.removeListener(this); - Groups.removeListener(this); - } - retry() { - if (!this.retrying) { - this.retrying = true; - LoginService.init(); - setTimeout(() => { - this.retrying = false; - }); - } - } - - render() { - return ( -
-
-
-
- {' '} - {Languages.t('scenes.app.workspaces.welcome_page.welcome_header')} -
-
- {Languages.t('scenes.app.workspaces.welcome_page.no_company_subtitle')}{' '} - -
- - - - -
-
-
- ); - } -} diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces.tsx deleted file mode 100644 index 8d76ab22..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import React, { Suspense } from 'react'; -import LoginService from 'app/features/auth/login-service'; -import Languages from 'app/features/global/services/languages-service'; -import CompanySelector, { CurrentCompanyLogo } from '../CompanySelector/index'; -import { Button } from 'antd'; -import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; -import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; -import InitService from 'app/features/global/services/init-service'; -import GotALink from './GotALink'; - -import './styles.scss'; - -export default () => { - const retry = () => { - document.location.reload(); - }; - const { company } = useCurrentCompany(); - - return ( - }> -
-
-
-
- - {Languages.t('scenes.app.workspaces.welcome_page.added_to_company')}{' '} - {company?.name}. -
- {Languages.t('scenes.app.workspaces.welcome_page.no_workspace_subtitle')} -
- - - -
- {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} - retry()}> - {Languages.t('scenes.app.workspaces.welcome_page.try_again')} - -        - {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} - LoginService.logout()}> - {Languages.t('scenes.apps.account.account.logout')} - -
- -
-
- - {InitService.server_infos?.configuration?.accounts?.type === 'console' && ( - - )} -
-
-
-
- ); -}; - -export const ChangeCompany = () => { - const { user } = useCurrentUser(); - - if (user?.companies?.length === 0) { - return <>; - } - - return ( -
- - - -
- ); -}; diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/styles.scss b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/styles.scss deleted file mode 100644 index 9936ff85..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/styles.scss +++ /dev/null @@ -1,69 +0,0 @@ -.welcomePage { - text-align: center; - width: 600px; - padding: 40px; - margin: auto; - margin-top: 20vh; - - .company-selector-container .image { - box-shadow: 0 0 0 2px var(--secondary); - } - - .title { - font-size: 40px; - .emojione { - margin-right: 5px; - width: 64px; - height: 64px; - bottom: 8px; - } - } - .subtitle { - text-align: center; - line-height: 25px; - margin: auto; - margin-top: 30px; - margin-bottom: 40px; - max-width: 500px; - } - .signed { - text-align: right; - opacity: 0.7; - font-size: 13px; - } - .btn { - height: 40px; - line-height: 40px; - border-radius: var(--border-radius-base); - display: inline-block; - padding: 0px 20px; - } - .blueBtn { - background: var(--primary); - color: white; - } - .btn:hover { - cursor: pointer; - box-shadow: inset 0px 0px 100px 100px rgba(255, 255, 255, 0.2); - } - .retry { - border: none; - margin-top: 40px; - - .link { - color: #888; - } - } - .otherMail { - border: none; - margin-top: 40px; - line-height: 20px; - - .label { - border: none; - } - .link { - border: none; - } - } -} diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.scss b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.scss deleted file mode 100755 index b7433f4c..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.scss +++ /dev/null @@ -1,130 +0,0 @@ -.workspace { - width: 100%; - margin-bottom: 24px; - position: relative; - transition: top 0.2s, height 0.2s, opacity 0.2s; - cursor: pointer; - - .image { - transition: background 0.2s; - } - .name { - transition: color 0.2s; - } - - &:hover, - &.is_selected { - .image { - background-color: var(--white); - } - .name { - color: var(--white); - } - &::after { - background: var(--white); - } - } - - .notification_dot { - position: absolute; - top: -8px; - left: calc(50% + 8px); - background: var(--red); - width: 16px; - height: 16px; - border: 2px solid var(--secondary); - box-sizing: border-box; - border-radius: 50%; - } - - //Selector left indicator - &::after { - content: ''; - width: 4px; - border-radius: 0 2px 2px 0; - height: 4px; - top: 14px; - position: absolute; - left: 0px; - background: var(--grey-dark); - opacity: 0; - transition: top 0.2s, height 0.2s, background 0.2s; - } - &.is_selected { - &::after { - height: 32px !important; - top: 0px !important; - opacity: 1; - background: var(--white); - } - } - &.has_notifications { - &::after { - height: 8px; - top: 12px; - opacity: 1; - border-radius: 0 4px 4px 0; - } - } - - .image { - background-color: var(--grey-dark); - background-size: cover; - background-position: center; - color: var(--secondary); - font-size: 14px; - text-align: center; - width: 32px; - height: 32px; - line-height: 32px; - border-radius: var(--border-radius-base); - margin: auto; - margin-bottom: 8px; - background-size: cover; - background-position: center; - font-weight: 500; - overflow: visible; - - &.has_image { - font-size: 0px; - } - } - - .name { - color: var(--grey-dark); - opacity: 1; - text-align: center; - font-size: 12px; - height: 16px; - margin-right: 5%; - margin-left: 5%; - font-weight: 500; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - text-transform: capitalize; - } -} - -.loading_render { - .workspace { - pointer-events: none; - &::after, - .notification_dot { - opacity: 0 !important; - } - .image { - font-size: 0px; - background: var(--grey-dark) !important; - } - .name { - background: var(--grey-dark); - border-radius: var(--border-radius-large); - width: 32px; - margin: auto; - height: 12px; - font-size: 0px; - margin-bottom: 28px; - } - } -} diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.tsx deleted file mode 100755 index c81924fe..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.tsx +++ /dev/null @@ -1,23 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-use-before-define -import React from 'react'; - -import WorkspacesService from 'app/deprecated/workspaces/workspaces'; -import WorkspaceIcon from './WorkspaceIcon'; -import { WorkspaceType } from 'app/features/workspaces/types/workspace'; -import useRouterWorkspaceSelected from 'app/features/router/hooks/use-router-workspace-selected'; - -import './Workspace.scss'; - -type Props = { - workspace: WorkspaceType; -}; - -export default ({ workspace }: Props): JSX.Element => { - return ( - WorkspacesService.select(workspace)} - /> - ); -}; diff --git a/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/WorkspaceIcon.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/WorkspaceIcon.tsx deleted file mode 100755 index 2f58e159..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/WorkspaceIcon.tsx +++ /dev/null @@ -1,48 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-use-before-define -import React from 'react'; -import classNames from 'classnames'; -import { Skeleton } from 'antd'; - -import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; -import { WorkspaceType } from 'app/features/workspaces/types/workspace'; -import { useWorkspaceNotifications } from 'app/features/users/hooks/use-notifications'; - -type Props = { - workspace: WorkspaceType; - selected: boolean; - onClick: () => void; -}; - -export default (props: Props): JSX.Element => { - const { badges } = useWorkspaceNotifications(props.workspace.id || ''); - const unreadInWorkspace = badges.length; - const workspace = props.workspace || {}; - const name = workspace.mininame || workspace.name || ''; - - return ( -
0, - })} - onClick={props.onClick} - > -
- {workspace.name !== '' && `${name}-`[0].toUpperCase()} - {unreadInWorkspace > 0 &&
} -
-
{name}
-
- ); -}; - -export const LoadingWorkspaceIcon = () => { - const size = 32; - const shape = 'square'; - return ; -}; diff --git a/twake/frontend/src/app/views/client/workspaces-bar/index.tsx b/twake/frontend/src/app/views/client/workspaces-bar/index.tsx deleted file mode 100755 index 2d2eb003..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { useEffect } from 'react'; -import PerfectScrollbar from 'react-perfect-scrollbar'; -import { Layout, Skeleton } from 'antd'; - -import { WorkspaceType } from 'app/features/workspaces/types/workspace'; -import Workspace from './components/Workspace/Workspace'; -import { useWorkspaces } from 'app/features/workspaces/hooks/use-workspaces'; -import useRouterCompany from 'app/features/router/hooks/use-router-company'; -import { LoadingWorkspaceIcon } from './components/Workspace/WorkspaceIcon'; -import CompanySelector from './components/CompanySelector'; - -import './styles.scss'; - -export default () => { - const companyId = useRouterCompany(); - - return ( - - {companyId && } - - - ); -}; - -const WorkspaceListComponent = ({ companyId }: { companyId: string }) => { - const { workspaces, refresh } = useWorkspaces(companyId); - - useEffect(() => { - companyId && refresh(); - }, [companyId]); - - return ( - - {workspaces.map((ws: WorkspaceType) => ( - - ))} - - ); -}; - -export const LoadingWorkspaceBar = () => { - return ( - -
- - -
- -
- ); -}; diff --git a/twake/frontend/src/app/views/client/workspaces-bar/styles.scss b/twake/frontend/src/app/views/client/workspaces-bar/styles.scss deleted file mode 100755 index b6f94a7b..00000000 --- a/twake/frontend/src/app/views/client/workspaces-bar/styles.scss +++ /dev/null @@ -1,121 +0,0 @@ -.has_workspaces.animated { - .workspaces_view { - animation: init_workspaces_view_60 ease 0.2s; - } -} -.workspaces_view { - background: var(--secondary); - width: 60px; - min-width: 60px; - overflow: hidden; - padding-bottom: 8px; - transition: width 0.2s; - div { - display: flex; - flex-direction: column; - align-items: center; - .list { - padding-top: 20px; - width: 100%; - - &:not(.ps--scrolling-y) { - .ps__rail-y { - display: none; - } - } - } - } -} - -.workpaces_view_loading { - padding-bottom: 30px; - div { - display: flex; - flex-direction: column; - align-items: center; - .list { - position: relative; - height: 100%; - padding-top: 20px; - } - } -} - -.no_workspaces { - .workspaces_view { - width: 0px !important; - min-width: 0px !important; - } -} - -.electron { - .workspaces_view { - width: 70px; - .list { - padding-top: 30px; - } - } - .has_workspaces.animated { - .workspaces_view { - animation: init_workspaces_view_70 ease 0.2s; - } - } -} - -.group_in_selector { - position: relative; - margin: -8px !important; - - &.menu .icon { - .letter, - .emojione { - width: 20px; - height: 20px; - line-height: 20px; - font-size: 13px; - margin: 0px; - } - } - - .group_notification { - .notification, - .badge { - position: absolute; - right: 8px; - top: 8px; - margin-top: 0px !important; - margin-left: 5px; - background: var(--red); - width: 16px; - height: 16px; - border-radius: var(--border-radius-large); - color: var(--white); - font-size: 12px; - line-height: 16px; - text-align: center; - min-width: 16px; - - &.circle { - margin-top: 7px; - } - } - } -} - -@keyframes init_workspaces_view_60 { - 0% { - width: 0px; - } - 100% { - width: 60px; - } -} - -@keyframes init_workspaces_view_70 { - 0% { - width: 0px; - } - 100% { - width: 70px; - } -} diff --git a/twake/frontend/src/app/views/integration/components/apps.jsx b/twake/frontend/src/app/views/integration/components/apps.jsx deleted file mode 100644 index b330e779..00000000 --- a/twake/frontend/src/app/views/integration/components/apps.jsx +++ /dev/null @@ -1,51 +0,0 @@ -/* eslint-disable react/prop-types */ -import React from 'react'; -import AppsIcon from '@material-ui/icons/Apps'; -import Popover from '@material-ui/core/Popover'; -import IconButton from '@material-ui/core/IconButton'; - -export default function Apps(props) { - const [anchorEl, setAnchorEl] = React.useState(null); - - const handleClick = event => { - setAnchorEl(event.currentTarget); - }; - - const handleClose = () => { - setAnchorEl(null); - }; - - const open = Boolean(anchorEl); - const id = open ? 'simple-popover' : undefined; - - return ( -
- - - - -
- {props.apps.map(item => ( - - - -
- ); -} diff --git a/twake/frontend/src/app/views/integration/index.tsx b/twake/frontend/src/app/views/integration/index.tsx deleted file mode 100644 index aa2fae24..00000000 --- a/twake/frontend/src/app/views/integration/index.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react'; - -import InitService from 'app/features/global/services/init-service'; -import Apps from './components/apps.jsx'; - -import './styles.scss'; - -export default (props: { children: React.ReactNode }): JSX.Element => { - const server_infos = InitService.useWatcher( - () => InitService.server_infos_loaded && InitService.server_infos, - ); - - if (!server_infos) { - return <>; - } - - const branding = (server_infos && server_infos?.configuration?.branding) || {}; - - if (!(branding || {}).name) { - return <>{props.children}; - } - - if (branding.style && branding.style.color) { - document.documentElement.style.setProperty('--primary', branding.style.color); - document.documentElement.style.setProperty( - '--primary-background', - branding.style.color.substr(0, 7) + '22', - ); - document.documentElement.style.setProperty( - '--primary-hover', - branding.style.color.substr(0, 7) + 'AA', - ); - document.documentElement.style.setProperty('--secondary', '#38383d'); - } - if (branding.style && branding.style.default_border_radius) { - document.documentElement.style.setProperty( - '--border-radius-base', - branding.style.default_border_radius + 'px', - ); - } - - return ( -
- {branding.header && ( -
- {(branding.header.logo || branding.logo) && ( -
- )} -
- -
-
- )} -
{props.children}
-
- ); -}; diff --git a/twake/frontend/src/app/views/integration/styles.scss b/twake/frontend/src/app/views/integration/styles.scss deleted file mode 100644 index 56338ce2..00000000 --- a/twake/frontend/src/app/views/integration/styles.scss +++ /dev/null @@ -1,61 +0,0 @@ -.integration { - display: flex; - flex-direction: column; - height: 100vh; - width: 100vw; - - & > .integration-header { - padding: 8px; - transition: height 0.2s; - background: var(--primary); - display: flex; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); - z-index: 1; - - svg { - color: #fff; - } - - .logo { - flex: 1; - background-position: left; - background-repeat: no-repeat; - background-size: auto 60%; - } - } - - & > .integrated-app { - flex: 1; - overflow: hidden; - - & > .appPage { - height: 100%; - position: initial; - } - } -} - -.integration-apps { - max-width: 290px; - margin-bottom: 8px; - .app { - opacity: 0.9; - display: inline-block; - text-align: center; - color: initial; - font-size: 12px; - font-weight: 500; - margin: 8px; - - &:hover { - opacity: 1; - } - - .image { - width: 80px; - height: 80px; - background-size: contain; - background-position: center; - } - } -} diff --git a/twake/frontend/src/app/views/join/index.tsx b/twake/frontend/src/app/views/join/index.tsx index 235c09fb..2d7cd1af 100644 --- a/twake/frontend/src/app/views/join/index.tsx +++ b/twake/frontend/src/app/views/join/index.tsx @@ -29,7 +29,7 @@ export default (): JSX.Element => { const [error, setError] = useState(); const [info, setInfo] = useState(); const [busy, setBusy] = useState(false); - const [,setCookie] = useCookies(['pending-redirect']); + const [, setCookie] = useCookies(['pending-redirect']); if (info?.company?.plan) FeatureTogglesService.setFeaturesFromCompanyPlan(info?.company?.plan); @@ -67,7 +67,7 @@ export default (): JSX.Element => { const currentPage = document.location.href; const authUrl = `${ - InitService.server_infos?.configuration?.accounts?.console?.authority + InitService.server_infos?.configuration?.accounts?.remote?.authority }/oauth2/authorize?invite=1&redirect_uri=${encodeURIComponent(origin)}`; setCookie('pending-redirect', currentPage, { path: '/', maxAge: 60 * 60 }); setBusy(true); @@ -92,7 +92,7 @@ export default (): JSX.Element => { }; const onCreateCompanyBtnClick = () => { - if (InitService.server_infos?.configuration?.accounts?.type === 'console') { + if (InitService.server_infos?.configuration?.accounts?.type === 'remote') { return document.location.replace(InitService.getConsoleLink('account_management_url')); } else { document.location.replace('/'); diff --git a/twake/frontend/src/app/views/login/internal/internal-login.tsx b/twake/frontend/src/app/views/login/internal/internal-login.tsx index d3412c26..68a608d7 100755 --- a/twake/frontend/src/app/views/login/internal/internal-login.tsx +++ b/twake/frontend/src/app/views/login/internal/internal-login.tsx @@ -7,7 +7,7 @@ import InitService from 'app/features/global/services/init-service'; import LoginService from 'app/features/auth/login-service'; import Icon from 'app/components/icon/icon.jsx'; -import LoginView from './login-view/login-view.jsx'; +import LoginView from './login-view/login-view'; import Signin from './signin/signin.jsx'; import VerifyMail from './verify-mail/verify-mail.jsx'; import ForgotPassword from './forgot-password/index.jsx'; diff --git a/twake/frontend/src/app/views/login/login.tsx b/twake/frontend/src/app/views/login/login.tsx index 7fd6a002..3bc95bec 100644 --- a/twake/frontend/src/app/views/login/login.tsx +++ b/twake/frontend/src/app/views/login/login.tsx @@ -8,7 +8,7 @@ const ConsoleLogin = lazy(() => import('app/views/login/console/console-login')) export default () => ( }> - {InitService.server_infos?.configuration?.accounts.type === 'console' ? ( + {InitService.server_infos?.configuration?.accounts.type === 'remote' ? ( ) : ( diff --git a/twake/frontend/tailwind.config.js b/twake/frontend/tailwind.config.js index 988f5089..c700e62d 100644 --- a/twake/frontend/tailwind.config.js +++ b/twake/frontend/tailwind.config.js @@ -1,7 +1,7 @@ const defaultTheme = require('tailwindcss/defaultTheme'); let shades = []; -['zink', 'red', 'orange', 'green', 'blue'].map(color => { +['zinc', 'red', 'orange', 'green', 'blue'].map(color => { [50, 100, 200, 300, 400, 500, 600, 700, 800, 900].map(shade => { shades.push(`bg-${color}-${shade}`); shades.push(`border-${color}-${shade}`); @@ -14,7 +14,7 @@ let shades = []; module.exports = { content: ['./src/**/*.{html,js,ts,tsx}'], - darkMode: 'class', + darkMode: 'media', //Use browser configuration theme: { extend: { fontFamily: { @@ -27,10 +27,10 @@ module.exports = { sm: '8px', }, fontSize: { - lg: '18px', - base: '16px', - sm: '14px', - xs: '12px', + lg: '17px', + base: '15px', + sm: '13px', + xs: '11px', }, colors: {