From 3d09a69d5803369fe2945de51dacf0e52d46bce6 Mon Sep 17 00:00:00 2001 From: sriram veeraghanta Date: Wed, 6 Mar 2024 18:39:14 +0530 Subject: [PATCH] fix: eslint issues and reconfiguring (#3891) * fix: eslint fixes --------- Co-authored-by: gurusainath --- CONTRIBUTING.md | 1 - ENV_SETUP.md | 1 - README.md | 36 +- deploy/1-click/README.md | 30 +- packages/editor/core/package.json | 3 +- packages/editor/document-editor/package.json | 3 +- .../src/ui/components/content-browser.tsx | 2 +- .../src/ui/components/summary-popover.tsx | 5 +- .../src/ui/extensions/index.tsx | 1 - packages/editor/extensions/package.json | 3 +- packages/editor/lite-text-editor/package.json | 3 +- packages/editor/rich-text-editor/package.json | 2 +- packages/eslint-config-custom/index.js | 33 +- packages/eslint-config-custom/package.json | 22 +- packages/types/src/pages.d.ts | 7 +- packages/types/src/state.d.ts | 7 +- packages/types/src/views.d.ts | 6 +- packages/ui/src/badge/helper.tsx | 10 +- packages/ui/src/breadcrumbs/breadcrumbs.tsx | 15 +- packages/ui/src/button/helper.tsx | 10 +- packages/ui/src/control-link/control-link.tsx | 4 +- space/components/ui/dropdown.tsx | 6 +- space/lib/mobx/store-provider.tsx | 8 +- space/package.json | 2 - web/.eslintrc.js | 99 +++ .../account/deactivate-account-modal.tsx | 8 +- .../account/o-auth/o-auth-options.tsx | 6 +- .../sign-in-forms/optional-set-password.tsx | 2 +- .../account/sign-in-forms/password.tsx | 12 +- web/components/account/sign-in-forms/root.tsx | 12 +- .../account/sign-in-forms/unique-code.tsx | 12 +- .../account/sign-up-forms/email.tsx | 6 +- .../sign-up-forms/optional-set-password.tsx | 14 +- .../account/sign-up-forms/password.tsx | 6 +- web/components/account/sign-up-forms/root.tsx | 10 +- .../account/sign-up-forms/unique-code.tsx | 11 +- .../custom-analytics/custom-analytics.tsx | 10 +- .../custom-analytics/graph/custom-tooltip.tsx | 4 +- .../custom-analytics/graph/index.tsx | 8 +- .../custom-analytics/main-content.tsx | 4 +- .../analytics/custom-analytics/select-bar.tsx | 7 +- .../custom-analytics/select/project.tsx | 2 +- .../custom-analytics/select/segment.tsx | 2 +- .../custom-analytics/select/x-axis.tsx | 2 +- .../custom-analytics/select/y-axis.tsx | 2 +- .../sidebar/projects-list.tsx | 2 +- .../sidebar/sidebar-header.tsx | 8 +- .../custom-analytics/sidebar/sidebar.tsx | 20 +- .../analytics/custom-analytics/table.tsx | 2 +- .../analytics/project-modal/main-content.tsx | 9 +- .../analytics/project-modal/modal.tsx | 10 +- .../analytics/scope-and-demand/demand.tsx | 2 +- .../scope-and-demand/scope-and-demand.tsx | 4 +- .../scope-and-demand/year-wise-issues.tsx | 2 +- .../api-token/delete-token-modal.tsx | 4 +- .../api-token/modal/create-token-modal.tsx | 11 +- web/components/api-token/token-list-item.tsx | 2 +- .../auth-screens/not-authorized-view.tsx | 6 +- .../auth-screens/project/join-project.tsx | 4 +- .../auth-screens/workspace/not-a-member.tsx | 2 +- .../automation/auto-archive-automation.tsx | 4 +- .../automation/auto-close-automation.tsx | 8 +- web/components/breadcrumbs/index.tsx | 2 +- .../command-palette/actions/help-actions.tsx | 2 +- .../actions/issue-actions/actions-list.tsx | 10 +- .../actions/issue-actions/change-assignee.tsx | 8 +- .../actions/issue-actions/change-priority.tsx | 8 +- .../actions/issue-actions/change-state.tsx | 10 +- .../actions/project-actions.tsx | 2 +- .../actions/search-results.tsx | 2 +- .../command-palette/actions/theme-actions.tsx | 6 +- .../actions/workspace-settings-actions.tsx | 4 +- .../command-palette/command-modal.tsx | 22 +- .../command-palette/command-palette.tsx | 15 +- web/components/command-palette/helpers.tsx | 2 +- .../command-palette/shortcuts-modal/modal.tsx | 2 +- web/components/common/breadcrumb-link.tsx | 2 +- .../common/product-updates-modal.tsx | 8 +- web/components/core/activity.tsx | 6 +- .../core/filters/date-filter-modal.tsx | 15 +- web/components/core/image-picker-popover.tsx | 12 +- .../core/modals/bulk-delete-issues-modal.tsx | 15 +- .../modals/existing-issues-list-modal.tsx | 13 +- .../core/modals/gpt-assistant-popover.tsx | 14 +- web/components/core/modals/link-modal.tsx | 4 +- .../core/modals/user-image-upload-modal.tsx | 7 +- .../modals/workspace-image-upload-modal.tsx | 8 +- web/components/core/render-if-visible-HOC.tsx | 11 +- web/components/core/sidebar/links-list.tsx | 11 +- .../sidebar/sidebar-menu-hamburger-toggle.tsx | 2 +- .../core/sidebar/sidebar-progress-stats.tsx | 4 +- .../core/theme/color-picker-input.tsx | 4 +- .../core/theme/custom-theme-selector.tsx | 4 +- web/components/core/theme/theme-switch.tsx | 2 +- .../cycles/active-cycle-details.tsx | 20 +- web/components/cycles/active-cycle-stats.tsx | 4 +- web/components/cycles/cycle-mobile-header.tsx | 9 +- web/components/cycles/cycle-peek-overview.tsx | 2 +- web/components/cycles/cycles-board-card.tsx | 18 +- web/components/cycles/cycles-board.tsx | 2 +- web/components/cycles/cycles-list-item.tsx | 24 +- web/components/cycles/cycles-list.tsx | 4 +- web/components/cycles/cycles-view.tsx | 10 +- web/components/cycles/delete-modal.tsx | 6 +- web/components/cycles/form.tsx | 2 +- web/components/cycles/gantt-chart/blocks.tsx | 28 +- .../cycles/gantt-chart/cycles-list-layout.tsx | 8 +- web/components/cycles/modal.tsx | 10 +- web/components/cycles/sidebar.tsx | 35 +- .../cycles/transfer-issues-modal.tsx | 11 +- web/components/cycles/transfer-issues.tsx | 6 +- .../dashboard/home-dashboard-widgets.tsx | 4 +- .../dashboard/project-empty-state.tsx | 6 +- .../dashboard/widgets/assigned-issues.tsx | 10 +- .../dashboard/widgets/created-issues.tsx | 10 +- .../widgets/dropdowns/duration-filter.tsx | 3 +- .../widgets/empty-states/assigned-issues.tsx | 2 +- .../widgets/empty-states/created-issues.tsx | 2 +- .../widgets/issue-panels/issue-list-item.tsx | 4 +- .../widgets/issue-panels/issues-list.tsx | 4 +- .../widgets/issue-panels/tabs-list.tsx | 2 +- .../dashboard/widgets/issues-by-priority.tsx | 16 +- .../widgets/issues-by-state-group.tsx | 30 +- .../dashboard/widgets/loaders/loader.tsx | 4 +- .../dashboard/widgets/overview-stats.tsx | 7 +- .../dashboard/widgets/recent-activity.tsx | 20 +- .../widgets/recent-collaborators.tsx | 94 +++ .../collaborators-list.tsx | 6 +- .../recent-collaborators/default-list.tsx | 2 +- .../widgets/recent-collaborators/root.tsx | 11 +- .../recent-collaborators/search-list.tsx | 2 +- .../dashboard/widgets/recent-projects.tsx | 12 +- web/components/dropdowns/buttons.tsx | 8 +- .../dropdowns/cycle/cycle-options.tsx | 30 +- web/components/dropdowns/cycle/index.tsx | 6 +- web/components/dropdowns/date-range.tsx | 10 +- web/components/dropdowns/date.tsx | 8 +- web/components/dropdowns/estimate.tsx | 12 +- web/components/dropdowns/member/avatar.tsx | 2 +- web/components/dropdowns/member/index.tsx | 8 +- .../dropdowns/member/member-options.tsx | 8 +- web/components/dropdowns/module/index.tsx | 17 +- .../dropdowns/module/module-options.tsx | 10 +- web/components/dropdowns/priority.tsx | 18 +- web/components/dropdowns/project.tsx | 16 +- web/components/dropdowns/state.tsx | 8 +- web/components/emoji-icon-picker/index.tsx | 8 +- .../empty-state/comic-box-button.tsx | 2 +- web/components/empty-state/empty-state.tsx | 2 +- .../create-update-estimate-modal.tsx | 8 +- .../estimates/delete-estimate-modal.tsx | 5 +- .../estimates/estimate-list-item.tsx | 8 +- web/components/estimates/estimates-list.tsx | 12 +- web/components/exporter/export-modal.tsx | 5 +- web/components/exporter/guide.tsx | 21 +- web/components/exporter/single-export.tsx | 12 +- web/components/gantt-chart/blocks/block.tsx | 8 +- .../gantt-chart/blocks/blocks-list.tsx | 5 +- web/components/gantt-chart/chart/header.tsx | 6 +- .../gantt-chart/chart/main-content.tsx | 2 +- web/components/gantt-chart/chart/root.tsx | 18 +- .../gantt-chart/chart/views/month.tsx | 2 +- web/components/gantt-chart/contexts/index.tsx | 16 +- .../gantt-chart/helpers/add-block.tsx | 4 +- .../gantt-chart/helpers/draggable.tsx | 2 +- .../gantt-chart/sidebar/cycles/block.tsx | 6 +- .../gantt-chart/sidebar/cycles/sidebar.tsx | 2 +- .../gantt-chart/sidebar/issues/block.tsx | 4 +- .../gantt-chart/sidebar/issues/sidebar.tsx | 2 +- .../gantt-chart/sidebar/modules/block.tsx | 4 +- .../gantt-chart/sidebar/modules/sidebar.tsx | 2 +- .../gantt-chart/sidebar/project-views.tsx | 2 +- .../gantt-chart/views/bi-week-view.ts | 2 +- web/components/gantt-chart/views/day-view.ts | 2 +- web/components/gantt-chart/views/helpers.ts | 4 +- .../gantt-chart/views/hours-view.ts | 2 +- .../gantt-chart/views/month-view.ts | 4 +- .../gantt-chart/views/quater-view.ts | 2 +- web/components/gantt-chart/views/week-view.ts | 2 +- web/components/gantt-chart/views/year-view.ts | 2 +- web/components/graphs/issues-by-priority.tsx | 6 +- web/components/headers/cycle-issues.tsx | 30 +- web/components/headers/cycles.tsx | 17 +- web/components/headers/global-issues.tsx | 22 +- web/components/headers/module-issues.tsx | 30 +- web/components/headers/modules-list.tsx | 40 +- web/components/headers/page-details.tsx | 8 +- web/components/headers/pages.tsx | 10 +- web/components/headers/profile-settings.tsx | 2 +- .../project-archived-issue-details.tsx | 16 +- .../headers/project-archived-issues.tsx | 10 +- .../headers/project-draft-issues.tsx | 14 +- web/components/headers/project-inbox.tsx | 8 +- .../headers/project-issue-details.tsx | 22 +- web/components/headers/project-issues.tsx | 22 +- web/components/headers/project-settings.tsx | 8 +- .../headers/project-view-issues.tsx | 30 +- web/components/headers/project-views.tsx | 8 +- web/components/headers/projects.tsx | 6 +- web/components/headers/user-profile.tsx | 111 +-- .../headers/workspace-active-cycles.tsx | 2 +- .../headers/workspace-analytics.tsx | 26 +- .../headers/workspace-dashboard.tsx | 6 +- web/components/headers/workspace-settings.tsx | 6 +- web/components/icons/priority-icon.tsx | 12 +- .../icons/state/state-group-icon.tsx | 2 +- web/components/inbox/content/root.tsx | 6 +- web/components/inbox/inbox-issue-actions.tsx | 22 +- web/components/inbox/inbox-issue-status.tsx | 2 +- .../inbox/modals/accept-issue-modal.tsx | 2 +- .../inbox/modals/create-issue-modal.tsx | 18 +- .../inbox/modals/decline-issue-modal.tsx | 2 +- .../inbox/modals/delete-issue-modal.tsx | 2 +- .../inbox/modals/select-duplicate.tsx | 8 +- .../inbox/sidebar/filter/applied-filters.tsx | 16 +- .../inbox/sidebar/filter/filter-selection.tsx | 6 +- .../inbox/sidebar/inbox-list-item.tsx | 4 +- web/components/inbox/sidebar/inbox-list.tsx | 8 +- web/components/inbox/sidebar/root.tsx | 4 +- web/components/instance/ai-form.tsx | 1 - web/components/instance/email-form.tsx | 3 +- web/components/instance/general-form.tsx | 1 - .../instance/github-config-form.tsx | 1 - .../instance/google-config-form.tsx | 1 - web/components/instance/help-section.tsx | 4 +- web/components/instance/image-config-form.tsx | 3 +- .../instance/instance-admin-restriction.tsx | 6 +- web/components/instance/not-ready-view.tsx | 2 +- web/components/instance/setup-done-view.tsx | 4 +- .../instance/setup-form/sign-in-form.tsx | 6 +- web/components/instance/sidebar-dropdown.tsx | 6 +- web/components/instance/sidebar-menu.tsx | 2 +- .../integration/delete-import-modal.tsx | 6 +- web/components/integration/github/auth.tsx | 2 +- .../integration/github/import-data.tsx | 4 +- .../integration/github/repo-details.tsx | 5 +- web/components/integration/github/root.tsx | 15 +- .../integration/github/select-repository.tsx | 2 +- .../integration/github/single-user-select.tsx | 4 +- web/components/integration/guide.tsx | 24 +- .../integration/jira/give-details.tsx | 4 +- .../integration/jira/import-users.tsx | 6 +- .../integration/jira/jira-project-detail.tsx | 6 +- web/components/integration/jira/root.tsx | 16 +- web/components/integration/single-import.tsx | 12 +- .../integration/single-integration-card.tsx | 16 +- .../integration/slack/select-channel.tsx | 6 +- web/components/issues/archive-issue-modal.tsx | 6 +- .../issues/attachment/attachment-detail.tsx | 8 +- .../issues/attachment/attachment-upload.tsx | 2 +- .../issues/attachment/attachments-list.tsx | 1 + .../delete-attachment-confirmation-modal.tsx | 2 +- web/components/issues/attachment/root.tsx | 2 +- web/components/issues/delete-issue-modal.tsx | 2 - web/components/issues/description-form.tsx | 18 +- web/components/issues/description-input.tsx | 9 +- .../issues/issue-detail/cycle-select.tsx | 7 +- .../issues/issue-detail/inbox/index.ts | 6 +- .../issue-detail/inbox/main-content.tsx | 14 +- .../issues/issue-detail/inbox/root.tsx | 16 +- .../issues/issue-detail/inbox/sidebar.tsx | 8 +- .../issue-activity/activity-comment-root.tsx | 1 + .../activity/actions/archived-at.tsx | 2 +- .../activity/actions/assignee.tsx | 4 +- .../issue-activity/activity/actions/cycle.tsx | 2 +- .../activity/actions/default.tsx | 2 +- .../activity/actions/estimate.tsx | 2 - .../actions/helpers/activity-block.tsx | 6 +- .../activity/actions/helpers/issue-link.tsx | 2 +- .../activity/actions/module.tsx | 2 +- .../activity/actions/relation.tsx | 4 +- .../activity/actions/start_date.tsx | 2 +- .../issue-activity/activity/actions/state.tsx | 2 +- .../activity/actions/target_date.tsx | 2 +- .../issue-activity/activity/root.tsx | 1 + .../issue-activity/comments/comment-block.tsx | 4 +- .../issue-activity/comments/comment-card.tsx | 14 +- .../comments/comment-create.tsx | 12 +- .../issue-activity/comments/root.tsx | 3 +- .../issue-detail/issue-activity/root.tsx | 4 +- .../issue-detail/label/create-label.tsx | 12 +- .../issue-detail/label/label-list-item.tsx | 2 +- .../issues/issue-detail/label/label-list.tsx | 3 +- .../issues/issue-detail/label/root.tsx | 4 +- .../label/select/label-select.tsx | 10 +- .../issues/issue-detail/label/select/root.tsx | 2 +- .../links/create-update-link-modal.tsx | 4 +- .../issues/issue-detail/links/link-detail.tsx | 8 +- .../issues/issue-detail/links/links.tsx | 3 +- .../issues/issue-detail/links/root.tsx | 4 +- .../issues/issue-detail/main-content.tsx | 10 +- .../issues/issue-detail/module-select.tsx | 9 +- .../issues/issue-detail/parent-select.tsx | 6 +- .../issues/issue-detail/parent/root.tsx | 4 +- .../issues/issue-detail/parent/siblings.tsx | 6 +- .../issue-detail/reactions/issue-comment.tsx | 17 +- .../issues/issue-detail/reactions/issue.tsx | 7 +- .../reactions/reaction-selector.tsx | 2 +- .../issues/issue-detail/relation-select.tsx | 18 +- web/components/issues/issue-detail/root.tsx | 29 +- .../issues/issue-detail/sidebar.tsx | 136 ++-- .../issues/issue-detail/subscription.tsx | 6 +- .../calendar/base-calendar-root.tsx | 16 +- .../issue-layouts/calendar/calendar.tsx | 12 +- .../issue-layouts/calendar/day-tile.tsx | 6 +- .../calendar/dropdowns/months-dropdown.tsx | 4 +- .../calendar/dropdowns/options-dropdown.tsx | 10 +- .../issues/issue-layouts/calendar/header.tsx | 2 +- .../issue-layouts/calendar/issue-blocks.tsx | 6 +- .../calendar/quick-add-issue-form.tsx | 10 +- .../calendar/roots/cycle-root.tsx | 8 +- .../calendar/roots/module-root.tsx | 8 +- .../calendar/roots/project-root.tsx | 10 +- .../calendar/roots/project-view-root.tsx | 8 +- .../issue-layouts/calendar/week-days.tsx | 4 +- .../empty-states/archived-issues.tsx | 10 +- .../issue-layouts/empty-states/cycle.tsx | 16 +- .../empty-states/draft-issues.tsx | 10 +- .../empty-states/global-view.tsx | 2 +- .../issue-layouts/empty-states/module.tsx | 14 +- .../empty-states/project-issues.tsx | 10 +- .../empty-states/project-view.tsx | 4 +- .../filters/applied-filters/cycle.tsx | 2 +- .../filters/applied-filters/date.tsx | 2 +- .../filters/applied-filters/filters-list.tsx | 9 +- .../filters/applied-filters/module.tsx | 2 +- .../filters/applied-filters/priority.tsx | 2 +- .../filters/applied-filters/project.tsx | 2 +- .../applied-filters/roots/archived-issue.tsx | 6 +- .../applied-filters/roots/cycle-root.tsx | 6 +- .../applied-filters/roots/draft-issue.tsx | 6 +- .../roots/global-view-root.tsx | 10 +- .../applied-filters/roots/module-root.tsx | 6 +- .../roots/profile-issues-root.tsx | 6 +- .../applied-filters/roots/project-root.tsx | 6 +- .../roots/project-view-root.tsx | 10 +- .../filters/applied-filters/state-group.tsx | 2 +- .../filters/applied-filters/state.tsx | 2 +- .../display-filters-selection.tsx | 4 +- .../display-filters/display-properties.tsx | 4 +- .../header/display-filters/extra-options.tsx | 2 +- .../header/display-filters/group-by.tsx | 2 +- .../header/display-filters/issue-type.tsx | 2 +- .../header/display-filters/order-by.tsx | 2 +- .../header/display-filters/sub-group-by.tsx | 2 +- .../filters/header/filters/assignee.tsx | 8 +- .../filters/header/filters/created-by.tsx | 8 +- .../filters/header/filters/cycle.tsx | 4 +- .../header/filters/filters-selection.tsx | 6 +- .../filters/header/filters/labels.tsx | 2 +- .../filters/header/filters/mentions.tsx | 8 +- .../filters/header/filters/module.tsx | 4 +- .../filters/header/filters/project.tsx | 4 +- .../filters/header/filters/start-date.tsx | 2 +- .../filters/header/filters/state-group.tsx | 2 +- .../filters/header/filters/state.tsx | 2 +- .../filters/header/filters/target-date.tsx | 2 +- .../filters/header/helpers/dropdown.tsx | 40 +- .../filters/header/layout-selection.tsx | 2 +- .../issue-layouts/gantt/base-gantt-root.tsx | 12 +- .../issues/issue-layouts/gantt/blocks.tsx | 2 +- .../issues/issue-layouts/gantt/cycle-root.tsx | 6 +- .../issue-layouts/gantt/module-root.tsx | 6 +- .../issue-layouts/gantt/project-root.tsx | 8 +- .../issue-layouts/gantt/project-view-root.tsx | 8 +- .../gantt/quick-add-issue-form.tsx | 11 +- .../issue-layouts/kanban/base-kanban-root.tsx | 41 +- .../issues/issue-layouts/kanban/block.tsx | 16 +- .../issue-layouts/kanban/blocks-list.tsx | 2 +- .../issues/issue-layouts/kanban/default.tsx | 34 +- .../kanban/headers/group-by-card.tsx | 14 +- .../kanban/headers/sub-group-by-card.tsx | 2 +- .../issue-layouts/kanban/kanban-group.tsx | 2 +- .../kanban/quick-add-issue-form.tsx | 10 +- .../issue-layouts/kanban/roots/cycle-root.tsx | 8 +- .../kanban/roots/draft-issue-root.tsx | 10 +- .../kanban/roots/module-root.tsx | 8 +- .../kanban/roots/profile-issues-root.tsx | 12 +- .../kanban/roots/project-root.tsx | 12 +- .../kanban/roots/project-view-root.tsx | 6 +- .../issues/issue-layouts/kanban/swimlanes.tsx | 24 +- .../issue-layouts/list/base-list-root.tsx | 16 +- .../issues/issue-layouts/list/block.tsx | 4 +- .../issues/issue-layouts/list/blocks-list.tsx | 2 +- .../issues/issue-layouts/list/default.tsx | 12 +- .../list/headers/group-by-card.tsx | 12 +- .../list/quick-add-issue-form.tsx | 10 +- .../list/roots/archived-issue-root.tsx | 8 +- .../issue-layouts/list/roots/cycle-root.tsx | 8 +- .../list/roots/draft-issue-root.tsx | 6 +- .../issue-layouts/list/roots/module-root.tsx | 6 +- .../list/roots/profile-issues-root.tsx | 8 +- .../issue-layouts/list/roots/project-root.tsx | 6 +- .../list/roots/project-view-root.tsx | 6 +- .../properties/all-properties.tsx | 26 +- .../issue-layouts/properties/labels.tsx | 10 +- .../with-display-properties-HOC.tsx | 2 +- .../quick-action-dropdowns/all-issue.tsx | 17 +- .../quick-action-dropdowns/archived-issue.tsx | 14 +- .../quick-action-dropdowns/cycle-issue.tsx | 15 +- .../quick-action-dropdowns/module-issue.tsx | 15 +- .../quick-action-dropdowns/project-issue.tsx | 16 +- .../roots/all-issue-layout-root.tsx | 34 +- .../roots/archived-issue-layout-root.tsx | 6 +- .../issue-layouts/roots/cycle-layout-root.tsx | 12 +- .../roots/draft-issue-layout-root.tsx | 18 +- .../roots/module-layout-root.tsx | 8 +- .../roots/project-layout-root.tsx | 8 +- .../roots/project-view-layout-root.tsx | 4 +- .../spreadsheet/base-spreadsheet-root.tsx | 16 +- .../spreadsheet/columns/cycle-column.tsx | 6 +- .../spreadsheet/columns/due-date-column.tsx | 4 +- .../spreadsheet/columns/estimate-column.tsx | 2 +- .../spreadsheet/columns/header-column.tsx | 4 +- .../spreadsheet/columns/label-column.tsx | 2 +- .../spreadsheet/columns/module-column.tsx | 10 +- .../spreadsheet/columns/priority-column.tsx | 2 +- .../spreadsheet/columns/sub-issue-column.tsx | 2 +- .../spreadsheet/issue-column.tsx | 8 +- .../issue-layouts/spreadsheet/issue-row.tsx | 22 +- .../spreadsheet/quick-add-issue-form.tsx | 8 +- .../spreadsheet/roots/cycle-root.tsx | 6 +- .../spreadsheet/roots/module-root.tsx | 6 +- .../spreadsheet/roots/project-root.tsx | 6 +- .../spreadsheet/roots/project-view-root.tsx | 10 +- .../spreadsheet/spreadsheet-header-column.tsx | 2 +- .../spreadsheet/spreadsheet-header.tsx | 3 +- .../spreadsheet/spreadsheet-table.tsx | 18 +- .../spreadsheet/spreadsheet-view.tsx | 6 +- web/components/issues/issue-layouts/utils.tsx | 36 +- .../issues/issue-modal/draft-issue-layout.tsx | 8 +- web/components/issues/issue-modal/form.tsx | 40 +- web/components/issues/issue-modal/modal.tsx | 14 +- web/components/issues/issue-update-status.tsx | 2 +- .../issues/issues-mobile-header.tsx | 29 +- .../issues/parent-issues-list-modal.tsx | 8 +- .../issues/peek-overview/header.tsx | 10 +- .../issues/peek-overview/issue-detail.tsx | 4 +- .../issues/peek-overview/properties.tsx | 6 +- web/components/issues/peek-overview/root.tsx | 15 +- web/components/issues/peek-overview/view.tsx | 20 +- web/components/issues/select/label.tsx | 10 +- .../issues/sub-issues/issue-list-item.tsx | 8 +- .../issues/sub-issues/issues-list.tsx | 2 +- .../issues/sub-issues/properties.tsx | 2 +- web/components/issues/sub-issues/root.tsx | 12 +- web/components/issues/title-input.tsx | 2 +- web/components/labels/create-label-modal.tsx | 8 +- .../labels/create-update-label-inline.tsx | 11 +- web/components/labels/delete-label-modal.tsx | 6 +- .../labels/label-block/label-item-block.tsx | 4 +- .../labels/project-setting-label-group.tsx | 24 +- .../labels/project-setting-label-item.tsx | 4 +- .../labels/project-setting-label-list.tsx | 42 +- .../modules/delete-module-modal.tsx | 8 +- web/components/modules/form.tsx | 6 +- web/components/modules/gantt-chart/blocks.tsx | 6 +- .../gantt-chart/modules-list-layout.tsx | 4 +- web/components/modules/modal.tsx | 14 +- web/components/modules/module-card-item.tsx | 20 +- web/components/modules/module-list-item.tsx | 34 +- .../modules/module-mobile-header.tsx | 31 +- .../modules/module-peek-overview.tsx | 2 +- web/components/modules/modules-list-view.tsx | 10 +- web/components/modules/select/status.tsx | 2 +- .../modules/sidebar-select/select-status.tsx | 2 +- web/components/modules/sidebar.tsx | 32 +- .../notifications/notification-card.tsx | 33 +- .../notifications/notification-header.tsx | 18 +- .../notifications/notification-popover.tsx | 14 +- .../select-snooze-till-modal.tsx | 18 +- web/components/onboarding/invitations.tsx | 23 +- web/components/onboarding/invite-members.tsx | 28 +- web/components/onboarding/join-workspaces.tsx | 4 +- .../onboarding/onboarding-sidebar.tsx | 9 +- .../switch-delete-account-modal.tsx | 4 +- web/components/onboarding/tour/root.tsx | 14 +- web/components/onboarding/tour/sidebar.tsx | 2 +- web/components/onboarding/user-details.tsx | 24 +- web/components/onboarding/workspace.tsx | 7 +- web/components/page-views/signin.tsx | 6 +- .../page-views/workspace-dashboard.tsx | 16 +- .../pages/create-update-page-modal.tsx | 8 +- web/components/pages/delete-page-modal.tsx | 10 +- web/components/pages/page-form.tsx | 2 +- .../pages/pages-list/all-pages-list.tsx | 2 +- .../pages/pages-list/archived-pages-list.tsx | 2 +- .../pages/pages-list/favorite-pages-list.tsx | 2 +- web/components/pages/pages-list/list-item.tsx | 10 +- web/components/pages/pages-list/list-view.tsx | 8 +- .../pages/pages-list/private-page-list.tsx | 2 +- .../pages/pages-list/recent-pages-list.tsx | 12 +- .../pages/pages-list/shared-pages-list.tsx | 2 +- .../profile/activity/activity-list.tsx | 6 +- .../profile/activity/download-button.tsx | 2 +- .../activity/profile-activity-list.tsx | 12 +- .../activity/workspace-activity-list.tsx | 2 +- web/components/profile/navbar.tsx | 2 +- web/components/profile/overview/activity.tsx | 14 +- .../overview/priority-distribution.tsx | 88 ++ .../priority-distribution.tsx | 2 +- .../profile/overview/state-distribution.tsx | 2 +- web/components/profile/overview/stats.tsx | 4 +- web/components/profile/overview/workload.tsx | 2 +- web/components/profile/preferences/index.ts | 2 +- .../profile/profile-issues-filter.tsx | 2 +- web/components/profile/profile-issues.tsx | 22 +- web/components/profile/sidebar.tsx | 33 +- web/components/project/card-list.tsx | 6 +- web/components/project/card.tsx | 15 +- .../project/confirm-project-member-remove.tsx | 8 +- .../project/create-project-modal.tsx | 19 +- .../project/delete-project-modal.tsx | 6 +- web/components/project/form.tsx | 25 +- web/components/project/integration-card.tsx | 15 +- web/components/project/join-project-modal.tsx | 2 +- .../project/leave-project-modal.tsx | 12 +- web/components/project/member-list-item.tsx | 20 +- web/components/project/member-list.tsx | 4 +- web/components/project/member-select.tsx | 2 +- .../project-settings-member-defaults.tsx | 19 +- .../project/publish-project/modal.tsx | 20 +- .../project/send-project-invitation-modal.tsx | 8 +- .../settings/delete-project-section.tsx | 2 +- .../project/settings/features-list.tsx | 16 +- web/components/project/sidebar-list-item.tsx | 21 +- web/components/project/sidebar-list.tsx | 22 +- web/components/states/create-state-modal.tsx | 20 +- .../states/create-update-state-inline.tsx | 18 +- web/components/states/delete-state-modal.tsx | 10 +- .../project-setting-state-list-item.tsx | 6 +- .../states/project-setting-state-list.tsx | 14 +- web/components/toast-alert/index.tsx | 61 ++ web/components/ui/empty-space.tsx | 2 +- web/components/ui/graphs/bar-graph.tsx | 2 +- web/components/ui/graphs/calendar-graph.tsx | 2 +- web/components/ui/graphs/line-graph.tsx | 2 +- web/components/ui/graphs/marimekko-graph.tsx | 48 ++ web/components/ui/graphs/pie-graph.tsx | 2 +- .../ui/graphs/scatter-plot-graph.tsx | 2 +- .../ui/loader/cycle-module-board-loader.tsx | 7 +- .../ui/loader/cycle-module-list-loader.tsx | 7 +- .../project-inbox/inbox-layout-loader.tsx | 2 +- .../project-inbox/inbox-sidebar-loader.tsx | 4 +- .../ui/loader/notification-loader.tsx | 4 +- web/components/ui/loader/pages-loader.tsx | 8 +- web/components/ui/loader/projects-loader.tsx | 7 +- .../ui/loader/settings/activity.tsx | 4 +- .../ui/loader/settings/api-token.tsx | 4 +- web/components/ui/loader/settings/email.tsx | 4 +- .../ui/loader/settings/import-and-export.tsx | 4 +- .../ui/loader/settings/integration.tsx | 7 +- web/components/ui/loader/settings/members.tsx | 4 +- web/components/ui/loader/view-list-loader.tsx | 4 +- web/components/ui/multi-level-dropdown.tsx | 8 +- web/components/views/delete-view-modal.tsx | 6 +- web/components/views/form.tsx | 10 +- web/components/views/modal.tsx | 4 +- web/components/views/view-list-item.tsx | 14 +- web/components/views/views-list.tsx | 10 +- .../web-hooks/create-webhook-modal.tsx | 12 +- .../web-hooks/delete-webhook-modal.tsx | 4 +- web/components/web-hooks/form/form.tsx | 10 +- web/components/web-hooks/form/secret-key.tsx | 19 +- .../web-hooks/generated-hook-details.tsx | 2 +- .../web-hooks/webhooks-list-item.tsx | 2 +- .../confirm-workspace-member-remove.tsx | 6 +- .../workspace/create-workspace-form.tsx | 15 +- .../workspace/delete-workspace-modal.tsx | 12 +- web/components/workspace/help-section.tsx | 74 +- .../send-workspace-invitation-modal.tsx | 8 +- .../settings/invitations-list-item.tsx | 10 +- .../workspace/settings/members-list-item.tsx | 13 +- .../workspace/settings/members-list.tsx | 9 +- .../workspace/settings/workspace-details.tsx | 20 +- web/components/workspace/sidebar-dropdown.tsx | 14 +- web/components/workspace/sidebar-menu.tsx | 14 +- .../workspace/sidebar-quick-action.tsx | 15 +- .../views/default-view-list-item.tsx | 4 +- .../workspace/views/delete-view-modal.tsx | 13 +- web/components/workspace/views/form.tsx | 16 +- web/components/workspace/views/header.tsx | 17 +- web/components/workspace/views/modal.tsx | 10 +- .../workspace/views/view-list-item.tsx | 15 +- web/components/workspace/views/views-list.tsx | 17 +- .../workspace-active-cycles-upgrade.tsx | 16 +- web/constants/cycle.ts | 2 - web/constants/dashboard.ts | 13 +- web/constants/event-tracker.ts | 20 +- web/constants/spreadsheet.ts | 6 +- web/constants/workspace.ts | 8 +- web/contexts/user-notification-context.tsx | 2 +- web/helpers/analytics.helper.ts | 26 +- web/helpers/calendar.helper.ts | 2 +- web/helpers/filter.helper.ts | 1 - web/helpers/issue.helper.ts | 12 +- web/helpers/string.helper.ts | 10 +- web/hooks/store/index.ts | 2 +- web/hooks/store/use-inbox-issues.ts | 2 +- web/hooks/store/use-issues.ts | 12 +- web/hooks/use-comment-reaction.tsx | 2 +- web/hooks/use-draggable-portal.ts | 2 +- web/hooks/use-dropdown-key-down.tsx | 8 +- web/hooks/use-user-notifications.tsx | 2 +- web/hooks/use-user.tsx | 2 +- web/layouts/admin-layout/header.tsx | 2 +- web/layouts/admin-layout/layout.tsx | 4 +- web/layouts/admin-layout/sidebar.tsx | 2 +- web/layouts/app-layout/layout.tsx | 7 +- web/layouts/app-layout/sidebar.tsx | 2 +- web/layouts/auth-layout/admin-wrapper.tsx | 2 +- web/layouts/auth-layout/project-wrapper.tsx | 10 +- web/layouts/auth-layout/user-wrapper.tsx | 4 +- web/layouts/auth-layout/workspace-wrapper.tsx | 8 +- web/layouts/instance-layout/index.tsx | 6 +- .../settings-layout/profile/layout.tsx | 2 +- .../profile/preferences/index.ts | 2 +- .../profile/preferences/layout.tsx | 10 +- .../profile/preferences/sidebar.tsx | 29 +- .../settings-layout/profile/sidebar.tsx | 6 +- .../settings-layout/project/layout.tsx | 8 +- .../settings-layout/project/sidebar.tsx | 4 +- .../settings-layout/workspace/sidebar.tsx | 4 +- web/layouts/user-profile-layout/layout.tsx | 3 +- web/lib/app-provider.tsx | 16 +- web/lib/local-storage.ts | 10 +- web/lib/posthog-provider.tsx | 10 +- web/lib/types.d.ts | 1 + web/lib/wrappers/crisp-wrapper.tsx | 8 +- web/lib/wrappers/store-wrapper.tsx | 10 +- web/package.json | 4 - web/pages/404.tsx | 6 +- web/pages/[workspaceSlug]/active-cycles.tsx | 2 +- web/pages/[workspaceSlug]/analytics.tsx | 14 +- web/pages/[workspaceSlug]/index.tsx | 6 +- .../profile/[userId]/activity.tsx | 10 +- .../profile/[userId]/assigned.tsx | 6 +- .../profile/[userId]/created.tsx | 6 +- .../profile/[userId]/index.tsx | 12 +- .../profile/[userId]/subscribed.tsx | 6 +- .../[projectId]/archived-issues/index.tsx | 10 +- .../projects/[projectId]/cycles/[cycleId].tsx | 14 +- .../projects/[projectId]/cycles/index.tsx | 24 +- .../[projectId]/draft-issues/index.tsx | 8 +- .../projects/[projectId]/inbox/[inboxId].tsx | 10 +- .../projects/[projectId]/inbox/index.tsx | 6 +- .../projects/[projectId]/issues/[issueId].tsx | 10 +- .../projects/[projectId]/issues/index.tsx | 10 +- .../[projectId]/modules/[moduleId].tsx | 14 +- .../projects/[projectId]/modules/index.tsx | 8 +- .../projects/[projectId]/pages/[pageId].tsx | 36 +- .../projects/[projectId]/pages/index.tsx | 26 +- .../[projectId]/settings/automations.tsx | 19 +- .../[projectId]/settings/estimates.tsx | 8 +- .../[projectId]/settings/features.tsx | 8 +- .../projects/[projectId]/settings/index.tsx | 12 +- .../[projectId]/settings/integrations.tsx | 22 +- .../projects/[projectId]/settings/labels.tsx | 8 +- .../projects/[projectId]/settings/members.tsx | 6 +- .../projects/[projectId]/settings/states.tsx | 8 +- .../projects/[projectId]/views/[viewId].tsx | 12 +- .../projects/[projectId]/views/index.tsx | 4 +- web/pages/[workspaceSlug]/projects/index.tsx | 4 +- .../[workspaceSlug]/settings/api-tokens.tsx | 24 +- .../[workspaceSlug]/settings/billing.tsx | 8 +- .../[workspaceSlug]/settings/exports.tsx | 8 +- .../[workspaceSlug]/settings/imports.tsx | 10 +- web/pages/[workspaceSlug]/settings/index.tsx | 8 +- .../[workspaceSlug]/settings/integrations.tsx | 16 +- .../[workspaceSlug]/settings/members.tsx | 18 +- .../settings/webhooks/[webhookId].tsx | 11 +- .../settings/webhooks/index.tsx | 18 +- .../workspace-views/[globalViewId].tsx | 18 +- .../[workspaceSlug]/workspace-views/index.tsx | 12 +- web/pages/_document.tsx | 2 +- web/pages/_error.tsx | 5 +- web/pages/accounts/sign-up.tsx | 10 +- web/pages/create-workspace.tsx | 14 +- web/pages/god-mode/ai.tsx | 12 +- web/pages/god-mode/authorization.tsx | 11 +- web/pages/god-mode/email.tsx | 10 +- web/pages/god-mode/image.tsx | 10 +- web/pages/god-mode/index.tsx | 10 +- web/pages/index.tsx | 2 +- web/pages/installations/[provider]/index.tsx | 2 +- web/pages/invitations/index.tsx | 3 +- web/pages/onboarding/index.tsx | 36 +- web/pages/profile/activity.tsx | 8 +- web/pages/profile/change-password.tsx | 14 +- web/pages/profile/index.tsx | 41 +- web/pages/profile/preferences/email.tsx | 8 +- web/pages/profile/preferences/theme.tsx | 14 +- web/pages/workspace-invitations/index.tsx | 10 +- web/services/ai.service.ts | 2 +- web/services/analytics.service.ts | 2 +- web/services/api_token.service.ts | 2 +- web/services/app_config.service.ts | 2 +- web/services/app_installation.service.ts | 2 +- web/services/auth.service.ts | 2 +- web/services/cycle.service.ts | 2 +- web/services/dashboard.service.ts | 2 +- web/services/file.service.ts | 4 +- web/services/inbox.service.ts | 2 +- web/services/inbox/inbox-issue.service.ts | 2 +- web/services/inbox/inbox.service.ts | 2 +- web/services/instance.service.ts | 2 +- web/services/integrations/github.service.ts | 2 +- .../integrations/integration.service.ts | 2 +- web/services/integrations/jira.service.ts | 2 +- web/services/issue/issue.service.ts | 2 +- web/services/issue/issue_activity.service.ts | 2 +- web/services/issue/issue_archive.service.ts | 2 +- .../issue/issue_attachment.service.ts | 2 +- web/services/issue/issue_comment.service.ts | 2 +- web/services/issue/issue_draft.service.ts | 2 +- web/services/issue_filter.service.ts | 2 +- web/services/module.service.ts | 2 +- web/services/notification.service.ts | 2 +- .../project/project-estimate.service.ts | 2 +- .../project/project-export.service.ts | 2 +- web/services/project/project-state.service.ts | 2 +- web/services/user.service.ts | 2 +- web/services/view.service.ts | 2 +- web/services/webhook.service.ts | 2 +- web/services/workspace.service.ts | 2 +- web/store/application/app-config.store.ts | 2 +- .../application/command-palette.store.ts | 4 +- web/store/application/index.ts | 2 +- web/store/application/instance.store.ts | 2 +- web/store/cycle.store.ts | 12 +- web/store/dashboard.store.ts | 2 +- web/store/estimate.store.ts | 4 +- web/store/event-tracker.store.ts | 2 +- web/store/global-view.store.ts | 2 +- web/store/inbox/inbox.store.ts | 8 +- web/store/inbox/inbox_filter.store.ts | 4 +- web/store/inbox/inbox_issue.store.ts | 10 +- web/store/inbox/root.store.ts | 2 +- web/store/issue/archived/filter.store.ts | 20 +- web/store/issue/archived/issue.store.ts | 8 +- web/store/issue/cycle/filter.store.ts | 20 +- web/store/issue/cycle/issue.store.ts | 12 +- web/store/issue/draft/filter.store.ts | 20 +- web/store/issue/draft/issue.store.ts | 12 +- .../helpers/issue-filter-helper.store.ts | 8 +- web/store/issue/helpers/issue-helper.store.ts | 6 +- .../issue/issue-details/activity.store.ts | 8 +- .../issue/issue-details/attachment.store.ts | 10 +- .../issue/issue-details/comment.store.ts | 10 +- .../issue-details/comment_reaction.store.ts | 12 +- web/store/issue/issue-details/issue.store.ts | 2 +- web/store/issue/issue-details/link.store.ts | 4 +- .../issue/issue-details/reaction.store.ts | 12 +- .../issue/issue-details/relation.store.ts | 4 +- web/store/issue/issue-details/root.store.ts | 30 +- .../issue/issue-details/sub_issues.store.ts | 8 +- .../issue/issue-details/subscription.store.ts | 2 +- web/store/issue/issue.store.ts | 4 +- web/store/issue/issue_calendar_view.store.ts | 2 +- web/store/issue/issue_gantt_view.store.ts | 2 +- web/store/issue/module/filter.store.ts | 20 +- web/store/issue/module/issue.store.ts | 10 +- web/store/issue/profile/filter.store.ts | 20 +- web/store/issue/profile/issue.store.ts | 8 +- web/store/issue/project-views/filter.store.ts | 20 +- web/store/issue/project-views/issue.store.ts | 8 +- web/store/issue/project/filter.store.ts | 21 +- web/store/issue/project/issue.store.ts | 10 +- web/store/issue/root.store.ts | 22 +- web/store/issue/workspace/filter.store.ts | 20 +- web/store/issue/workspace/issue.store.ts | 10 +- web/store/label.store.ts | 6 +- web/store/member/index.ts | 2 +- web/store/member/project-member.store.ts | 10 +- web/store/member/workspace-member.store.ts | 10 +- web/store/mention.store.ts | 2 +- web/store/module.store.ts | 8 +- web/store/page.store.ts | 2 +- web/store/project-page.store.ts | 4 +- web/store/project/index.ts | 4 +- web/store/project/project-publish.store.ts | 4 +- web/store/project/project.store.ts | 12 +- web/store/root.store.ts | 24 +- web/store/state.store.ts | 10 +- web/store/user/index.ts | 2 +- web/store/user/user-membership.store.ts | 6 +- web/store/workspace/api-token.store.ts | 2 +- web/store/workspace/index.ts | 12 +- web/store/workspace/webhook.store.ts | 2 +- yarn.lock | 770 +++++------------- 790 files changed, 4155 insertions(+), 4051 deletions(-) create mode 100644 web/components/dashboard/widgets/recent-collaborators.tsx create mode 100644 web/components/profile/overview/priority-distribution.tsx create mode 100644 web/components/toast-alert/index.tsx create mode 100644 web/components/ui/graphs/marimekko-graph.tsx diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 148568d76..f40c1a244 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,7 +50,6 @@ chmod +x setup.sh docker compose -f docker-compose-local.yml up ``` - ## Missing a Feature? If a feature is missing, you can directly _request_ a new one [here](https://github.com/makeplane/plane/issues/new?assignees=&labels=feature&template=feature_request.yml&title=%F0%9F%9A%80+Feature%3A+). You also can do the same by choosing "🚀 Feature" when raising a [New Issue](https://github.com/makeplane/plane/issues/new/choose) on our GitHub Repository. diff --git a/ENV_SETUP.md b/ENV_SETUP.md index bfc300196..df05683ef 100644 --- a/ENV_SETUP.md +++ b/ENV_SETUP.md @@ -53,7 +53,6 @@ NGINX_PORT=80 NEXT_PUBLIC_DEPLOY_URL="http://localhost/spaces" ``` - ## {PROJECT_FOLDER}/apiserver/.env ​ diff --git a/README.md b/README.md index 52ccda474..6834199ff 100644 --- a/README.md +++ b/README.md @@ -44,20 +44,18 @@ Meet [Plane](https://plane.so). An open-source software development tool to mana > Plane is still in its early days, not everything will be perfect yet, and hiccups may happen. Please let us know of any suggestions, ideas, or bugs that you encounter on our [Discord](https://discord.com/invite/A92xrEGCge) or GitHub issues, and we will use your feedback to improve on our upcoming releases. - - ## ⚡ Installation The easiest way to get started with Plane is by creating a [Plane Cloud](https://app.plane.so) account where we offer a hosted solution for users. If you want more control over your data prefer to self-host Plane, please refer to our [deployment documentation](https://docs.plane.so/docker-compose). -| Installation Methods | Documentation Link | -|-----------------|----------------------------------------------------------------------------------------------------------| -| Docker | [![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)](https://docs.plane.so/docker-compose) | -| Kubernetes | [![Kubernetes](https://img.shields.io/badge/kubernetes-%23326ce5.svg?style=for-the-badge&logo=kubernetes&logoColor=white)](https://docs.plane.so/kubernetes) | +| Installation Methods | Documentation Link | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Docker | [![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white)](https://docs.plane.so/docker-compose) | +| Kubernetes | [![Kubernetes](https://img.shields.io/badge/kubernetes-%23326ce5.svg?style=for-the-badge&logo=kubernetes&logoColor=white)](https://docs.plane.so/kubernetes) | -`Instance admin` can configure instance settings using our [God-mode](https://docs.plane.so/instance-admin) feature. +`Instance admin` can configure instance settings using our [God-mode](https://docs.plane.so/instance-admin) feature. ## 🚀 Features @@ -74,9 +72,7 @@ If you want more control over your data prefer to self-host Plane, please refer - **Analytics**: Get insights into all your Plane data in real-time. Visualize issue data to spot trends, remove blockers, and progress your work. -- **Drive** (*coming soon*): The drive helps you share documents, images, videos, or any other files that make sense to you or your team and align on the problem/solution. - - +- **Drive** (_coming soon_): The drive helps you share documents, images, videos, or any other files that make sense to you or your team and align on the problem/solution. ## 🛠️ Contributors Quick Start @@ -101,10 +97,10 @@ Setting up local environment is extremely easy and straight forward. Follow the ./setup.sh ``` 5. Open the code on VSCode or similar equivalent IDE. -6. Review the `.env` files available in various folders. +6. Review the `.env` files available in various folders. Visit [Environment Setup](./ENV_SETUP.md) to know about various environment variables used in system. 7. Run the docker command to initiate services: - ``` + ``` docker compose -f docker-compose-local.yml up -d ``` @@ -119,6 +115,7 @@ The Plane community can be found on [GitHub Discussions](https://github.com/orgs Ask questions, report bugs, join discussions, voice ideas, make feature requests, or share your projects. ### Repo Activity + ![Plane Repo Activity](https://repobeats.axiom.co/api/embed/2523c6ed2f77c082b7908c33e2ab208981d76c39.svg "Repobeats analytics image") ## 📸 Screenshots @@ -181,20 +178,21 @@ Ask questions, report bugs, join discussions, voice ideas, make feature requests ## ⛓️ Security -If you believe you have found a security vulnerability in Plane, we encourage you to responsibly disclose this and not open a public issue. We will investigate all legitimate reports. +If you believe you have found a security vulnerability in Plane, we encourage you to responsibly disclose this and not open a public issue. We will investigate all legitimate reports. Email squawk@plane.so to disclose any security vulnerabilities. ## ❤️ Contribute -There are many ways to contribute to Plane, including: -- Submitting [bugs](https://github.com/makeplane/plane/issues/new?assignees=srinivaspendem%2Cpushya22&labels=%F0%9F%90%9Bbug&projects=&template=--bug-report.yaml&title=%5Bbug%5D%3A+) and [feature requests](https://github.com/makeplane/plane/issues/new?assignees=srinivaspendem%2Cpushya22&labels=%E2%9C%A8feature&projects=&template=--feature-request.yaml&title=%5Bfeature%5D%3A+) for various components. -- Reviewing [the documentation](https://docs.plane.so/) and submitting [pull requests](https://github.com/makeplane/plane), from fixing typos to adding new features. -- Speaking or writing about Plane or any other ecosystem integration and [letting us know](https://discord.com/invite/A92xrEGCge)! -- Upvoting [popular feature requests](https://github.com/makeplane/plane/issues) to show your support. +There are many ways to contribute to Plane, including: + +- Submitting [bugs](https://github.com/makeplane/plane/issues/new?assignees=srinivaspendem%2Cpushya22&labels=%F0%9F%90%9Bbug&projects=&template=--bug-report.yaml&title=%5Bbug%5D%3A+) and [feature requests](https://github.com/makeplane/plane/issues/new?assignees=srinivaspendem%2Cpushya22&labels=%E2%9C%A8feature&projects=&template=--feature-request.yaml&title=%5Bfeature%5D%3A+) for various components. +- Reviewing [the documentation](https://docs.plane.so/) and submitting [pull requests](https://github.com/makeplane/plane), from fixing typos to adding new features. +- Speaking or writing about Plane or any other ecosystem integration and [letting us know](https://discord.com/invite/A92xrEGCge)! +- Upvoting [popular feature requests](https://github.com/makeplane/plane/issues) to show your support. ### We couldn't have done this without you. - \ No newline at end of file + diff --git a/deploy/1-click/README.md b/deploy/1-click/README.md index 88ea66c4c..08bc35b28 100644 --- a/deploy/1-click/README.md +++ b/deploy/1-click/README.md @@ -31,11 +31,11 @@ curl -fsSL https://raw.githubusercontent.com/makeplane/plane/preview/deploy/1-cl ``` NOTE: `Preview` builds do not support ARM64/AARCH64 CPU architecture + -- - Expect this after a successful install ![Install Output](images/install.png) @@ -50,29 +50,33 @@ Plane App is available via the command `plane-app`. Running the command `plane-a ![Plane Help](images/help.png) -Basic Operations: +Basic Operations: + 1. Start Server using `plane-app start` 1. Stop Server using `plane-app stop` 1. Restart Server using `plane-app restart` Advanced Operations: + 1. Configure Plane using `plane-app --configure`. This will give you options to modify - - NGINX Port (default 80) - - Domain Name (default is the local server public IP address) - - File Upload Size (default 5MB) - - External Postgres DB Url (optional - default empty) - - External Redis URL (optional - default empty) - - AWS S3 Bucket (optional - to be configured only in case the user wants to use an S3 Bucket) + + - NGINX Port (default 80) + - Domain Name (default is the local server public IP address) + - File Upload Size (default 5MB) + - External Postgres DB Url (optional - default empty) + - External Redis URL (optional - default empty) + - AWS S3 Bucket (optional - to be configured only in case the user wants to use an S3 Bucket) 1. Upgrade Plane using `plane-app --upgrade`. This will get the latest stable version of Plane files (docker-compose.yaml, .env, and docker images) -1. Updating Plane App installer using `plane-app --update-installer` will update the `plane-app` utility. +1. Updating Plane App installer using `plane-app --update-installer` will update the `plane-app` utility. -1. Uninstall Plane using `plane-app --uninstall`. This will uninstall the Plane application from the server and all docker containers but do not remove the data stored in Postgres, Redis, and Minio. +1. Uninstall Plane using `plane-app --uninstall`. This will uninstall the Plane application from the server and all docker containers but do not remove the data stored in Postgres, Redis, and Minio. -1. Plane App can be reinstalled using `plane-app --install`. +1. Plane App can be reinstalled using `plane-app --install`. + +Application Data is stored in the mentioned folders: -Application Data is stored in the mentioned folders: 1. DB Data: /opt/plane/data/postgres 1. Redis Data: /opt/plane/data/redis -1. Minio Data: /opt/plane/data/minio \ No newline at end of file +1. Minio Data: /opt/plane/data/minio diff --git a/packages/editor/core/package.json b/packages/editor/core/package.json index fcb6b57bb..198b21b0f 100644 --- a/packages/editor/core/package.json +++ b/packages/editor/core/package.json @@ -59,8 +59,7 @@ "@types/node": "18.15.3", "@types/react": "^18.2.42", "@types/react-dom": "^18.2.17", - "eslint": "^7.32.0", - "eslint-config-next": "13.2.4", + "eslint-config-custom": "*", "postcss": "^8.4.29", "tailwind-config-custom": "*", "tsconfig": "*", diff --git a/packages/editor/document-editor/package.json b/packages/editor/document-editor/package.json index bd1f2d90f..870d5edd9 100644 --- a/packages/editor/document-editor/package.json +++ b/packages/editor/document-editor/package.json @@ -37,7 +37,6 @@ "@tiptap/extension-placeholder": "^2.1.13", "@tiptap/pm": "^2.1.13", "@tiptap/suggestion": "^2.1.13", - "eslint-config-next": "13.2.4", "lucide-react": "^0.309.0", "react-popper": "^2.3.0", "tippy.js": "^6.3.7", @@ -47,7 +46,7 @@ "@types/node": "18.15.3", "@types/react": "^18.2.42", "@types/react-dom": "^18.2.17", - "eslint": "8.36.0", + "eslint-config-custom": "*", "postcss": "^8.4.29", "tailwind-config-custom": "*", "tsconfig": "*", diff --git a/packages/editor/document-editor/src/ui/components/content-browser.tsx b/packages/editor/document-editor/src/ui/components/content-browser.tsx index 97231ea96..be70067a2 100644 --- a/packages/editor/document-editor/src/ui/components/content-browser.tsx +++ b/packages/editor/document-editor/src/ui/components/content-browser.tsx @@ -15,7 +15,7 @@ export const ContentBrowser = (props: ContentBrowserProps) => { const handleOnClick = (marking: IMarking) => { scrollSummary(editor, marking); if (setSidePeekVisible) setSidePeekVisible(false); - } + }; return (
diff --git a/packages/editor/document-editor/src/ui/components/summary-popover.tsx b/packages/editor/document-editor/src/ui/components/summary-popover.tsx index 6ad7cad83..41056c6ad 100644 --- a/packages/editor/document-editor/src/ui/components/summary-popover.tsx +++ b/packages/editor/document-editor/src/ui/components/summary-popover.tsx @@ -33,8 +33,9 @@ export const SummaryPopover: React.FC = (props) => { )} - {as_ === "link" && {display}} + {itemAs === "link" && {display}} {children && setOpen(false)} items={children} />}
diff --git a/space/lib/mobx/store-provider.tsx b/space/lib/mobx/store-provider.tsx index c6fde14ae..e12f2823a 100644 --- a/space/lib/mobx/store-provider.tsx +++ b/space/lib/mobx/store-provider.tsx @@ -9,10 +9,10 @@ let rootStore: RootStore = new RootStore(); export const MobxStoreContext = createContext(rootStore); const initializeStore = () => { - const _rootStore: RootStore = rootStore ?? new RootStore(); - if (typeof window === "undefined") return _rootStore; - if (!rootStore) rootStore = _rootStore; - return _rootStore; + const singletonRootStore: RootStore = rootStore ?? new RootStore(); + if (typeof window === "undefined") return singletonRootStore; + if (!rootStore) rootStore = singletonRootStore; + return singletonRootStore; }; export const MobxStoreProvider = ({ children }: any) => { diff --git a/space/package.json b/space/package.json index a1d600a60..7018cd241 100644 --- a/space/package.json +++ b/space/package.json @@ -49,9 +49,7 @@ "@types/react-dom": "^18.2.17", "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.48.2", - "eslint": "8.34.0", "eslint-config-custom": "*", - "eslint-config-next": "13.2.1", "tailwind-config-custom": "*", "tsconfig": "*" } diff --git a/web/.eslintrc.js b/web/.eslintrc.js index c8df60750..eb05b2af8 100644 --- a/web/.eslintrc.js +++ b/web/.eslintrc.js @@ -1,4 +1,103 @@ module.exports = { root: true, extends: ["custom"], + parser: "@typescript-eslint/parser", + settings: { + "import/resolver": { + typescript: {}, + node: { + moduleDirectory: ["node_modules", "."], + }, + }, + }, + rules: { + // "import/order": [ + // "error", + // { + // groups: ["builtin", "external", "internal", "parent", "sibling"], + // pathGroups: [ + // { + // pattern: "react", + // group: "external", + // position: "before", + // }, + // { + // pattern: "@headlessui/**", + // group: "external", + // position: "after", + // }, + // { + // pattern: "lucide-react", + // group: "external", + // position: "after", + // }, + // { + // pattern: "@plane/ui", + // group: "external", + // position: "after", + // }, + // { + // pattern: "components/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "constants/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "contexts/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "helpers/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "hooks/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "layouts/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "lib/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "services/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "store/**", + // group: "internal", + // position: "before", + // }, + // { + // pattern: "@plane/types", + // group: "internal", + // position: "after", + // }, + // { + // pattern: "lib/types", + // group: "internal", + // position: "after", + // }, + // ], + // pathGroupsExcludedImportTypes: ["builtin", "internal", "react"], + // alphabetize: { + // order: "asc", + // caseInsensitive: true, + // }, + // }, + // ], + }, }; diff --git a/web/components/account/deactivate-account-modal.tsx b/web/components/account/deactivate-account-modal.tsx index 41d1fd7ca..34129cebe 100644 --- a/web/components/account/deactivate-account-modal.tsx +++ b/web/components/account/deactivate-account-modal.tsx @@ -1,13 +1,13 @@ import React, { useState } from "react"; import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import { mutate } from "swr"; import { Dialog, Transition } from "@headlessui/react"; import { Trash2 } from "lucide-react"; -import { mutate } from "swr"; // hooks -import { useUser } from "hooks/store"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; +import { useUser } from "hooks/store"; type Props = { isOpen: boolean; @@ -86,9 +86,9 @@ export const DeactivateAccountModal: React.FC = (props) => {
-
+
diff --git a/web/components/account/o-auth/o-auth-options.tsx b/web/components/account/o-auth/o-auth-options.tsx index bbb73b855..1671b94fc 100644 --- a/web/components/account/o-auth/o-auth-options.tsx +++ b/web/components/account/o-auth/o-auth-options.tsx @@ -1,12 +1,10 @@ import { observer } from "mobx-react-lite"; // services -import { AuthService } from "services/auth.service"; -// hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; +import { GitHubSignInButton, GoogleSignInButton } from "components/account"; import { useApplication } from "hooks/store"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // components -import { GitHubSignInButton, GoogleSignInButton } from "components/account"; type Props = { handleSignInRedirection: () => Promise; diff --git a/web/components/account/sign-in-forms/optional-set-password.tsx b/web/components/account/sign-in-forms/optional-set-password.tsx index 8fc7935cd..5555d0016 100644 --- a/web/components/account/sign-in-forms/optional-set-password.tsx +++ b/web/components/account/sign-in-forms/optional-set-password.tsx @@ -157,7 +157,7 @@ export const SignInOptionalSetPasswordForm: React.FC = (props) => {
)} /> -

+

Whatever you choose now will be your account{"'"}s password until you change it.

diff --git a/web/components/account/sign-in-forms/password.tsx b/web/components/account/sign-in-forms/password.tsx index 7d51b0cf5..f42398850 100644 --- a/web/components/account/sign-in-forms/password.tsx +++ b/web/components/account/sign-in-forms/password.tsx @@ -1,22 +1,22 @@ import React, { useState } from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; import { Controller, useForm } from "react-hook-form"; import { Eye, EyeOff, XCircle } from "lucide-react"; // services +import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +import { ESignInSteps, ForgotPasswordPopover } from "components/account"; +import { FORGOT_PASSWORD, SIGN_IN_WITH_PASSWORD } from "constants/event-tracker"; +import { checkEmailValidity } from "helpers/string.helper"; +import { useApplication, useEventTracker } from "hooks/store"; import { AuthService } from "services/auth.service"; // hooks -import { useApplication, useEventTracker } from "hooks/store"; // components -import { ESignInSteps, ForgotPasswordPopover } from "components/account"; // ui -import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { checkEmailValidity } from "helpers/string.helper"; // types import { IPasswordSignInData } from "@plane/types"; // constants -import { FORGOT_PASSWORD, SIGN_IN_WITH_PASSWORD } from "constants/event-tracker"; type Props = { email: string; diff --git a/web/components/account/sign-in-forms/root.tsx b/web/components/account/sign-in-forms/root.tsx index 62f63caea..835e018dc 100644 --- a/web/components/account/sign-in-forms/root.tsx +++ b/web/components/account/sign-in-forms/root.tsx @@ -1,11 +1,7 @@ import React, { useEffect, useState } from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; // hooks -import { useApplication, useEventTracker } from "hooks/store"; -import useSignInRedirection from "hooks/use-sign-in-redirection"; -// components -import { LatestFeatureBlock } from "components/common"; import { SignInEmailForm, SignInUniqueCodeForm, @@ -13,8 +9,12 @@ import { OAuthOptions, SignInOptionalSetPasswordForm, } from "components/account"; -// constants +import { LatestFeatureBlock } from "components/common"; import { NAVIGATE_TO_SIGNUP } from "constants/event-tracker"; +import { useApplication, useEventTracker } from "hooks/store"; +import useSignInRedirection from "hooks/use-sign-in-redirection"; +// components +// constants export enum ESignInSteps { EMAIL = "EMAIL", diff --git a/web/components/account/sign-in-forms/unique-code.tsx b/web/components/account/sign-in-forms/unique-code.tsx index 25ee4c462..6929ef0fe 100644 --- a/web/components/account/sign-in-forms/unique-code.tsx +++ b/web/components/account/sign-in-forms/unique-code.tsx @@ -2,19 +2,21 @@ import React, { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { XCircle } from "lucide-react"; // services +import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; + +import { CODE_VERIFIED } from "constants/event-tracker"; +import { checkEmailValidity } from "helpers/string.helper"; +import { useEventTracker } from "hooks/store"; + +import useTimer from "hooks/use-timer"; import { AuthService } from "services/auth.service"; import { UserService } from "services/user.service"; // hooks -import useTimer from "hooks/use-timer"; -import { useEventTracker } from "hooks/store"; // ui -import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { checkEmailValidity } from "helpers/string.helper"; // types import { IEmailCheckData, IMagicSignInData } from "@plane/types"; // constants -import { CODE_VERIFIED } from "constants/event-tracker"; type Props = { email: string; diff --git a/web/components/account/sign-up-forms/email.tsx b/web/components/account/sign-up-forms/email.tsx index b65ca95bf..22dba892f 100644 --- a/web/components/account/sign-up-forms/email.tsx +++ b/web/components/account/sign-up-forms/email.tsx @@ -1,13 +1,13 @@ import React from "react"; +import { observer } from "mobx-react-lite"; import { Controller, useForm } from "react-hook-form"; import { XCircle } from "lucide-react"; -import { observer } from "mobx-react-lite"; // services +import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +import { checkEmailValidity } from "helpers/string.helper"; import { AuthService } from "services/auth.service"; // ui -import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { checkEmailValidity } from "helpers/string.helper"; // types import { IEmailCheckData } from "@plane/types"; diff --git a/web/components/account/sign-up-forms/optional-set-password.tsx b/web/components/account/sign-up-forms/optional-set-password.tsx index 651f2815f..93f774248 100644 --- a/web/components/account/sign-up-forms/optional-set-password.tsx +++ b/web/components/account/sign-up-forms/optional-set-password.tsx @@ -1,19 +1,19 @@ import React, { useState } from "react"; import { Controller, useForm } from "react-hook-form"; // services +import { Eye, EyeOff } from "lucide-react"; +import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +import { ESignUpSteps } from "components/account"; +import { PASSWORD_CREATE_SKIPPED, SETUP_PASSWORD } from "constants/event-tracker"; +import { checkEmailValidity } from "helpers/string.helper"; +import { useEventTracker } from "hooks/store"; import { AuthService } from "services/auth.service"; // hooks -import { useEventTracker } from "hooks/store"; // ui -import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { checkEmailValidity } from "helpers/string.helper"; // components -import { ESignUpSteps } from "components/account"; // constants -import { PASSWORD_CREATE_SELECTED, PASSWORD_CREATE_SKIPPED, SETUP_PASSWORD } from "constants/event-tracker"; // icons -import { Eye, EyeOff } from "lucide-react"; type Props = { email: string; @@ -162,7 +162,7 @@ export const SignUpOptionalSetPasswordForm: React.FC = (props) => {
)} /> -

+

This password will continue to be your account{"'"}s password.

diff --git a/web/components/account/sign-up-forms/password.tsx b/web/components/account/sign-up-forms/password.tsx index 5207a5024..7fab81fbe 100644 --- a/web/components/account/sign-up-forms/password.tsx +++ b/web/components/account/sign-up-forms/password.tsx @@ -1,14 +1,14 @@ import React, { useState } from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; import { Controller, useForm } from "react-hook-form"; import { Eye, EyeOff, XCircle } from "lucide-react"; // services -import { AuthService } from "services/auth.service"; // ui import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // helpers import { checkEmailValidity } from "helpers/string.helper"; +import { AuthService } from "services/auth.service"; // types import { IPasswordSignInData } from "@plane/types"; @@ -134,7 +134,7 @@ export const SignUpPasswordForm: React.FC = observer((props) => { )} /> -

+

This password will continue to be your account{"'"}s password.

diff --git a/web/components/account/sign-up-forms/root.tsx b/web/components/account/sign-up-forms/root.tsx index 8eeb5e99f..455112e9e 100644 --- a/web/components/account/sign-up-forms/root.tsx +++ b/web/components/account/sign-up-forms/root.tsx @@ -1,9 +1,7 @@ import React, { useEffect, useState } from "react"; import { observer } from "mobx-react-lite"; // hooks -import { useApplication, useEventTracker } from "hooks/store"; -import useSignInRedirection from "hooks/use-sign-in-redirection"; -// components +import Link from "next/link"; import { OAuthOptions, SignUpEmailForm, @@ -11,9 +9,11 @@ import { SignUpPasswordForm, SignUpUniqueCodeForm, } from "components/account"; -import Link from "next/link"; -// constants import { NAVIGATE_TO_SIGNIN } from "constants/event-tracker"; +import { useApplication, useEventTracker } from "hooks/store"; +import useSignInRedirection from "hooks/use-sign-in-redirection"; +// components +// constants export enum ESignUpSteps { EMAIL = "EMAIL", diff --git a/web/components/account/sign-up-forms/unique-code.tsx b/web/components/account/sign-up-forms/unique-code.tsx index 51705ea67..28581aed4 100644 --- a/web/components/account/sign-up-forms/unique-code.tsx +++ b/web/components/account/sign-up-forms/unique-code.tsx @@ -3,19 +3,20 @@ import Link from "next/link"; import { Controller, useForm } from "react-hook-form"; import { XCircle } from "lucide-react"; // services +import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; + +import { CODE_VERIFIED } from "constants/event-tracker"; +import { checkEmailValidity } from "helpers/string.helper"; +import { useEventTracker } from "hooks/store"; +import useTimer from "hooks/use-timer"; import { AuthService } from "services/auth.service"; import { UserService } from "services/user.service"; // hooks -import useTimer from "hooks/use-timer"; -import { useEventTracker } from "hooks/store"; // ui -import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { checkEmailValidity } from "helpers/string.helper"; // types import { IEmailCheckData, IMagicSignInData } from "@plane/types"; // constants -import { CODE_VERIFIED } from "constants/event-tracker"; type Props = { email: string; diff --git a/web/components/analytics/custom-analytics/custom-analytics.tsx b/web/components/analytics/custom-analytics/custom-analytics.tsx index 0c3ec8925..1159689c6 100644 --- a/web/components/analytics/custom-analytics/custom-analytics.tsx +++ b/web/components/analytics/custom-analytics/custom-analytics.tsx @@ -1,17 +1,17 @@ -import { useRouter } from "next/router"; -import useSWR from "swr"; -import { useForm } from "react-hook-form"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; +import { useForm } from "react-hook-form"; +import useSWR from "swr"; // services -import { AnalyticsService } from "services/analytics.service"; // components import { CustomAnalyticsSelectBar, CustomAnalyticsMainContent, CustomAnalyticsSidebar } from "components/analytics"; // types -import { IAnalyticsParams } from "@plane/types"; // fetch-keys import { ANALYTICS } from "constants/fetch-keys"; import { cn } from "helpers/common.helper"; import { useApplication } from "hooks/store"; +import { AnalyticsService } from "services/analytics.service"; +import { IAnalyticsParams } from "@plane/types"; type Props = { additionalParams?: Partial; diff --git a/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx b/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx index ec7c40195..b90e9994f 100644 --- a/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx +++ b/web/components/analytics/custom-analytics/graph/custom-tooltip.tsx @@ -60,8 +60,8 @@ export const CustomTooltip: React.FC = ({ datum, analytics, params }) => ? "capitalize" : "" : params.x_axis === "priority" || params.x_axis === "state__group" - ? "capitalize" - : "" + ? "capitalize" + : "" }`} > {params.segment === "assignees__id" ? renderAssigneeName(tooltipValue.toString()) : tooltipValue}: diff --git a/web/components/analytics/custom-analytics/graph/index.tsx b/web/components/analytics/custom-analytics/graph/index.tsx index 51b4089c4..0e70fd898 100644 --- a/web/components/analytics/custom-analytics/graph/index.tsx +++ b/web/components/analytics/custom-analytics/graph/index.tsx @@ -1,15 +1,15 @@ // nivo import { BarDatum } from "@nivo/bar"; // components -import { CustomTooltip } from "./custom-tooltip"; import { Tooltip } from "@plane/ui"; // ui import { BarGraph } from "components/ui"; // helpers -import { findStringWithMostCharacters } from "helpers/array.helper"; import { generateBarColor, generateDisplayName } from "helpers/analytics.helper"; +import { findStringWithMostCharacters } from "helpers/array.helper"; // types import { IAnalyticsParams, IAnalyticsResponse } from "@plane/types"; +import { CustomTooltip } from "./custom-tooltip"; type Props = { analytics: IAnalyticsResponse; @@ -101,8 +101,8 @@ export const AnalyticsGraph: React.FC = ({ analytics, barGraphData, param ? generateDisplayName(datum.value, analytics, params, "x_axis")[0].toUpperCase() : "?" : datum.value && datum.value !== "None" - ? `${datum.value}`.toUpperCase()[0] - : "?"} + ? `${datum.value}`.toUpperCase()[0] + : "?"} diff --git a/web/components/analytics/custom-analytics/main-content.tsx b/web/components/analytics/custom-analytics/main-content.tsx index 7781e7869..e13b9cdd1 100644 --- a/web/components/analytics/custom-analytics/main-content.tsx +++ b/web/components/analytics/custom-analytics/main-content.tsx @@ -2,15 +2,15 @@ import { useRouter } from "next/router"; import { mutate } from "swr"; // components +import { Button, Loader } from "@plane/ui"; import { AnalyticsGraph, AnalyticsTable } from "components/analytics"; // ui -import { Button, Loader } from "@plane/ui"; // helpers +import { ANALYTICS } from "constants/fetch-keys"; import { convertResponseToBarGraphData } from "helpers/analytics.helper"; // types import { IAnalyticsParams, IAnalyticsResponse } from "@plane/types"; // fetch-keys -import { ANALYTICS } from "constants/fetch-keys"; type Props = { analytics: IAnalyticsResponse | undefined; diff --git a/web/components/analytics/custom-analytics/select-bar.tsx b/web/components/analytics/custom-analytics/select-bar.tsx index 31acb8471..7ce2f31ef 100644 --- a/web/components/analytics/custom-analytics/select-bar.tsx +++ b/web/components/analytics/custom-analytics/select-bar.tsx @@ -1,9 +1,9 @@ import { observer } from "mobx-react-lite"; import { Control, Controller, UseFormSetValue } from "react-hook-form"; // hooks +import { SelectProject, SelectSegment, SelectXAxis, SelectYAxis } from "components/analytics"; import { useProject } from "hooks/store"; // components -import { SelectProject, SelectSegment, SelectXAxis, SelectYAxis } from "components/analytics"; // types import { IAnalyticsParams } from "@plane/types"; @@ -22,8 +22,9 @@ export const CustomAnalyticsSelectBar: React.FC = observer((props) => { return (
{!isProjectLevel && (
diff --git a/web/components/analytics/custom-analytics/select/project.tsx b/web/components/analytics/custom-analytics/select/project.tsx index 3c08e1574..61c3acb09 100644 --- a/web/components/analytics/custom-analytics/select/project.tsx +++ b/web/components/analytics/custom-analytics/select/project.tsx @@ -1,8 +1,8 @@ import { observer } from "mobx-react-lite"; // hooks +import { CustomSearchSelect } from "@plane/ui"; import { useProject } from "hooks/store"; // ui -import { CustomSearchSelect } from "@plane/ui"; type Props = { value: string[] | undefined; diff --git a/web/components/analytics/custom-analytics/select/segment.tsx b/web/components/analytics/custom-analytics/select/segment.tsx index 055665d9e..de94eac62 100644 --- a/web/components/analytics/custom-analytics/select/segment.tsx +++ b/web/components/analytics/custom-analytics/select/segment.tsx @@ -3,9 +3,9 @@ import { useRouter } from "next/router"; // ui import { CustomSelect } from "@plane/ui"; // types +import { ANALYTICS_X_AXIS_VALUES } from "constants/analytics"; import { IAnalyticsParams, TXAxisValues } from "@plane/types"; // constants -import { ANALYTICS_X_AXIS_VALUES } from "constants/analytics"; type Props = { value: TXAxisValues | null | undefined; diff --git a/web/components/analytics/custom-analytics/select/x-axis.tsx b/web/components/analytics/custom-analytics/select/x-axis.tsx index 74ee99a77..9daecaaa0 100644 --- a/web/components/analytics/custom-analytics/select/x-axis.tsx +++ b/web/components/analytics/custom-analytics/select/x-axis.tsx @@ -3,9 +3,9 @@ import { useRouter } from "next/router"; // ui import { CustomSelect } from "@plane/ui"; // types +import { ANALYTICS_X_AXIS_VALUES } from "constants/analytics"; import { IAnalyticsParams, TXAxisValues } from "@plane/types"; // constants -import { ANALYTICS_X_AXIS_VALUES } from "constants/analytics"; type Props = { value: TXAxisValues; diff --git a/web/components/analytics/custom-analytics/select/y-axis.tsx b/web/components/analytics/custom-analytics/select/y-axis.tsx index 9f66c6b54..92e4fd2e5 100644 --- a/web/components/analytics/custom-analytics/select/y-axis.tsx +++ b/web/components/analytics/custom-analytics/select/y-axis.tsx @@ -1,9 +1,9 @@ // ui import { CustomSelect } from "@plane/ui"; // types +import { ANALYTICS_Y_AXIS_VALUES } from "constants/analytics"; import { TYAxisValues } from "@plane/types"; // constants -import { ANALYTICS_Y_AXIS_VALUES } from "constants/analytics"; type Props = { value: TYAxisValues; diff --git a/web/components/analytics/custom-analytics/sidebar/projects-list.tsx b/web/components/analytics/custom-analytics/sidebar/projects-list.tsx index 334e9160f..9a0eec227 100644 --- a/web/components/analytics/custom-analytics/sidebar/projects-list.tsx +++ b/web/components/analytics/custom-analytics/sidebar/projects-list.tsx @@ -1,11 +1,11 @@ import { observer } from "mobx-react-lite"; // hooks -import { useProject } from "hooks/store"; // icons import { Contrast, LayoutGrid, Users } from "lucide-react"; // helpers import { renderEmoji } from "helpers/emoji.helper"; import { truncateText } from "helpers/string.helper"; +import { useProject } from "hooks/store"; type Props = { projectIds: string[]; diff --git a/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx b/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx index 6a7b3c7b9..fb9ab90fa 100644 --- a/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx +++ b/web/components/analytics/custom-analytics/sidebar/sidebar-header.tsx @@ -1,12 +1,12 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { NETWORK_CHOICES } from "constants/project"; +import { renderFormattedDate } from "helpers/date-time.helper"; +import { renderEmoji } from "helpers/emoji.helper"; import { useCycle, useMember, useModule, useProject } from "hooks/store"; // helpers -import { renderEmoji } from "helpers/emoji.helper"; -import { renderFormattedDate } from "helpers/date-time.helper"; // constants -import { NETWORK_CHOICES } from "constants/project"; export const CustomAnalyticsSidebarHeader = observer(() => { const router = useRouter(); diff --git a/web/components/analytics/custom-analytics/sidebar/sidebar.tsx b/web/components/analytics/custom-analytics/sidebar/sidebar.tsx index aab7f874f..7a7c52377 100644 --- a/web/components/analytics/custom-analytics/sidebar/sidebar.tsx +++ b/web/components/analytics/custom-analytics/sidebar/sidebar.tsx @@ -1,24 +1,24 @@ import { useEffect } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { mutate } from "swr"; // services -import { AnalyticsService } from "services/analytics.service"; // hooks -import { useCycle, useModule, useProject, useUser, useWorkspace } from "hooks/store"; // components -import { CustomAnalyticsSidebarHeader, CustomAnalyticsSidebarProjectsList } from "components/analytics"; // ui +import { CalendarDays, Download, RefreshCw } from "lucide-react"; import { Button, LayersIcon, TOAST_TYPE, setToast } from "@plane/ui"; // icons -import { CalendarDays, Download, RefreshCw } from "lucide-react"; +import { CustomAnalyticsSidebarHeader, CustomAnalyticsSidebarProjectsList } from "components/analytics"; // helpers -import { renderFormattedDate } from "helpers/date-time.helper"; // types -import { IAnalyticsParams, IAnalyticsResponse, IExportAnalyticsFormData, IWorkspace } from "@plane/types"; // fetch-keys import { ANALYTICS } from "constants/fetch-keys"; import { cn } from "helpers/common.helper"; +import { renderFormattedDate } from "helpers/date-time.helper"; +import { useCycle, useModule, useProject, useUser, useWorkspace } from "hooks/store"; +import { AnalyticsService } from "services/analytics.service"; +import { IAnalyticsParams, IAnalyticsResponse, IExportAnalyticsFormData, IWorkspace } from "@plane/types"; type Props = { analytics: IAnalyticsResponse | undefined; @@ -143,7 +143,7 @@ export const CustomAnalyticsSidebar: React.FC = observer((props) => { return (
@@ -176,10 +176,10 @@ export const CustomAnalyticsSidebar: React.FC = observer((props) => {
-
+
diff --git a/web/components/core/modals/user-image-upload-modal.tsx b/web/components/core/modals/user-image-upload-modal.tsx index 3d0fbb9ee..7f41b8225 100644 --- a/web/components/core/modals/user-image-upload-modal.tsx +++ b/web/components/core/modals/user-image-upload-modal.tsx @@ -3,15 +3,16 @@ import { observer } from "mobx-react-lite"; import { useDropzone } from "react-dropzone"; import { Transition, Dialog } from "@headlessui/react"; // hooks +import { UserCircle2 } from "lucide-react"; +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; + +import { MAX_FILE_SIZE } from "constants/common"; import { useApplication } from "hooks/store"; // services import { FileService } from "services/file.service"; // ui -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // icons -import { UserCircle2 } from "lucide-react"; // constants -import { MAX_FILE_SIZE } from "constants/common"; type Props = { handleDelete?: () => void; diff --git a/web/components/core/modals/workspace-image-upload-modal.tsx b/web/components/core/modals/workspace-image-upload-modal.tsx index eec62b919..9c1a8363b 100644 --- a/web/components/core/modals/workspace-image-upload-modal.tsx +++ b/web/components/core/modals/workspace-image-upload-modal.tsx @@ -1,18 +1,18 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useDropzone } from "react-dropzone"; import { Transition, Dialog } from "@headlessui/react"; // hooks +import { UserCircle2 } from "lucide-react"; +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; +import { MAX_FILE_SIZE } from "constants/common"; import { useApplication, useWorkspace } from "hooks/store"; // services import { FileService } from "services/file.service"; // ui -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // icons -import { UserCircle2 } from "lucide-react"; // constants -import { MAX_FILE_SIZE } from "constants/common"; type Props = { handleRemove?: () => void; diff --git a/web/components/core/render-if-visible-HOC.tsx b/web/components/core/render-if-visible-HOC.tsx index 24ae19fe7..f0e9f59b4 100644 --- a/web/components/core/render-if-visible-HOC.tsx +++ b/web/components/core/render-if-visible-HOC.tsx @@ -1,10 +1,10 @@ -import { cn } from "helpers/common.helper"; import React, { useState, useRef, useEffect, ReactNode, MutableRefObject } from "react"; +import { cn } from "helpers/common.helper"; type Props = { defaultHeight?: string; verticalOffset?: number; - horizonatlOffset?: number; + horizontalOffset?: number; root?: MutableRefObject; children: ReactNode; as?: keyof JSX.IntrinsicElements; @@ -20,7 +20,7 @@ const RenderIfVisible: React.FC = (props) => { defaultHeight = "300px", root, verticalOffset = 50, - horizonatlOffset = 0, + horizontalOffset = 0, as = "div", children, classNames = "", @@ -52,17 +52,18 @@ const RenderIfVisible: React.FC = (props) => { }, { root: root?.current, - rootMargin: `${verticalOffset}% ${horizonatlOffset}% ${verticalOffset}% ${horizonatlOffset}%`, + rootMargin: `${verticalOffset}% ${horizontalOffset}% ${verticalOffset}% ${horizontalOffset}%`, } ); observer.observe(intersectionRef.current); return () => { if (intersectionRef.current) { + // eslint-disable-next-line react-hooks/exhaustive-deps observer.unobserve(intersectionRef.current); } }; } - }, [root?.current, intersectionRef, children, changingReference]); + }, [intersectionRef, children, changingReference, root, verticalOffset, horizontalOffset]); //Set height after render useEffect(() => { diff --git a/web/components/core/sidebar/links-list.tsx b/web/components/core/sidebar/links-list.tsx index 6b987e308..3e068e4f0 100644 --- a/web/components/core/sidebar/links-list.tsx +++ b/web/components/core/sidebar/links-list.tsx @@ -1,15 +1,14 @@ -// ui -import { ExternalLinkIcon, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +import { observer } from "mobx-react"; // icons import { Pencil, Trash2, LinkIcon } from "lucide-react"; +// ui +import { ExternalLinkIcon, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; // helpers import { calculateTimeAgo } from "helpers/date-time.helper"; +// hooks +import { useMember } from "hooks/store"; // types import { ILinkDetails, UserAuth } from "@plane/types"; -// hooks -import { observer } from "mobx-react"; -import { useMeasure } from "@nivo/core"; -import { useMember } from "hooks/store"; type Props = { links: ILinkDetails[]; diff --git a/web/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx b/web/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx index 0212e4980..880cf8146 100644 --- a/web/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx +++ b/web/components/core/sidebar/sidebar-menu-hamburger-toggle.tsx @@ -1,7 +1,7 @@ import { FC } from "react"; +import { observer } from "mobx-react"; import { Menu } from "lucide-react"; import { useApplication } from "hooks/store"; -import { observer } from "mobx-react"; type Props = { onClick?: () => void; diff --git a/web/components/core/sidebar/sidebar-progress-stats.tsx b/web/components/core/sidebar/sidebar-progress-stats.tsx index 12c387f47..157fd2c79 100644 --- a/web/components/core/sidebar/sidebar-progress-stats.tsx +++ b/web/components/core/sidebar/sidebar-progress-stats.tsx @@ -4,14 +4,14 @@ import Image from "next/image"; // headless ui import { Tab } from "@headlessui/react"; // hooks +import { Avatar, StateGroupIcon } from "@plane/ui"; +import { SingleProgressStats } from "components/core"; import useLocalStorage from "hooks/use-local-storage"; // images import emptyLabel from "public/empty-state/empty_label.svg"; import emptyMembers from "public/empty-state/empty_members.svg"; // components -import { SingleProgressStats } from "components/core"; // ui -import { Avatar, StateGroupIcon } from "@plane/ui"; // types import { IModule, diff --git a/web/components/core/theme/color-picker-input.tsx b/web/components/core/theme/color-picker-input.tsx index 19cd519cb..03ac06eae 100644 --- a/web/components/core/theme/color-picker-input.tsx +++ b/web/components/core/theme/color-picker-input.tsx @@ -1,5 +1,6 @@ import { FC, Fragment } from "react"; // react-form +import { ColorResult, SketchPicker } from "react-color"; import { Control, Controller, @@ -11,12 +12,11 @@ import { UseFormWatch, } from "react-hook-form"; // react-color -import { ColorResult, SketchPicker } from "react-color"; // component import { Popover, Transition } from "@headlessui/react"; +import { Palette } from "lucide-react"; import { Input } from "@plane/ui"; // icons -import { Palette } from "lucide-react"; // types import { IUserTheme } from "@plane/types"; diff --git a/web/components/core/theme/custom-theme-selector.tsx b/web/components/core/theme/custom-theme-selector.tsx index fdb7a6483..b9e94a2d2 100644 --- a/web/components/core/theme/custom-theme-selector.tsx +++ b/web/components/core/theme/custom-theme-selector.tsx @@ -1,10 +1,10 @@ import { observer } from "mobx-react-lite"; -import { Controller, useForm } from "react-hook-form"; import { useTheme } from "next-themes"; +import { Controller, useForm } from "react-hook-form"; // hooks +import { Button, InputColorPicker } from "@plane/ui"; import { useUser } from "hooks/store"; // ui -import { Button, InputColorPicker } from "@plane/ui"; // types import { IUserTheme } from "@plane/types"; diff --git a/web/components/core/theme/theme-switch.tsx b/web/components/core/theme/theme-switch.tsx index bcd847a28..428e6930b 100644 --- a/web/components/core/theme/theme-switch.tsx +++ b/web/components/core/theme/theme-switch.tsx @@ -1,8 +1,8 @@ import { FC } from "react"; // constants +import { CustomSelect } from "@plane/ui"; import { THEME_OPTIONS, I_THEME_OPTION } from "constants/themes"; // ui -import { CustomSelect } from "@plane/ui"; type Props = { value: I_THEME_OPTION | null; diff --git a/web/components/cycles/active-cycle-details.tsx b/web/components/cycles/active-cycle-details.tsx index bc22cb8ab..d9309d4b5 100644 --- a/web/components/cycles/active-cycle-details.tsx +++ b/web/components/cycles/active-cycle-details.tsx @@ -1,8 +1,8 @@ import { MouseEvent } from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; -import useSWR from "swr"; +import Link from "next/link"; import { useTheme } from "next-themes"; +import useSWR from "swr"; // hooks import { useCycle, useIssues, useMember, useProject, useUser } from "hooks/store"; // ui @@ -183,7 +183,7 @@ export const ActiveCycleDetails: React.FC = observer((props - + {`${daysLeft} ${daysLeft > 1 ? "days" : "day"} left`} {activeCycle.is_favorite ? ( @@ -303,9 +303,9 @@ export const ActiveCycleDetails: React.FC = observer((props
-
+
High Priority Issues
-
+
{activeCycleIssues ? ( activeCycleIssues.length > 0 ? ( activeCycleIssues.map((issue: any) => ( @@ -329,17 +329,17 @@ export const ActiveCycleDetails: React.FC = observer((props {truncateText(issue.name, 30)}
-
+
{}} projectId={projectId?.toString() ?? ""} - disabled={true} + disabled buttonVariant="background-with-text" /> {issue.target_date && ( -
+
{renderFormattedDateWithoutYear(issue.target_date)}
@@ -349,7 +349,7 @@ export const ActiveCycleDetails: React.FC = observer((props )) ) : ( -
+
There are no high priority issues present in this cycle.
) @@ -362,7 +362,7 @@ export const ActiveCycleDetails: React.FC = observer((props )}
-
+
diff --git a/web/components/cycles/active-cycle-stats.tsx b/web/components/cycles/active-cycle-stats.tsx index 3ca5caeb2..7d935c347 100644 --- a/web/components/cycles/active-cycle-stats.tsx +++ b/web/components/cycles/active-cycle-stats.tsx @@ -1,11 +1,11 @@ import React, { Fragment } from "react"; import { Tab } from "@headlessui/react"; // hooks +import { Avatar } from "@plane/ui"; +import { SingleProgressStats } from "components/core"; import useLocalStorage from "hooks/use-local-storage"; // components -import { SingleProgressStats } from "components/core"; // ui -import { Avatar } from "@plane/ui"; // types import { ICycle } from "@plane/types"; diff --git a/web/components/cycles/cycle-mobile-header.tsx b/web/components/cycles/cycle-mobile-header.tsx index 624334ec4..942b5832b 100644 --- a/web/components/cycles/cycle-mobile-header.tsx +++ b/web/components/cycles/cycle-mobile-header.tsx @@ -1,16 +1,16 @@ import { useCallback, useState } from "react"; import router from "next/router"; //components -import { CustomMenu } from "@plane/ui"; // icons import { Calendar, ChevronDown, Kanban, List } from "lucide-react"; -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; +import { CustomMenu } from "@plane/ui"; // hooks -import { useIssues, useCycle, useProjectState, useLabel, useMember } from "hooks/store"; // constants -import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT, ISSUE_LAYOUTS } from "constants/issue"; import { ProjectAnalyticsModal } from "components/analytics"; import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT, ISSUE_LAYOUTS } from "constants/issue"; +import { useIssues, useCycle, useProjectState, useLabel, useMember } from "hooks/store"; +import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; export const CycleMobileHeader = () => { const [analyticsModal, setAnalyticsModal] = useState(false); @@ -100,6 +100,7 @@ export const CycleMobileHeader = () => { > {layouts.map((layout, index) => ( { handleLayoutChange(ISSUE_LAYOUTS[index].key); }} diff --git a/web/components/cycles/cycle-peek-overview.tsx b/web/components/cycles/cycle-peek-overview.tsx index fbfb46b50..b7e778c10 100644 --- a/web/components/cycles/cycle-peek-overview.tsx +++ b/web/components/cycles/cycle-peek-overview.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks import { useCycle } from "hooks/store"; // components diff --git a/web/components/cycles/cycles-board-card.tsx b/web/components/cycles/cycles-board-card.tsx index 72af8409d..2eecb1ae9 100644 --- a/web/components/cycles/cycles-board-card.tsx +++ b/web/components/cycles/cycles-board-card.tsx @@ -1,12 +1,10 @@ import { FC, MouseEvent, useState } from "react"; -import { useRouter } from "next/router"; -import Link from "next/link"; import { observer } from "mobx-react"; +import Link from "next/link"; +import { useRouter } from "next/router"; // hooks -import { useEventTracker, useCycle, useUser, useMember } from "hooks/store"; // components -import { CycleCreateUpdateModal, CycleDeleteModal } from "components/cycles"; -// ui +import { Info, LinkIcon, Pencil, Star, Trash2 } from "lucide-react"; import { Avatar, AvatarGroup, @@ -18,15 +16,17 @@ import { setToast, setPromiseToast, } from "@plane/ui"; +import { CycleCreateUpdateModal, CycleDeleteModal } from "components/cycles"; +// ui // icons -import { Info, LinkIcon, Pencil, Star, Trash2 } from "lucide-react"; // helpers +import { CYCLE_STATUS } from "constants/cycle"; +import { CYCLE_FAVORITED, CYCLE_UNFAVORITED } from "constants/event-tracker"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { findHowManyDaysLeft, renderFormattedDate } from "helpers/date-time.helper"; import { copyTextToClipboard } from "helpers/string.helper"; // constants -import { CYCLE_STATUS } from "constants/cycle"; -import { EUserWorkspaceRoles } from "constants/workspace"; -import { CYCLE_FAVORITED, CYCLE_UNFAVORITED } from "constants/event-tracker"; +import { useEventTracker, useCycle, useUser, useMember } from "hooks/store"; //.types import { TCycleGroups } from "@plane/types"; diff --git a/web/components/cycles/cycles-board.tsx b/web/components/cycles/cycles-board.tsx index 1a9069267..00c98e57c 100644 --- a/web/components/cycles/cycles-board.tsx +++ b/web/components/cycles/cycles-board.tsx @@ -2,12 +2,12 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; // hooks -import { useUser } from "hooks/store"; // components import { CyclePeekOverview, CyclesBoardCard } from "components/cycles"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // constants import { CYCLE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { useUser } from "hooks/store"; export interface ICyclesBoard { cycleIds: string[]; diff --git a/web/components/cycles/cycles-list-item.tsx b/web/components/cycles/cycles-list-item.tsx index 9ab2e3de8..9bf1866ff 100644 --- a/web/components/cycles/cycles-list-item.tsx +++ b/web/components/cycles/cycles-list-item.tsx @@ -1,12 +1,9 @@ import { FC, MouseEvent, useState } from "react"; +import { observer } from "mobx-react"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react"; // hooks -import { useEventTracker, useCycle, useUser, useMember } from "hooks/store"; -// components -import { CycleCreateUpdateModal, CycleDeleteModal } from "components/cycles"; -// ui +import { Check, Info, LinkIcon, Pencil, Star, Trash2, User2 } from "lucide-react"; import { CustomMenu, Tooltip, @@ -18,17 +15,20 @@ import { setToast, setPromiseToast, } from "@plane/ui"; -// icons -import { Check, Info, LinkIcon, Pencil, Star, Trash2, User2 } from "lucide-react"; -// helpers +import { CycleCreateUpdateModal, CycleDeleteModal } from "components/cycles"; +import { CYCLE_STATUS } from "constants/cycle"; +import { CYCLE_FAVORITED, CYCLE_UNFAVORITED } from "constants/event-tracker"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { findHowManyDaysLeft, renderFormattedDate } from "helpers/date-time.helper"; import { copyTextToClipboard } from "helpers/string.helper"; +import { useEventTracker, useCycle, useUser, useMember } from "hooks/store"; +// components +// ui +// icons +// helpers // constants -import { CYCLE_STATUS } from "constants/cycle"; -import { EUserWorkspaceRoles } from "constants/workspace"; // types import { TCycleGroups } from "@plane/types"; -import { CYCLE_FAVORITED, CYCLE_UNFAVORITED } from "constants/event-tracker"; type TCyclesListItem = { cycleId: string; @@ -227,7 +227,7 @@ export const CyclesListItem: FC = observer((props) => {
-
diff --git a/web/components/cycles/cycles-list.tsx b/web/components/cycles/cycles-list.tsx index 173a7f4b7..99cf1f2b1 100644 --- a/web/components/cycles/cycles-list.tsx +++ b/web/components/cycles/cycles-list.tsx @@ -2,14 +2,14 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; // hooks -import { useUser } from "hooks/store"; // components +import { Loader } from "@plane/ui"; import { CyclePeekOverview, CyclesListItem } from "components/cycles"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Loader } from "@plane/ui"; // constants import { CYCLE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { useUser } from "hooks/store"; export interface ICyclesList { cycleIds: string[]; diff --git a/web/components/cycles/cycles-view.tsx b/web/components/cycles/cycles-view.tsx index a321be0b5..745ca1bd3 100644 --- a/web/components/cycles/cycles-view.tsx +++ b/web/components/cycles/cycles-view.tsx @@ -1,11 +1,11 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // hooks -import { useCycle } from "hooks/store"; // components import { CyclesBoard, CyclesList, CyclesListGanttChartView } from "components/cycles"; // ui components import { CycleModuleBoardLayout, CycleModuleListLayout, GanttLayoutLoader } from "components/ui"; +import { useCycle } from "hooks/store"; // types import { TCycleLayout, TCycleView } from "@plane/types"; @@ -32,10 +32,10 @@ export const CyclesView: FC = observer((props) => { filter === "completed" ? currentProjectCompletedCycleIds : filter === "draft" - ? currentProjectDraftCycleIds - : filter === "upcoming" - ? currentProjectUpcomingCycleIds - : currentProjectCycleIds; + ? currentProjectDraftCycleIds + : filter === "upcoming" + ? currentProjectUpcomingCycleIds + : currentProjectCycleIds; if (loader || !cyclesList) return ( diff --git a/web/components/cycles/delete-modal.tsx b/web/components/cycles/delete-modal.tsx index 239fe6a66..fd7b1f356 100644 --- a/web/components/cycles/delete-modal.tsx +++ b/web/components/cycles/delete-modal.tsx @@ -1,16 +1,16 @@ import { Fragment, useState } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; -import { observer } from "mobx-react-lite"; import { AlertTriangle } from "lucide-react"; // hooks +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; +import { CYCLE_DELETED } from "constants/event-tracker"; import { useEventTracker, useCycle } from "hooks/store"; // components -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // types import { ICycle } from "@plane/types"; // constants -import { CYCLE_DELETED } from "constants/event-tracker"; interface ICycleDelete { cycle: ICycle; diff --git a/web/components/cycles/form.tsx b/web/components/cycles/form.tsx index 799d80438..4e2f55ef9 100644 --- a/web/components/cycles/form.tsx +++ b/web/components/cycles/form.tsx @@ -1,9 +1,9 @@ import { useEffect } from "react"; import { Controller, useForm } from "react-hook-form"; // components +import { Button, Input, TextArea } from "@plane/ui"; import { DateRangeDropdown, ProjectDropdown } from "components/dropdowns"; // ui -import { Button, Input, TextArea } from "@plane/ui"; // helpers import { renderFormattedPayloadDate } from "helpers/date-time.helper"; // types diff --git a/web/components/cycles/gantt-chart/blocks.tsx b/web/components/cycles/gantt-chart/blocks.tsx index 5d82c94a8..e9fdd50de 100644 --- a/web/components/cycles/gantt-chart/blocks.tsx +++ b/web/components/cycles/gantt-chart/blocks.tsx @@ -1,11 +1,11 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // hooks -import { useApplication, useCycle } from "hooks/store"; // ui import { Tooltip, ContrastIcon } from "@plane/ui"; // helpers import { renderFormattedDate } from "helpers/date-time.helper"; +import { useApplication, useCycle } from "hooks/store"; type Props = { cycleId: string; @@ -33,12 +33,12 @@ export const CycleGanttBlock: React.FC = observer((props) => { cycleStatus === "current" ? "#09a953" : cycleStatus === "upcoming" - ? "#f7ae59" - : cycleStatus === "completed" - ? "#3f76ff" - : cycleStatus === "draft" - ? "rgb(var(--color-text-200))" - : "", + ? "#f7ae59" + : cycleStatus === "completed" + ? "#3f76ff" + : cycleStatus === "draft" + ? "rgb(var(--color-text-200))" + : "", }} onClick={() => router.push(`/${workspaceSlug}/projects/${cycleDetails?.project_id}/cycles/${cycleDetails?.id}`)} > @@ -86,12 +86,12 @@ export const CycleGanttSidebarBlock: React.FC = observer((props) => { cycleStatus === "current" ? "#09a953" : cycleStatus === "upcoming" - ? "#f7ae59" - : cycleStatus === "completed" - ? "#3f76ff" - : cycleStatus === "draft" - ? "rgb(var(--color-text-200))" - : "" + ? "#f7ae59" + : cycleStatus === "completed" + ? "#3f76ff" + : cycleStatus === "draft" + ? "rgb(var(--color-text-200))" + : "" }`} />
{cycleDetails?.name}
diff --git a/web/components/cycles/gantt-chart/cycles-list-layout.tsx b/web/components/cycles/gantt-chart/cycles-list-layout.tsx index 646333aad..521273c51 100644 --- a/web/components/cycles/gantt-chart/cycles-list-layout.tsx +++ b/web/components/cycles/gantt-chart/cycles-list-layout.tsx @@ -1,15 +1,15 @@ import { FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { CycleGanttBlock } from "components/cycles"; +import { GanttChartRoot, IBlockUpdateData, CycleGanttSidebar } from "components/gantt-chart"; +import { EUserProjectRoles } from "constants/project"; import { useCycle, useUser } from "hooks/store"; // components -import { GanttChartRoot, IBlockUpdateData, CycleGanttSidebar } from "components/gantt-chart"; -import { CycleGanttBlock } from "components/cycles"; // types import { ICycle } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; type Props = { workspaceSlug: string; diff --git a/web/components/cycles/modal.tsx b/web/components/cycles/modal.tsx index 1d60f1dc4..2d1640ec9 100644 --- a/web/components/cycles/modal.tsx +++ b/web/components/cycles/modal.tsx @@ -1,18 +1,18 @@ import React, { useEffect, useState } from "react"; import { Dialog, Transition } from "@headlessui/react"; // services -import { CycleService } from "services/cycle.service"; -// hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; +import { CycleForm } from "components/cycles"; +import { CYCLE_CREATED, CYCLE_UPDATED } from "constants/event-tracker"; import { useEventTracker, useCycle, useProject } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; +import { CycleService } from "services/cycle.service"; +// hooks // components -import { CycleForm } from "components/cycles"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // types import type { CycleDateCheckData, ICycle, TCycleView } from "@plane/types"; // constants -import { CYCLE_CREATED, CYCLE_UPDATED } from "constants/event-tracker"; type CycleModalProps = { isOpen: boolean; diff --git a/web/components/cycles/sidebar.tsx b/web/components/cycles/sidebar.tsx index f01c840f1..06db83e0d 100644 --- a/web/components/cycles/sidebar.tsx +++ b/web/components/cycles/sidebar.tsx @@ -1,32 +1,31 @@ import React, { useEffect, useState } from "react"; -import { useRouter } from "next/router"; +import isEmpty from "lodash/isEmpty"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; import { Disclosure, Transition } from "@headlessui/react"; -import isEmpty from "lodash/isEmpty"; -// services -import { CycleService } from "services/cycle.service"; -// hooks -import { useEventTracker, useCycle, useUser, useMember } from "hooks/store"; +// icons +import { ChevronDown, LinkIcon, Trash2, UserCircle2, AlertCircle, ChevronRight, CalendarClock } from "lucide-react"; +// ui +import { Avatar, CustomMenu, Loader, LayersIcon, TOAST_TYPE, setToast } from "@plane/ui"; // components import { SidebarProgressStats } from "components/core"; import ProgressChart from "components/core/sidebar/progress-chart"; import { CycleDeleteModal } from "components/cycles/delete-modal"; -// ui -import { Avatar, CustomMenu, Loader, LayersIcon, TOAST_TYPE, setToast } from "@plane/ui"; -// icons -import { ChevronDown, LinkIcon, Trash2, UserCircle2, AlertCircle, ChevronRight, CalendarClock } from "lucide-react"; +import { DateRangeDropdown } from "components/dropdowns"; +// constants +import { CYCLE_STATUS } from "constants/cycle"; +import { CYCLE_UPDATED } from "constants/event-tracker"; +import { EUserWorkspaceRoles } from "constants/workspace"; // helpers -import { copyUrlToClipboard } from "helpers/string.helper"; import { findHowManyDaysLeft, renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { copyUrlToClipboard } from "helpers/string.helper"; +// hooks +import { useEventTracker, useCycle, useUser, useMember } from "hooks/store"; +// services +import { CycleService } from "services/cycle.service"; // types import { ICycle } from "@plane/types"; -// constants -import { EUserWorkspaceRoles } from "constants/workspace"; -import { CYCLE_UPDATED } from "constants/event-tracker"; -// fetch-keys -import { CYCLE_STATUS } from "constants/cycle"; -import { DateRangeDropdown } from "components/dropdowns"; type Props = { cycleId: string; @@ -299,7 +298,7 @@ export const CycleDetailsSidebar: React.FC = observer((props) => { Date range
-
+
void; diff --git a/web/components/dashboard/home-dashboard-widgets.tsx b/web/components/dashboard/home-dashboard-widgets.tsx index 2e2f9ef88..ab96ef90f 100644 --- a/web/components/dashboard/home-dashboard-widgets.tsx +++ b/web/components/dashboard/home-dashboard-widgets.tsx @@ -1,7 +1,5 @@ import { observer } from "mobx-react-lite"; // hooks -import { useApplication, useDashboard } from "hooks/store"; -// components import { AssignedIssuesWidget, CreatedIssuesWidget, @@ -13,6 +11,8 @@ import { RecentProjectsWidget, WidgetProps, } from "components/dashboard"; +import { useApplication, useDashboard } from "hooks/store"; +// components // types import { TWidgetKeys } from "@plane/types"; diff --git a/web/components/dashboard/project-empty-state.tsx b/web/components/dashboard/project-empty-state.tsx index bb7f82f34..32236e233 100644 --- a/web/components/dashboard/project-empty-state.tsx +++ b/web/components/dashboard/project-empty-state.tsx @@ -1,13 +1,13 @@ -import Image from "next/image"; import { observer } from "mobx-react-lite"; +import Image from "next/image"; // hooks +import { Button } from "@plane/ui"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useApplication, useEventTracker, useUser } from "hooks/store"; // ui -import { Button } from "@plane/ui"; // assets import ProjectEmptyStateImage from "public/empty-state/dashboard/project.svg"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; export const DashboardProjectEmptyState = observer(() => { // store hooks diff --git a/web/components/dashboard/widgets/assigned-issues.tsx b/web/components/dashboard/widgets/assigned-issues.tsx index 407ac9ddf..3833d319c 100644 --- a/web/components/dashboard/widgets/assigned-issues.tsx +++ b/web/components/dashboard/widgets/assigned-issues.tsx @@ -1,10 +1,8 @@ import { useEffect, useState } from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; import { Tab } from "@headlessui/react"; // hooks -import { useDashboard } from "hooks/store"; -// components import { DurationFilterDropdown, TabsList, @@ -12,12 +10,14 @@ import { WidgetLoader, WidgetProps, } from "components/dashboard/widgets"; -// helpers +import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; import { getCustomDates, getRedirectionFilters, getTabKey } from "helpers/dashboard.helper"; +import { useDashboard } from "hooks/store"; +// components +// helpers // types import { EDurationFilters, TAssignedIssuesWidgetFilters, TAssignedIssuesWidgetResponse } from "@plane/types"; // constants -import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; const WIDGET_KEY = "assigned_issues"; diff --git a/web/components/dashboard/widgets/created-issues.tsx b/web/components/dashboard/widgets/created-issues.tsx index 23e7bee27..61a1181e9 100644 --- a/web/components/dashboard/widgets/created-issues.tsx +++ b/web/components/dashboard/widgets/created-issues.tsx @@ -1,10 +1,8 @@ import { useEffect, useState } from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; import { Tab } from "@headlessui/react"; // hooks -import { useDashboard } from "hooks/store"; -// components import { DurationFilterDropdown, TabsList, @@ -12,12 +10,14 @@ import { WidgetLoader, WidgetProps, } from "components/dashboard/widgets"; -// helpers +import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; import { getCustomDates, getRedirectionFilters, getTabKey } from "helpers/dashboard.helper"; +import { useDashboard } from "hooks/store"; +// components +// helpers // types import { EDurationFilters, TCreatedIssuesWidgetFilters, TCreatedIssuesWidgetResponse } from "@plane/types"; // constants -import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; const WIDGET_KEY = "created_issues"; diff --git a/web/components/dashboard/widgets/dropdowns/duration-filter.tsx b/web/components/dashboard/widgets/dropdowns/duration-filter.tsx index fbdac4f00..3cf22c350 100644 --- a/web/components/dashboard/widgets/dropdowns/duration-filter.tsx +++ b/web/components/dashboard/widgets/dropdowns/duration-filter.tsx @@ -1,15 +1,14 @@ import { useState } from "react"; import { ChevronDown } from "lucide-react"; // components +import { CustomMenu } from "@plane/ui"; import { DateFilterModal } from "components/core"; // ui -import { CustomMenu } from "@plane/ui"; // helpers import { getDurationFilterDropdownLabel } from "helpers/dashboard.helper"; // types import { EDurationFilters } from "@plane/types"; // constants -import { DURATION_FILTER_OPTIONS } from "constants/dashboard"; type Props = { customDates?: string[]; diff --git a/web/components/dashboard/widgets/empty-states/assigned-issues.tsx b/web/components/dashboard/widgets/empty-states/assigned-issues.tsx index f60d8efe6..0cfad7dc9 100644 --- a/web/components/dashboard/widgets/empty-states/assigned-issues.tsx +++ b/web/components/dashboard/widgets/empty-states/assigned-issues.tsx @@ -1,9 +1,9 @@ import Image from "next/image"; import { useTheme } from "next-themes"; // types +import { ASSIGNED_ISSUES_EMPTY_STATES } from "constants/dashboard"; import { TIssuesListTypes } from "@plane/types"; // constants -import { ASSIGNED_ISSUES_EMPTY_STATES } from "constants/dashboard"; type Props = { type: TIssuesListTypes; diff --git a/web/components/dashboard/widgets/empty-states/created-issues.tsx b/web/components/dashboard/widgets/empty-states/created-issues.tsx index fe93d4404..2c59342fc 100644 --- a/web/components/dashboard/widgets/empty-states/created-issues.tsx +++ b/web/components/dashboard/widgets/empty-states/created-issues.tsx @@ -1,9 +1,9 @@ import Image from "next/image"; import { useTheme } from "next-themes"; // types +import { CREATED_ISSUES_EMPTY_STATES } from "constants/dashboard"; import { TIssuesListTypes } from "@plane/types"; // constants -import { CREATED_ISSUES_EMPTY_STATES } from "constants/dashboard"; type Props = { type: TIssuesListTypes; diff --git a/web/components/dashboard/widgets/issue-panels/issue-list-item.tsx b/web/components/dashboard/widgets/issue-panels/issue-list-item.tsx index 716a3afc1..a5279f715 100644 --- a/web/components/dashboard/widgets/issue-panels/issue-list-item.tsx +++ b/web/components/dashboard/widgets/issue-panels/issue-list-item.tsx @@ -1,11 +1,11 @@ -import { observer } from "mobx-react-lite"; import isToday from "date-fns/isToday"; +import { observer } from "mobx-react-lite"; // hooks -import { useIssueDetail, useMember, useProject } from "hooks/store"; // ui import { Avatar, AvatarGroup, ControlLink, PriorityIcon } from "@plane/ui"; // helpers import { findTotalDaysInRange, renderFormattedDate } from "helpers/date-time.helper"; +import { useIssueDetail, useMember, useProject } from "hooks/store"; // types import { TIssue, TWidgetIssue } from "@plane/types"; diff --git a/web/components/dashboard/widgets/issue-panels/issues-list.tsx b/web/components/dashboard/widgets/issue-panels/issues-list.tsx index 16b2b95d9..c429f3599 100644 --- a/web/components/dashboard/widgets/issue-panels/issues-list.tsx +++ b/web/components/dashboard/widgets/issue-panels/issues-list.tsx @@ -1,7 +1,7 @@ import Link from "next/link"; // hooks -import { useIssueDetail } from "hooks/store"; // components +import { Loader, getButtonStyling } from "@plane/ui"; import { AssignedCompletedIssueListItem, AssignedIssuesEmptyState, @@ -14,10 +14,10 @@ import { IssueListItemProps, } from "components/dashboard/widgets"; // ui -import { Loader, getButtonStyling } from "@plane/ui"; // helpers import { cn } from "helpers/common.helper"; import { getRedirectionFilters } from "helpers/dashboard.helper"; +import { useIssueDetail } from "hooks/store"; // types import { TAssignedIssuesWidgetResponse, TCreatedIssuesWidgetResponse, TIssue, TIssuesListTypes } from "@plane/types"; diff --git a/web/components/dashboard/widgets/issue-panels/tabs-list.tsx b/web/components/dashboard/widgets/issue-panels/tabs-list.tsx index d18f08f27..d5fcea697 100644 --- a/web/components/dashboard/widgets/issue-panels/tabs-list.tsx +++ b/web/components/dashboard/widgets/issue-panels/tabs-list.tsx @@ -1,11 +1,11 @@ import { observer } from "mobx-react"; import { Tab } from "@headlessui/react"; // helpers +import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; import { cn } from "helpers/common.helper"; // types import { EDurationFilters, TIssuesListTypes } from "@plane/types"; // constants -import { FILTERED_ISSUES_TABS_LIST, UNFILTERED_ISSUES_TABS_LIST } from "constants/dashboard"; type Props = { durationFilter: EDurationFilters; diff --git a/web/components/dashboard/widgets/issues-by-priority.tsx b/web/components/dashboard/widgets/issues-by-priority.tsx index 3e9823fe4..a8a8f64e8 100644 --- a/web/components/dashboard/widgets/issues-by-priority.tsx +++ b/web/components/dashboard/widgets/issues-by-priority.tsx @@ -1,9 +1,8 @@ import { useEffect } from "react"; -import { useRouter } from "next/router"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; +import { useRouter } from "next/router"; // hooks -import { useDashboard } from "hooks/store"; // components import { DurationFilterDropdown, @@ -12,11 +11,10 @@ import { WidgetProps, } from "components/dashboard/widgets"; // helpers -import { getCustomDates } from "helpers/dashboard.helper"; // types -import { EDurationFilters, TIssuesByPriorityWidgetFilters, TIssuesByPriorityWidgetResponse } from "@plane/types"; // constants import { IssuesByPriorityGraph } from "components/graphs"; +import { EDurationFilters, TIssuesByPriorityWidgetFilters, TIssuesByPriorityWidgetResponse } from "@plane/types"; const WIDGET_KEY = "issues_by_priority"; @@ -68,7 +66,7 @@ export const IssuesByPriorityWidget: React.FC = observer((props) => })); return ( -
+
= observer((props) => />
{totalCount > 0 ? ( -
-
+
+
{ @@ -101,7 +99,7 @@ export const IssuesByPriorityWidget: React.FC = observer((props) =>
) : ( -
+
)} diff --git a/web/components/dashboard/widgets/issues-by-state-group.tsx b/web/components/dashboard/widgets/issues-by-state-group.tsx index b301d30f3..6ffeda0c4 100644 --- a/web/components/dashboard/widgets/issues-by-state-group.tsx +++ b/web/components/dashboard/widgets/issues-by-state-group.tsx @@ -1,19 +1,21 @@ import { useEffect, useState } from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; // hooks -import { useDashboard } from "hooks/store"; -// components -import { PieGraph } from "components/ui"; import { DurationFilterDropdown, IssuesByStateGroupEmptyState, WidgetLoader, WidgetProps, } from "components/dashboard/widgets"; -// helpers +import { PieGraph } from "components/ui"; +import { STATE_GROUP_GRAPH_COLORS, STATE_GROUP_GRAPH_GRADIENTS } from "constants/dashboard"; +import { STATE_GROUPS } from "constants/state"; import { getCustomDates } from "helpers/dashboard.helper"; +import { useDashboard } from "hooks/store"; +// components +// helpers // types import { EDurationFilters, @@ -22,8 +24,6 @@ import { TStateGroups, } from "@plane/types"; // constants -import { STATE_GROUP_GRAPH_COLORS, STATE_GROUP_GRAPH_GRADIENTS } from "constants/dashboard"; -import { STATE_GROUPS } from "constants/state"; const WIDGET_KEY = "issues_by_state_groups"; @@ -84,14 +84,14 @@ export const IssuesByStateGroupWidget: React.FC = observer((props) startedCount > 0 ? "started" : unStartedCount > 0 - ? "unstarted" - : backlogCount > 0 - ? "backlog" - : completedCount > 0 - ? "completed" - : canceledCount > 0 - ? "cancelled" - : null; + ? "unstarted" + : backlogCount > 0 + ? "backlog" + : completedCount > 0 + ? "completed" + : canceledCount > 0 + ? "cancelled" + : null; setActiveStateGroup(stateGroup); setDefaultStateGroup(stateGroup); diff --git a/web/components/dashboard/widgets/loaders/loader.tsx b/web/components/dashboard/widgets/loaders/loader.tsx index 141bb5533..ae4038b38 100644 --- a/web/components/dashboard/widgets/loaders/loader.tsx +++ b/web/components/dashboard/widgets/loaders/loader.tsx @@ -1,13 +1,13 @@ // components +import { TWidgetKeys } from "@plane/types"; import { AssignedIssuesWidgetLoader } from "./assigned-issues"; import { IssuesByPriorityWidgetLoader } from "./issues-by-priority"; import { IssuesByStateGroupWidgetLoader } from "./issues-by-state-group"; import { OverviewStatsWidgetLoader } from "./overview-stats"; import { RecentActivityWidgetLoader } from "./recent-activity"; -import { RecentProjectsWidgetLoader } from "./recent-projects"; import { RecentCollaboratorsWidgetLoader } from "./recent-collaborators"; +import { RecentProjectsWidgetLoader } from "./recent-projects"; // types -import { TWidgetKeys } from "@plane/types"; type Props = { widgetKey: TWidgetKeys; diff --git a/web/components/dashboard/widgets/overview-stats.tsx b/web/components/dashboard/widgets/overview-stats.tsx index 5a105cc15..bfea5bf40 100644 --- a/web/components/dashboard/widgets/overview-stats.tsx +++ b/web/components/dashboard/widgets/overview-stats.tsx @@ -2,14 +2,14 @@ import { useEffect } from "react"; import { observer } from "mobx-react-lite"; import Link from "next/link"; // hooks +import { WidgetLoader } from "components/dashboard/widgets"; +import { cn } from "helpers/common.helper"; +import { renderFormattedPayloadDate } from "helpers/date-time.helper"; import { useDashboard } from "hooks/store"; // components -import { WidgetLoader } from "components/dashboard/widgets"; // helpers -import { renderFormattedPayloadDate } from "helpers/date-time.helper"; // types import { TOverviewStatsWidgetResponse } from "@plane/types"; -import { cn } from "helpers/common.helper"; export type WidgetProps = { dashboardId: string; @@ -74,6 +74,7 @@ export const OverviewStatsWidget: React.FC = observer((props) => { > {STATS_LIST.map((stat, index) => (
= observer((props) => { if (!widgetStats) return ; return ( -
- +
+ Your issue activities {widgetStats.length > 0 ? ( -
+
{widgetStats.map((activity) => (
@@ -49,7 +49,7 @@ export const RecentActivityWidget: React.FC = observer((props) => { activity.new_value === "restore" ? ( ) : ( -
+
) @@ -89,14 +89,14 @@ export const RecentActivityWidget: React.FC = observer((props) => { href={redirectionLink} className={cn( getButtonStyling("link-primary", "sm"), - "w-min mx-auto py-1 px-2 text-xs hover:bg-custom-primary-100/20" + "mx-auto w-min px-2 py-1 text-xs hover:bg-custom-primary-100/20" )} > View all
) : ( -
+
)} diff --git a/web/components/dashboard/widgets/recent-collaborators.tsx b/web/components/dashboard/widgets/recent-collaborators.tsx new file mode 100644 index 000000000..438f87c45 --- /dev/null +++ b/web/components/dashboard/widgets/recent-collaborators.tsx @@ -0,0 +1,94 @@ +import { useEffect } from "react"; +import { observer } from "mobx-react-lite"; +import Link from "next/link"; +// hooks +import { Avatar } from "@plane/ui"; +import { RecentCollaboratorsEmptyState, WidgetLoader, WidgetProps } from "components/dashboard/widgets"; +import { useDashboard, useMember, useUser } from "hooks/store"; +// components +// ui +// types +import { TRecentCollaboratorsWidgetResponse } from "@plane/types"; + +type CollaboratorListItemProps = { + issueCount: number; + userId: string; + workspaceSlug: string; +}; + +const WIDGET_KEY = "recent_collaborators"; + +const CollaboratorListItem: React.FC = observer((props) => { + const { issueCount, userId, workspaceSlug } = props; + // store hooks + const { currentUser } = useUser(); + const { getUserDetails } = useMember(); + // derived values + const userDetails = getUserDetails(userId); + const isCurrentUser = userId === currentUser?.id; + + if (!userDetails) return null; + + return ( + +
+ +
+
+ {isCurrentUser ? "You" : userDetails?.display_name} +
+

+ {issueCount} active issue{issueCount > 1 ? "s" : ""} +

+ + ); +}); + +export const RecentCollaboratorsWidget: React.FC = observer((props) => { + const { dashboardId, workspaceSlug } = props; + // store hooks + const { fetchWidgetStats, getWidgetStats } = useDashboard(); + const widgetStats = getWidgetStats(workspaceSlug, dashboardId, WIDGET_KEY); + + useEffect(() => { + fetchWidgetStats(workspaceSlug, dashboardId, { + widget_key: WIDGET_KEY, + }); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + if (!widgetStats) return ; + + return ( +
+
+

Most active members

+

+ Top eight active members in your project by last activity +

+
+ {widgetStats.length > 1 ? ( +
+ {widgetStats.map((user) => ( + + ))} +
+ ) : ( +
+ +
+ )} +
+ ); +}); diff --git a/web/components/dashboard/widgets/recent-collaborators/collaborators-list.tsx b/web/components/dashboard/widgets/recent-collaborators/collaborators-list.tsx index 48c448075..cfe7dd5ca 100644 --- a/web/components/dashboard/widgets/recent-collaborators/collaborators-list.tsx +++ b/web/components/dashboard/widgets/recent-collaborators/collaborators-list.tsx @@ -1,15 +1,15 @@ import { useEffect } from "react"; -import Link from "next/link"; import { observer } from "mobx-react"; +import Link from "next/link"; import useSWR from "swr"; // store hooks +import { Avatar } from "@plane/ui"; import { useDashboard, useMember, useUser } from "hooks/store"; // components +import { TRecentCollaboratorsWidgetResponse } from "@plane/types"; import { WidgetLoader } from "../loaders"; // ui -import { Avatar } from "@plane/ui"; // types -import { TRecentCollaboratorsWidgetResponse } from "@plane/types"; type CollaboratorListItemProps = { issueCount: number; diff --git a/web/components/dashboard/widgets/recent-collaborators/default-list.tsx b/web/components/dashboard/widgets/recent-collaborators/default-list.tsx index d3f857824..a27534bbf 100644 --- a/web/components/dashboard/widgets/recent-collaborators/default-list.tsx +++ b/web/components/dashboard/widgets/recent-collaborators/default-list.tsx @@ -1,8 +1,8 @@ import { useState } from "react"; // components +import { Button } from "@plane/ui"; import { CollaboratorsList } from "./collaborators-list"; // ui -import { Button } from "@plane/ui"; type Props = { dashboardId: string; diff --git a/web/components/dashboard/widgets/recent-collaborators/root.tsx b/web/components/dashboard/widgets/recent-collaborators/root.tsx index 5f611b462..d65b15db7 100644 --- a/web/components/dashboard/widgets/recent-collaborators/root.tsx +++ b/web/components/dashboard/widgets/recent-collaborators/root.tsx @@ -1,11 +1,10 @@ import { useState } from "react"; import { Search } from "lucide-react"; +// types +import { WidgetProps } from "components/dashboard/widgets"; // components import { DefaultCollaboratorsList } from "./default-list"; import { SearchedCollaboratorsList } from "./search-list"; -8; -// types -import { WidgetProps } from "components/dashboard/widgets"; const PER_PAGE = 8; @@ -15,15 +14,15 @@ export const RecentCollaboratorsWidget: React.FC = (props) => { const [searchQuery, setSearchQuery] = useState(""); return ( -
-
+
+

Most active members

Top eight active members in your project by last activity

-
+
= (props) => { const ButtonToRender: React.FC = BORDER_BUTTON_VARIANTS.includes(variant) ? BorderButton : BACKGROUND_BUTTON_VARIANTS.includes(variant) - ? BackgroundButton - : TransparentButton; + ? BackgroundButton + : TransparentButton; return ( { +export const CycleOptions: FC = observer((props) => { const { projectId, isOpen, referenceElement, placement } = props; //state hooks diff --git a/web/components/dropdowns/cycle/index.tsx b/web/components/dropdowns/cycle/index.tsx index 2c05d9ddf..8c08cd67d 100644 --- a/web/components/dropdowns/cycle/index.tsx +++ b/web/components/dropdowns/cycle/index.tsx @@ -3,19 +3,19 @@ import { observer } from "mobx-react-lite"; import { Combobox } from "@headlessui/react"; import { ChevronDown } from "lucide-react"; // hooks +import { ContrastIcon } from "@plane/ui"; +import { cn } from "helpers/common.helper"; import { useCycle } from "hooks/store"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components import { DropdownButton } from "../buttons"; // icons -import { ContrastIcon } from "@plane/ui"; // helpers -import { cn } from "helpers/common.helper"; // types +import { BUTTON_VARIANTS_WITH_TEXT } from "../constants"; import { TDropdownProps } from "../types"; // constants -import { BUTTON_VARIANTS_WITH_TEXT } from "../constants"; import { CycleOptions } from "./cycle-options"; type Props = TDropdownProps & { diff --git a/web/components/dropdowns/date-range.tsx b/web/components/dropdowns/date-range.tsx index d3ef691b9..421ab41e6 100644 --- a/web/components/dropdowns/date-range.tsx +++ b/web/components/dropdowns/date-range.tsx @@ -1,19 +1,19 @@ import React, { useEffect, useRef, useState } from "react"; -import { Combobox } from "@headlessui/react"; -import { usePopper } from "react-popper"; import { Placement } from "@popperjs/core"; import { DateRange, DayPicker, Matcher } from "react-day-picker"; +import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; import { ArrowRight, CalendarDays } from "lucide-react"; // hooks -import useOutsideClickDetector from "hooks/use-outside-click-detector"; -import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; // components -import { DropdownButton } from "./buttons"; // ui import { Button } from "@plane/ui"; // helpers import { cn } from "helpers/common.helper"; import { renderFormattedDate } from "helpers/date-time.helper"; +import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; +import useOutsideClickDetector from "hooks/use-outside-click-detector"; +import { DropdownButton } from "./buttons"; // types import { TButtonVariants } from "./types"; diff --git a/web/components/dropdowns/date.tsx b/web/components/dropdowns/date.tsx index 570ea45da..049bf2250 100644 --- a/web/components/dropdowns/date.tsx +++ b/web/components/dropdowns/date.tsx @@ -1,20 +1,20 @@ import React, { useRef, useState } from "react"; -import { Combobox } from "@headlessui/react"; import { DayPicker, Matcher } from "react-day-picker"; import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; import { CalendarDays, X } from "lucide-react"; // hooks +import { cn } from "helpers/common.helper"; +import { renderFormattedDate } from "helpers/date-time.helper"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components import { DropdownButton } from "./buttons"; // helpers -import { renderFormattedDate } from "helpers/date-time.helper"; -import { cn } from "helpers/common.helper"; // types +import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; import { TDropdownProps } from "./types"; // constants -import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; type Props = TDropdownProps & { clearIconClassName?: string; diff --git a/web/components/dropdowns/estimate.tsx b/web/components/dropdowns/estimate.tsx index 663ca67ce..bc977d1ce 100644 --- a/web/components/dropdowns/estimate.tsx +++ b/web/components/dropdowns/estimate.tsx @@ -1,21 +1,21 @@ import { Fragment, ReactNode, useEffect, useRef, useState } from "react"; -import { observer } from "mobx-react-lite"; -import { Combobox } from "@headlessui/react"; -import { usePopper } from "react-popper"; -import { Check, ChevronDown, Search, Triangle } from "lucide-react"; import sortBy from "lodash/sortBy"; +import { observer } from "mobx-react-lite"; +import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; +import { Check, ChevronDown, Search, Triangle } from "lucide-react"; // hooks +import { cn } from "helpers/common.helper"; import { useApplication, useEstimate } from "hooks/store"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components import { DropdownButton } from "./buttons"; // helpers -import { cn } from "helpers/common.helper"; // types +import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; import { TDropdownProps } from "./types"; // constants -import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; type Props = TDropdownProps & { button?: ReactNode; diff --git a/web/components/dropdowns/member/avatar.tsx b/web/components/dropdowns/member/avatar.tsx index 067d609c5..0f841b9e1 100644 --- a/web/components/dropdowns/member/avatar.tsx +++ b/web/components/dropdowns/member/avatar.tsx @@ -1,8 +1,8 @@ import { observer } from "mobx-react-lite"; // hooks +import { Avatar, AvatarGroup, UserGroupIcon } from "@plane/ui"; import { useMember } from "hooks/store"; // ui -import { Avatar, AvatarGroup, UserGroupIcon } from "@plane/ui"; type AvatarProps = { showTooltip: boolean; diff --git a/web/components/dropdowns/member/index.tsx b/web/components/dropdowns/member/index.tsx index 0513ec627..0e9e36e21 100644 --- a/web/components/dropdowns/member/index.tsx +++ b/web/components/dropdowns/member/index.tsx @@ -3,19 +3,19 @@ import { observer } from "mobx-react-lite"; import { Combobox } from "@headlessui/react"; import { ChevronDown } from "lucide-react"; // hooks +import { cn } from "helpers/common.helper"; import { useMember } from "hooks/store"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components -import { ButtonAvatars } from "./avatar"; import { DropdownButton } from "../buttons"; +import { BUTTON_VARIANTS_WITH_TEXT } from "../constants"; +import { ButtonAvatars } from "./avatar"; // helpers -import { cn } from "helpers/common.helper"; // types +import { MemberOptions } from "./member-options"; import { MemberDropdownProps } from "./types"; // constants -import { BUTTON_VARIANTS_WITH_TEXT } from "../constants"; -import { MemberOptions } from "./member-options"; type Props = { projectId?: string; diff --git a/web/components/dropdowns/member/member-options.tsx b/web/components/dropdowns/member/member-options.tsx index 46a0b9cba..d91c6e0b1 100644 --- a/web/components/dropdowns/member/member-options.tsx +++ b/web/components/dropdowns/member/member-options.tsx @@ -1,16 +1,16 @@ import { useEffect, useRef, useState } from "react"; -import { Combobox } from "@headlessui/react"; +import { Placement } from "@popperjs/core"; import { observer } from "mobx-react"; +import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; //components +import { Check, Search } from "lucide-react"; import { Avatar } from "@plane/ui"; //store import { useApplication, useMember, useUser } from "hooks/store"; //hooks -import { usePopper } from "react-popper"; //icon -import { Check, Search } from "lucide-react"; //types -import { Placement } from "@popperjs/core"; interface Props { projectId?: string; diff --git a/web/components/dropdowns/module/index.tsx b/web/components/dropdowns/module/index.tsx index 5e0a3977f..882604712 100644 --- a/web/components/dropdowns/module/index.tsx +++ b/web/components/dropdowns/module/index.tsx @@ -3,19 +3,19 @@ import { observer } from "mobx-react-lite"; import { Combobox } from "@headlessui/react"; import { ChevronDown, X } from "lucide-react"; // hooks +import { DiceIcon, Tooltip } from "@plane/ui"; +import { cn } from "helpers/common.helper"; import { useModule } from "hooks/store"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components import { DropdownButton } from "../buttons"; // icons -import { DiceIcon, Tooltip } from "@plane/ui"; // helpers -import { cn } from "helpers/common.helper"; // types +import { BUTTON_VARIANTS_WITHOUT_TEXT } from "../constants"; import { TDropdownProps } from "../types"; // constants -import { BUTTON_VARIANTS_WITHOUT_TEXT } from "../constants"; import { ModuleOptions } from "./module-options"; type Props = TDropdownProps & { @@ -71,7 +71,7 @@ const ButtonContent: React.FC = (props) => { {showCount ? (
{!hideIcon && } -
+
{value.length > 0 ? value.length === 1 ? `${getModuleById(value[0])?.name || "module"}` @@ -80,18 +80,18 @@ const ButtonContent: React.FC = (props) => {
) : value.length > 0 ? ( -
+
{value.map((moduleId) => { const moduleDetails = getModuleById(moduleId); return (
{!hideIcon && } {!hideText && ( - {moduleDetails?.name} + {moduleDetails?.name} )} {!disabled && ( @@ -266,8 +266,7 @@ export const ModuleDropdown: React.FC = observer((props) => { placeholder={placeholder} showCount={showCount} value={value} - // @ts-ignore - onChange={onChange} + onChange={onChange as any} /> diff --git a/web/components/dropdowns/module/module-options.tsx b/web/components/dropdowns/module/module-options.tsx index e7d205b12..8f6a66468 100644 --- a/web/components/dropdowns/module/module-options.tsx +++ b/web/components/dropdowns/module/module-options.tsx @@ -1,17 +1,17 @@ import { useEffect, useRef, useState } from "react"; -import { Combobox } from "@headlessui/react"; +import { Placement } from "@popperjs/core"; import { observer } from "mobx-react"; +import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; //components +import { Check, Search } from "lucide-react"; import { DiceIcon } from "@plane/ui"; //store +import { cn } from "helpers/common.helper"; import { useApplication, useModule } from "hooks/store"; //hooks -import { usePopper } from "react-popper"; -import { cn } from "helpers/common.helper"; //icon -import { Check, Search } from "lucide-react"; //types -import { Placement } from "@popperjs/core"; type DropdownOptions = | { diff --git a/web/components/dropdowns/priority.tsx b/web/components/dropdowns/priority.tsx index e0677c843..2409971f3 100644 --- a/web/components/dropdowns/priority.tsx +++ b/web/components/dropdowns/priority.tsx @@ -1,21 +1,21 @@ import { Fragment, ReactNode, useEffect, useRef, useState } from "react"; -import { Combobox } from "@headlessui/react"; -import { usePopper } from "react-popper"; -import { Check, ChevronDown, Search } from "lucide-react"; import { useTheme } from "next-themes"; +import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; +import { Check, ChevronDown, Search } from "lucide-react"; // hooks +import { PriorityIcon, Tooltip } from "@plane/ui"; +import { ISSUE_PRIORITIES } from "constants/issue"; +import { cn } from "helpers/common.helper"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // icons -import { PriorityIcon, Tooltip } from "@plane/ui"; // helpers -import { cn } from "helpers/common.helper"; // types import { TIssuePriorities } from "@plane/types"; +import { BACKGROUND_BUTTON_VARIANTS, BORDER_BUTTON_VARIANTS, BUTTON_VARIANTS_WITHOUT_TEXT } from "./constants"; import { TDropdownProps } from "./types"; // constants -import { ISSUE_PRIORITIES } from "constants/issue"; -import { BACKGROUND_BUTTON_VARIANTS, BORDER_BUTTON_VARIANTS, BUTTON_VARIANTS_WITHOUT_TEXT } from "./constants"; type Props = TDropdownProps & { button?: ReactNode; @@ -342,8 +342,8 @@ export const PriorityDropdown: React.FC = (props) => { const ButtonToRender = BORDER_BUTTON_VARIANTS.includes(buttonVariant) ? BorderButton : BACKGROUND_BUTTON_VARIANTS.includes(buttonVariant) - ? BackgroundButton - : TransparentButton; + ? BackgroundButton + : TransparentButton; useEffect(() => { if (isOpen && inputRef.current) { diff --git a/web/components/dropdowns/project.tsx b/web/components/dropdowns/project.tsx index f6fb9205e..05b455e5e 100644 --- a/web/components/dropdowns/project.tsx +++ b/web/components/dropdowns/project.tsx @@ -1,21 +1,21 @@ import { Fragment, ReactNode, useEffect, useRef, useState } from "react"; import { observer } from "mobx-react-lite"; -import { Combobox } from "@headlessui/react"; import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; import { Check, ChevronDown, Search } from "lucide-react"; // hooks +import { cn } from "helpers/common.helper"; +import { renderEmoji } from "helpers/emoji.helper"; import { useProject } from "hooks/store"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components import { DropdownButton } from "./buttons"; // helpers -import { cn } from "helpers/common.helper"; -import { renderEmoji } from "helpers/emoji.helper"; // types +import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; import { TDropdownProps } from "./types"; // constants -import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; type Props = TDropdownProps & { button?: ReactNode; @@ -81,8 +81,8 @@ export const ProjectDropdown: React.FC = observer((props) => { {projectDetails?.emoji ? renderEmoji(projectDetails?.emoji) : projectDetails?.icon_prop - ? renderEmoji(projectDetails?.icon_prop) - : null} + ? renderEmoji(projectDetails?.icon_prop) + : null} {projectDetails?.name}
@@ -174,8 +174,8 @@ export const ProjectDropdown: React.FC = observer((props) => { {selectedProject?.emoji ? renderEmoji(selectedProject?.emoji) : selectedProject?.icon_prop - ? renderEmoji(selectedProject?.icon_prop) - : null} + ? renderEmoji(selectedProject?.icon_prop) + : null} )} {BUTTON_VARIANTS_WITH_TEXT.includes(buttonVariant) && ( diff --git a/web/components/dropdowns/state.tsx b/web/components/dropdowns/state.tsx index 9fa2f38c8..f34ef576c 100644 --- a/web/components/dropdowns/state.tsx +++ b/web/components/dropdowns/state.tsx @@ -1,22 +1,22 @@ import { Fragment, ReactNode, useEffect, useRef, useState } from "react"; import { observer } from "mobx-react-lite"; -import { Combobox } from "@headlessui/react"; import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; import { Check, ChevronDown, Search } from "lucide-react"; // hooks +import { StateGroupIcon } from "@plane/ui"; +import { cn } from "helpers/common.helper"; import { useApplication, useProjectState } from "hooks/store"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components import { DropdownButton } from "./buttons"; // icons -import { StateGroupIcon } from "@plane/ui"; // helpers -import { cn } from "helpers/common.helper"; // types +import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; import { TDropdownProps } from "./types"; // constants -import { BUTTON_VARIANTS_WITH_TEXT } from "./constants"; type Props = TDropdownProps & { button?: ReactNode; diff --git a/web/components/emoji-icon-picker/index.tsx b/web/components/emoji-icon-picker/index.tsx index 9c45e5356..b9211a718 100644 --- a/web/components/emoji-icon-picker/index.tsx +++ b/web/components/emoji-icon-picker/index.tsx @@ -1,19 +1,19 @@ import React, { useEffect, useState, useRef } from "react"; // headless ui +import { TwitterPicker } from "react-color"; import { Tab, Transition, Popover } from "@headlessui/react"; // react colors -import { TwitterPicker } from "react-color"; // hooks +import { getRandomEmoji, renderEmoji } from "helpers/emoji.helper"; import useDynamicDropdownPosition from "hooks/use-dynamic-dropdown"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // types -import { Props } from "./types"; // emojis import emojis from "./emojis.json"; +import { getRecentEmojis, saveRecentEmoji } from "./helpers"; import icons from "./icons.json"; // helpers -import { getRecentEmojis, saveRecentEmoji } from "./helpers"; -import { getRandomEmoji, renderEmoji } from "helpers/emoji.helper"; +import { Props } from "./types"; const tabOptions = [ { diff --git a/web/components/empty-state/comic-box-button.tsx b/web/components/empty-state/comic-box-button.tsx index 607d74a91..0bf546a2f 100644 --- a/web/components/empty-state/comic-box-button.tsx +++ b/web/components/empty-state/comic-box-button.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; +import { usePopper } from "react-popper"; import { Popover } from "@headlessui/react"; // popper -import { usePopper } from "react-popper"; // helper import { getButtonStyling } from "@plane/ui"; diff --git a/web/components/empty-state/empty-state.tsx b/web/components/empty-state/empty-state.tsx index 4a5aeca02..9d77a81d0 100644 --- a/web/components/empty-state/empty-state.tsx +++ b/web/components/empty-state/empty-state.tsx @@ -1,11 +1,11 @@ import React from "react"; import Image from "next/image"; // components -import { ComicBoxButton } from "./comic-box-button"; // ui import { Button, getButtonStyling } from "@plane/ui"; // helper import { cn } from "helpers/common.helper"; +import { ComicBoxButton } from "./comic-box-button"; type Props = { title: string; diff --git a/web/components/estimates/create-update-estimate-modal.tsx b/web/components/estimates/create-update-estimate-modal.tsx index 1ca39c84a..3be83e319 100644 --- a/web/components/estimates/create-update-estimate-modal.tsx +++ b/web/components/estimates/create-update-estimate-modal.tsx @@ -1,14 +1,14 @@ import React, { useEffect } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; import { Dialog, Transition } from "@headlessui/react"; -import { observer } from "mobx-react-lite"; // store hooks +import { Button, Input, TextArea, TOAST_TYPE, setToast } from "@plane/ui"; +import { checkDuplicates } from "helpers/array.helper"; import { useEstimate } from "hooks/store"; // ui -import { Button, Input, TextArea, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { checkDuplicates } from "helpers/array.helper"; // types import { IEstimate, IEstimateFormData } from "@plane/types"; @@ -269,7 +269,7 @@ export const CreateUpdateEstimateModal: React.FC = observer((props) => { {Array(6) .fill(0) .map((_, i) => ( -
+
{i + 1} diff --git a/web/components/estimates/delete-estimate-modal.tsx b/web/components/estimates/delete-estimate-modal.tsx index ac51d2312..f8bc2a65b 100644 --- a/web/components/estimates/delete-estimate-modal.tsx +++ b/web/components/estimates/delete-estimate-modal.tsx @@ -1,14 +1,14 @@ import React, { useEffect, useState } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; -import { observer } from "mobx-react-lite"; import { AlertTriangle } from "lucide-react"; // store hooks +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; import { useEstimate } from "hooks/store"; // types import { IEstimate } from "@plane/types"; // ui -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; type Props = { isOpen: boolean; @@ -29,6 +29,7 @@ export const DeleteEstimateModal: React.FC = observer((props) => { const handleEstimateDelete = () => { if (!workspaceSlug || !projectId) return; + // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain const estimateId = data?.id!; deleteEstimate(workspaceSlug.toString(), projectId.toString(), estimateId) diff --git a/web/components/estimates/estimate-list-item.tsx b/web/components/estimates/estimate-list-item.tsx index 37932a0ac..c63c4b208 100644 --- a/web/components/estimates/estimate-list-item.tsx +++ b/web/components/estimates/estimate-list-item.tsx @@ -1,14 +1,14 @@ import React from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { Pencil, Trash2 } from "lucide-react"; +import { Button, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; +import { orderArrayBy } from "helpers/array.helper"; import { useProject } from "hooks/store"; // ui -import { Button, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; //icons -import { Pencil, Trash2 } from "lucide-react"; // helpers -import { orderArrayBy } from "helpers/array.helper"; // types import { IEstimate } from "@plane/types"; diff --git a/web/components/estimates/estimates-list.tsx b/web/components/estimates/estimates-list.tsx index 711f713a6..8e447d6ac 100644 --- a/web/components/estimates/estimates-list.tsx +++ b/web/components/estimates/estimates-list.tsx @@ -1,20 +1,20 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; // store hooks +import { Button, Loader, TOAST_TYPE, setToast } from "@plane/ui"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { CreateUpdateEstimateModal, DeleteEstimateModal, EstimateListItem } from "components/estimates"; +import { PROJECT_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { orderArrayBy } from "helpers/array.helper"; import { useEstimate, useProject, useUser } from "hooks/store"; // components -import { CreateUpdateEstimateModal, DeleteEstimateModal, EstimateListItem } from "components/estimates"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Button, Loader, TOAST_TYPE, setToast } from "@plane/ui"; // types import { IEstimate } from "@plane/types"; // helpers -import { orderArrayBy } from "helpers/array.helper"; // constants -import { PROJECT_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; export const EstimatesList: React.FC = observer(() => { // states diff --git a/web/components/exporter/export-modal.tsx b/web/components/exporter/export-modal.tsx index f38550b3a..16f8d4640 100644 --- a/web/components/exporter/export-modal.tsx +++ b/web/components/exporter/export-modal.tsx @@ -1,13 +1,14 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; // hooks +import { Button, CustomSearchSelect, TOAST_TYPE, setToast } from "@plane/ui"; + import { useProject } from "hooks/store"; // services import { ProjectExportService } from "services/project"; // ui -import { Button, CustomSearchSelect, TOAST_TYPE, setToast } from "@plane/ui"; // types import { IUser, IImporterService } from "@plane/types"; diff --git a/web/components/exporter/guide.tsx b/web/components/exporter/guide.tsx index ed6a39220..381b168bd 100644 --- a/web/components/exporter/guide.tsx +++ b/web/components/exporter/guide.tsx @@ -1,30 +1,29 @@ import { useState } from "react"; -import Link from "next/link"; +import { observer } from "mobx-react-lite"; import Image from "next/image"; +import Link from "next/link"; import { useRouter } from "next/router"; import { useTheme } from "next-themes"; import useSWR, { mutate } from "swr"; -import { observer } from "mobx-react-lite"; // hooks +import { MoveLeft, MoveRight, RefreshCw } from "lucide-react"; +import { Button } from "@plane/ui"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { Exporter, SingleExport } from "components/exporter"; +import { ImportExportSettingsLoader } from "components/ui"; +import { WORKSPACE_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EXPORT_SERVICES_LIST } from "constants/fetch-keys"; +import { EXPORTERS_LIST } from "constants/workspace"; import { useUser } from "hooks/store"; import useUserAuth from "hooks/use-user-auth"; // services import { IntegrationService } from "services/integrations"; // components -import { Exporter, SingleExport } from "components/exporter"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Button } from "@plane/ui"; -import { ImportExportSettingsLoader } from "components/ui"; // icons -import { MoveLeft, MoveRight, RefreshCw } from "lucide-react"; // fetch-keys -import { EXPORT_SERVICES_LIST } from "constants/fetch-keys"; // constants -import { EXPORTERS_LIST } from "constants/workspace"; - -import { WORKSPACE_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; // services const integrationService = new IntegrationService(); diff --git a/web/components/exporter/single-export.tsx b/web/components/exporter/single-export.tsx index 34e41fc35..4fdcb4a15 100644 --- a/web/components/exporter/single-export.tsx +++ b/web/components/exporter/single-export.tsx @@ -38,12 +38,12 @@ export const SingleExport: FC = ({ service, refreshing }) => { service.status === "completed" ? "bg-green-500/20 text-green-500" : service.status === "processing" - ? "bg-yellow-500/20 text-yellow-500" - : service.status === "failed" - ? "bg-red-500/20 text-red-500" - : service.status === "expired" - ? "bg-orange-500/20 text-orange-500" - : "" + ? "bg-yellow-500/20 text-yellow-500" + : service.status === "failed" + ? "bg-red-500/20 text-red-500" + : service.status === "expired" + ? "bg-orange-500/20 text-orange-500" + : "" }`} > {refreshing ? "Refreshing..." : service.status} diff --git a/web/components/gantt-chart/blocks/block.tsx b/web/components/gantt-chart/blocks/block.tsx index 1e0882aee..3305c9846 100644 --- a/web/components/gantt-chart/blocks/block.tsx +++ b/web/components/gantt-chart/blocks/block.tsx @@ -1,16 +1,16 @@ import { observer } from "mobx-react"; // hooks -import { useGanttChart } from "../hooks"; -import { useIssueDetail } from "hooks/store"; // components -import { ChartAddBlock, ChartDraggable } from "../helpers"; // helpers import { cn } from "helpers/common.helper"; import { renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { useIssueDetail } from "hooks/store"; // types -import { IBlockUpdateData, IGanttBlock } from "../types"; // constants import { BLOCK_HEIGHT } from "../constants"; +import { ChartAddBlock, ChartDraggable } from "../helpers"; +import { useGanttChart } from "../hooks"; +import { IBlockUpdateData, IGanttBlock } from "../types"; type Props = { block: IGanttBlock; diff --git a/web/components/gantt-chart/blocks/blocks-list.tsx b/web/components/gantt-chart/blocks/blocks-list.tsx index d98524ecc..8eb1d8772 100644 --- a/web/components/gantt-chart/blocks/blocks-list.tsx +++ b/web/components/gantt-chart/blocks/blocks-list.tsx @@ -1,10 +1,10 @@ import { FC } from "react"; // components +import { HEADER_HEIGHT } from "../constants"; +import { IBlockUpdateData, IGanttBlock } from "../types"; import { GanttChartBlock } from "./block"; // types -import { IBlockUpdateData, IGanttBlock } from "../types"; // constants -import { HEADER_HEIGHT } from "../constants"; export type GanttChartBlocksProps = { itemsContainerWidth: number; @@ -47,6 +47,7 @@ export const GanttChartBlocksList: FC = (props) => { return ( = observer(() => { // chart hook diff --git a/web/components/gantt-chart/contexts/index.tsx b/web/components/gantt-chart/contexts/index.tsx index 1d8a19f1a..752645f66 100644 --- a/web/components/gantt-chart/contexts/index.tsx +++ b/web/components/gantt-chart/contexts/index.tsx @@ -1,4 +1,4 @@ -import { createContext } from "react"; +import React, { FC, createContext } from "react"; // mobx store import { GanttStore } from "store/issue/issue_gantt_view.store"; @@ -7,13 +7,17 @@ let ganttViewStore = new GanttStore(); export const GanttStoreContext = createContext(ganttViewStore); const initializeStore = () => { - const _ganttStore = ganttViewStore ?? new GanttStore(); - if (typeof window === "undefined") return _ganttStore; - if (!ganttViewStore) ganttViewStore = _ganttStore; - return _ganttStore; + const newGanttViewStore = ganttViewStore ?? new GanttStore(); + if (typeof window === "undefined") return newGanttViewStore; + if (!ganttViewStore) ganttViewStore = newGanttViewStore; + return newGanttViewStore; }; -export const GanttStoreProvider = ({ children }: any) => { +type GanttStoreProviderProps = { + children: React.ReactNode; +}; + +export const GanttStoreProvider: FC = ({ children }) => { const store = initializeStore(); return {children}; }; diff --git a/web/components/gantt-chart/helpers/add-block.tsx b/web/components/gantt-chart/helpers/add-block.tsx index b7497013f..d12c9f20e 100644 --- a/web/components/gantt-chart/helpers/add-block.tsx +++ b/web/components/gantt-chart/helpers/add-block.tsx @@ -1,14 +1,14 @@ import { useEffect, useRef, useState } from "react"; import { addDays } from "date-fns"; +import { observer } from "mobx-react"; import { Plus } from "lucide-react"; // ui import { Tooltip } from "@plane/ui"; // helpers import { renderFormattedDate, renderFormattedPayloadDate } from "helpers/date-time.helper"; // types -import { IBlockUpdateData, IGanttBlock } from "../types"; import { useGanttChart } from "../hooks/use-gantt-chart"; -import { observer } from "mobx-react"; +import { IBlockUpdateData, IGanttBlock } from "../types"; type Props = { block: IGanttBlock; diff --git a/web/components/gantt-chart/helpers/draggable.tsx b/web/components/gantt-chart/helpers/draggable.tsx index c2b4dc619..54590c372 100644 --- a/web/components/gantt-chart/helpers/draggable.tsx +++ b/web/components/gantt-chart/helpers/draggable.tsx @@ -1,4 +1,5 @@ import React, { useEffect, useRef, useState } from "react"; +import { observer } from "mobx-react"; import { ArrowRight } from "lucide-react"; // hooks import { IGanttBlock } from "components/gantt-chart"; @@ -7,7 +8,6 @@ import { cn } from "helpers/common.helper"; // constants import { SIDEBAR_WIDTH } from "../constants"; import { useGanttChart } from "../hooks/use-gantt-chart"; -import { observer } from "mobx-react"; type Props = { block: IGanttBlock; diff --git a/web/components/gantt-chart/sidebar/cycles/block.tsx b/web/components/gantt-chart/sidebar/cycles/block.tsx index f1374c753..6e780c479 100644 --- a/web/components/gantt-chart/sidebar/cycles/block.tsx +++ b/web/components/gantt-chart/sidebar/cycles/block.tsx @@ -2,16 +2,16 @@ import { DraggableProvided, DraggableStateSnapshot } from "@hello-pangea/dnd"; import { observer } from "mobx-react"; import { MoreVertical } from "lucide-react"; // hooks +import { CycleGanttSidebarBlock } from "components/cycles"; +import { BLOCK_HEIGHT } from "components/gantt-chart/constants"; import { useGanttChart } from "components/gantt-chart/hooks"; // components -import { CycleGanttSidebarBlock } from "components/cycles"; // helpers +import { IGanttBlock } from "components/gantt-chart/types"; import { cn } from "helpers/common.helper"; import { findTotalDaysInRange } from "helpers/date-time.helper"; // types -import { IGanttBlock } from "components/gantt-chart/types"; // constants -import { BLOCK_HEIGHT } from "components/gantt-chart/constants"; type Props = { block: IGanttBlock; diff --git a/web/components/gantt-chart/sidebar/cycles/sidebar.tsx b/web/components/gantt-chart/sidebar/cycles/sidebar.tsx index 11f67a099..e47b2304e 100644 --- a/web/components/gantt-chart/sidebar/cycles/sidebar.tsx +++ b/web/components/gantt-chart/sidebar/cycles/sidebar.tsx @@ -2,9 +2,9 @@ import { DragDropContext, Draggable, DropResult, Droppable } from "@hello-pangea // ui import { Loader } from "@plane/ui"; // components +import { IBlockUpdateData, IGanttBlock } from "components/gantt-chart/types"; import { CyclesSidebarBlock } from "./block"; // types -import { IBlockUpdateData, IGanttBlock } from "components/gantt-chart/types"; type Props = { title: string; diff --git a/web/components/gantt-chart/sidebar/issues/block.tsx b/web/components/gantt-chart/sidebar/issues/block.tsx index 03a17a65b..92fc32664 100644 --- a/web/components/gantt-chart/sidebar/issues/block.tsx +++ b/web/components/gantt-chart/sidebar/issues/block.tsx @@ -2,17 +2,17 @@ import { DraggableProvided, DraggableStateSnapshot } from "@hello-pangea/dnd"; import { observer } from "mobx-react"; import { MoreVertical } from "lucide-react"; // hooks -import { useIssueDetail } from "hooks/store"; import { useGanttChart } from "components/gantt-chart/hooks"; // components import { IssueGanttSidebarBlock } from "components/issues"; // helpers import { cn } from "helpers/common.helper"; import { findTotalDaysInRange } from "helpers/date-time.helper"; +import { useIssueDetail } from "hooks/store"; // types -import { IGanttBlock } from "../../types"; // constants import { BLOCK_HEIGHT } from "../../constants"; +import { IGanttBlock } from "../../types"; type Props = { block: IGanttBlock; diff --git a/web/components/gantt-chart/sidebar/issues/sidebar.tsx b/web/components/gantt-chart/sidebar/issues/sidebar.tsx index 323938eec..e82e40f5d 100644 --- a/web/components/gantt-chart/sidebar/issues/sidebar.tsx +++ b/web/components/gantt-chart/sidebar/issues/sidebar.tsx @@ -1,10 +1,10 @@ import { DragDropContext, Draggable, Droppable, DropResult } from "@hello-pangea/dnd"; // components -import { IssuesSidebarBlock } from "./block"; // ui import { Loader } from "@plane/ui"; // types import { IGanttBlock, IBlockUpdateData } from "components/gantt-chart/types"; +import { IssuesSidebarBlock } from "./block"; type Props = { blockUpdateHandler: (block: any, payload: IBlockUpdateData) => void; diff --git a/web/components/gantt-chart/sidebar/modules/block.tsx b/web/components/gantt-chart/sidebar/modules/block.tsx index 4b2e47226..41647644f 100644 --- a/web/components/gantt-chart/sidebar/modules/block.tsx +++ b/web/components/gantt-chart/sidebar/modules/block.tsx @@ -2,16 +2,16 @@ import { DraggableProvided, DraggableStateSnapshot } from "@hello-pangea/dnd"; import { observer } from "mobx-react"; import { MoreVertical } from "lucide-react"; // hooks +import { BLOCK_HEIGHT } from "components/gantt-chart/constants"; import { useGanttChart } from "components/gantt-chart/hooks"; // components +import { IGanttBlock } from "components/gantt-chart/types"; import { ModuleGanttSidebarBlock } from "components/modules"; // helpers import { cn } from "helpers/common.helper"; import { findTotalDaysInRange } from "helpers/date-time.helper"; // types -import { IGanttBlock } from "components/gantt-chart/types"; // constants -import { BLOCK_HEIGHT } from "components/gantt-chart/constants"; type Props = { block: IGanttBlock; diff --git a/web/components/gantt-chart/sidebar/modules/sidebar.tsx b/web/components/gantt-chart/sidebar/modules/sidebar.tsx index dee83fa79..a4bcbd5ec 100644 --- a/web/components/gantt-chart/sidebar/modules/sidebar.tsx +++ b/web/components/gantt-chart/sidebar/modules/sidebar.tsx @@ -2,9 +2,9 @@ import { DragDropContext, Draggable, Droppable, DropResult } from "@hello-pangea // ui import { Loader } from "@plane/ui"; // components +import { IBlockUpdateData, IGanttBlock } from "components/gantt-chart"; import { ModulesSidebarBlock } from "./block"; // types -import { IBlockUpdateData, IGanttBlock } from "components/gantt-chart"; type Props = { title: string; diff --git a/web/components/gantt-chart/sidebar/project-views.tsx b/web/components/gantt-chart/sidebar/project-views.tsx index a7e7c5e35..92a677b19 100644 --- a/web/components/gantt-chart/sidebar/project-views.tsx +++ b/web/components/gantt-chart/sidebar/project-views.tsx @@ -2,9 +2,9 @@ import { DragDropContext, Draggable, Droppable, DropResult } from "@hello-pangea // ui import { Loader } from "@plane/ui"; // components +import { IBlockUpdateData, IGanttBlock } from "components/gantt-chart/types"; import { IssuesSidebarBlock } from "./issues/block"; // types -import { IBlockUpdateData, IGanttBlock } from "components/gantt-chart/types"; type Props = { title: string; diff --git a/web/components/gantt-chart/views/bi-week-view.ts b/web/components/gantt-chart/views/bi-week-view.ts index 14c0aad15..6ace4bcc4 100644 --- a/web/components/gantt-chart/views/bi-week-view.ts +++ b/web/components/gantt-chart/views/bi-week-view.ts @@ -1,7 +1,7 @@ // types +import { weeks, months } from "../data"; import { ChartDataType } from "../types"; // data -import { weeks, months } from "../data"; // helpers import { generateDate, getWeekNumberByDate, getNumberOfDaysInMonth, getDatesBetweenTwoDates } from "./helpers"; diff --git a/web/components/gantt-chart/views/day-view.ts b/web/components/gantt-chart/views/day-view.ts index 0801b7bb1..e8da6801c 100644 --- a/web/components/gantt-chart/views/day-view.ts +++ b/web/components/gantt-chart/views/day-view.ts @@ -1,7 +1,7 @@ // types +import { weeks, months } from "../data"; import { ChartDataType } from "../types"; // data -import { weeks, months } from "../data"; export const getWeekNumberByDate = (date: Date) => { const firstDayOfYear = new Date(date.getFullYear(), 0, 1); diff --git a/web/components/gantt-chart/views/helpers.ts b/web/components/gantt-chart/views/helpers.ts index 94b614286..4bd295ce3 100644 --- a/web/components/gantt-chart/views/helpers.ts +++ b/web/components/gantt-chart/views/helpers.ts @@ -56,8 +56,8 @@ export const getAllDatesInWeekByWeekNumber = (weekNumber: number, year: number) const startDate = new Date(firstDayOfYear.getTime()); startDate.setDate(startDate.getDate() + 7 * (weekNumber - 1)); - var datesInWeek = []; - for (var i = 0; i < 7; i++) { + const datesInWeek = []; + for (let i = 0; i < 7; i++) { const currentDate = new Date(startDate.getTime()); currentDate.setDate(currentDate.getDate() + i); datesInWeek.push(currentDate); diff --git a/web/components/gantt-chart/views/hours-view.ts b/web/components/gantt-chart/views/hours-view.ts index 0801b7bb1..e8da6801c 100644 --- a/web/components/gantt-chart/views/hours-view.ts +++ b/web/components/gantt-chart/views/hours-view.ts @@ -1,7 +1,7 @@ // types +import { weeks, months } from "../data"; import { ChartDataType } from "../types"; // data -import { weeks, months } from "../data"; export const getWeekNumberByDate = (date: Date) => { const firstDayOfYear = new Date(date.getFullYear(), 0, 1); diff --git a/web/components/gantt-chart/views/month-view.ts b/web/components/gantt-chart/views/month-view.ts index 13d054da1..1e7e6d878 100644 --- a/web/components/gantt-chart/views/month-view.ts +++ b/web/components/gantt-chart/views/month-view.ts @@ -1,7 +1,7 @@ // types +import { weeks, months } from "../data"; import { ChartDataType, IGanttBlock } from "../types"; // data -import { weeks, months } from "../data"; // helpers import { generateDate, getWeekNumberByDate, getNumberOfDaysInMonth, getDatesBetweenTwoDates } from "./helpers"; @@ -178,7 +178,7 @@ export const getMonthChartItemPositionWidthInMonth = (chartData: ChartDataType, const positionDaysDifference: number = Math.abs(Math.floor(positionTimeDifference / (1000 * 60 * 60 * 24))); scrollPosition = positionDaysDifference * chartData.data.width; - var diffMonths = (itemStartDate.getFullYear() - startDate.getFullYear()) * 12; + let diffMonths = (itemStartDate.getFullYear() - startDate.getFullYear()) * 12; diffMonths -= startDate.getMonth(); diffMonths += itemStartDate.getMonth(); diff --git a/web/components/gantt-chart/views/quater-view.ts b/web/components/gantt-chart/views/quater-view.ts index ed25974a3..9d45a43a1 100644 --- a/web/components/gantt-chart/views/quater-view.ts +++ b/web/components/gantt-chart/views/quater-view.ts @@ -1,7 +1,7 @@ // types +import { weeks, months } from "../data"; import { ChartDataType } from "../types"; // data -import { weeks, months } from "../data"; // helpers import { getDatesBetweenTwoDates, getWeeksByMonthAndYear } from "./helpers"; diff --git a/web/components/gantt-chart/views/week-view.ts b/web/components/gantt-chart/views/week-view.ts index a65eb70b9..bd4ae383d 100644 --- a/web/components/gantt-chart/views/week-view.ts +++ b/web/components/gantt-chart/views/week-view.ts @@ -1,7 +1,7 @@ // types +import { weeks, months } from "../data"; import { ChartDataType } from "../types"; // data -import { weeks, months } from "../data"; // helpers import { generateDate, getWeekNumberByDate, getNumberOfDaysInMonth, getDatesBetweenTwoDates } from "./helpers"; diff --git a/web/components/gantt-chart/views/year-view.ts b/web/components/gantt-chart/views/year-view.ts index 82d397e97..69ff9dae8 100644 --- a/web/components/gantt-chart/views/year-view.ts +++ b/web/components/gantt-chart/views/year-view.ts @@ -1,7 +1,7 @@ // types +import { weeks, months } from "../data"; import { ChartDataType } from "../types"; // data -import { weeks, months } from "../data"; // helpers import { getDatesBetweenTwoDates, getWeeksByMonthAndYear } from "./helpers"; diff --git a/web/components/graphs/issues-by-priority.tsx b/web/components/graphs/issues-by-priority.tsx index 0d4bf37b5..9dfe56891 100644 --- a/web/components/graphs/issues-by-priority.tsx +++ b/web/components/graphs/issues-by-priority.tsx @@ -1,14 +1,14 @@ -import { Theme } from "@nivo/core"; import { ComputedDatum } from "@nivo/bar"; +import { Theme } from "@nivo/core"; // components import { BarGraph } from "components/ui"; // helpers +import { PRIORITY_GRAPH_GRADIENTS } from "constants/dashboard"; +import { ISSUE_PRIORITIES } from "constants/issue"; import { capitalizeFirstLetter } from "helpers/string.helper"; // types import { TIssuePriorities } from "@plane/types"; // constants -import { PRIORITY_GRAPH_GRADIENTS } from "constants/dashboard"; -import { ISSUE_PRIORITIES } from "constants/issue"; type Props = { borderRadius?: number; diff --git a/web/components/headers/cycle-issues.tsx b/web/components/headers/cycle-issues.tsx index 7cdc23133..18d0543c0 100644 --- a/web/components/headers/cycle-issues.tsx +++ b/web/components/headers/cycle-issues.tsx @@ -1,8 +1,20 @@ import { useCallback, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; import Link from "next/link"; +import { useRouter } from "next/router"; // hooks +import { ArrowRight, Plus, PanelRight } from "lucide-react"; +import { Breadcrumbs, Button, ContrastIcon, CustomMenu } from "@plane/ui"; +import { ProjectAnalyticsModal } from "components/analytics"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { CycleMobileHeader } from "components/cycles/cycle-mobile-header"; +import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { cn } from "helpers/common.helper"; +import { renderEmoji } from "helpers/emoji.helper"; +import { truncateText } from "helpers/string.helper"; import { useApplication, useEventTracker, @@ -16,24 +28,12 @@ import { } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; // components -import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; -import { ProjectAnalyticsModal } from "components/analytics"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; // ui -import { Breadcrumbs, Button, ContrastIcon, CustomMenu } from "@plane/ui"; // icons -import { ArrowRight, Plus, PanelRight } from "lucide-react"; // helpers -import { truncateText } from "helpers/string.helper"; -import { renderEmoji } from "helpers/emoji.helper"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; // constants -import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; -import { EUserProjectRoles } from "constants/project"; -import { cn } from "helpers/common.helper"; -import { CycleMobileHeader } from "components/cycles/cycle-mobile-header"; const CycleDropdownOption: React.FC<{ cycleId: string }> = ({ cycleId }) => { // router @@ -209,9 +209,7 @@ export const CycleIssuesHeader: React.FC = observer(() => { className="ml-1.5 flex-shrink-0" placement="bottom-start" > - {currentProjectCycleIds?.map((cycleId) => ( - - ))} + {currentProjectCycleIds?.map((cycleId) => )} } /> diff --git a/web/components/headers/cycles.tsx b/web/components/headers/cycles.tsx index 496fabecd..a0ab19ec7 100644 --- a/web/components/headers/cycles.tsx +++ b/web/components/headers/cycles.tsx @@ -1,20 +1,20 @@ import { FC, useCallback } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { List, Plus } from "lucide-react"; // hooks -import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; // ui import { Breadcrumbs, Button, ContrastIcon, CustomMenu } from "@plane/ui"; // helpers -import { renderEmoji } from "helpers/emoji.helper"; -import { EUserProjectRoles } from "constants/project"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { BreadcrumbLink } from "components/common"; -import { TCycleLayout } from "@plane/types"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { CYCLE_VIEW_LAYOUTS } from "constants/cycle"; +import { EUserProjectRoles } from "constants/project"; +import { renderEmoji } from "helpers/emoji.helper"; +import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; +import { TCycleLayout } from "@plane/types"; export const CyclesHeader: FC = observer(() => { // router @@ -73,7 +73,9 @@ export const CyclesHeader: FC = observer(() => { /> } />} + link={ + } /> + } />
@@ -110,6 +112,7 @@ export const CyclesHeader: FC = observer(() => { > {CYCLE_VIEW_LAYOUTS.map((layout) => ( { // handleLayoutChange(ISSUE_LAYOUTS[index].key); handleCurrentLayout(layout.key as TCycleLayout); diff --git a/web/components/headers/global-issues.tsx b/web/components/headers/global-issues.tsx index 3c40cbbff..effe60fe4 100644 --- a/web/components/headers/global-issues.tsx +++ b/web/components/headers/global-issues.tsx @@ -1,23 +1,23 @@ import { useCallback, useState } from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; // hooks -import { useLabel, useMember, useUser, useIssues } from "hooks/store"; -// components -import { DisplayFiltersSelection, FiltersDropdown, FilterSelection } from "components/issues"; -import { CreateUpdateWorkspaceViewModal } from "components/workspace"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; -// ui -import { Breadcrumbs, Button, LayersIcon, PhotoFilterIcon, Tooltip } from "@plane/ui"; -// icons import { List, PlusIcon, Sheet } from "lucide-react"; +import { Breadcrumbs, Button, LayersIcon, PhotoFilterIcon, Tooltip } from "@plane/ui"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { DisplayFiltersSelection, FiltersDropdown, FilterSelection } from "components/issues"; +// components +import { CreateUpdateWorkspaceViewModal } from "components/workspace"; +// ui +// icons // types -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // constants import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { EUserWorkspaceRoles } from "constants/workspace"; +import { useLabel, useMember, useUser, useIssues } from "hooks/store"; +import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; const GLOBAL_VIEW_LAYOUTS = [ { key: "list", title: "List", link: "/workspace-views", icon: List }, diff --git a/web/components/headers/module-issues.tsx b/web/components/headers/module-issues.tsx index b84504ee2..ca3a84e3b 100644 --- a/web/components/headers/module-issues.tsx +++ b/web/components/headers/module-issues.tsx @@ -1,8 +1,20 @@ import { useCallback, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; import Link from "next/link"; +import { useRouter } from "next/router"; // hooks +import { ArrowRight, PanelRight, Plus } from "lucide-react"; +import { Breadcrumbs, Button, CustomMenu, DiceIcon } from "@plane/ui"; +import { ProjectAnalyticsModal } from "components/analytics"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; +import { ModuleMobileHeader } from "components/modules/module-mobile-header"; +import { EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { cn } from "helpers/common.helper"; +import { renderEmoji } from "helpers/emoji.helper"; +import { truncateText } from "helpers/string.helper"; import { useApplication, useEventTracker, @@ -16,24 +28,12 @@ import { } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; // components -import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; -import { ProjectAnalyticsModal } from "components/analytics"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; // ui -import { Breadcrumbs, Button, CustomMenu, DiceIcon, LayersIcon } from "@plane/ui"; // icons -import { ArrowRight, PanelRight, Plus } from "lucide-react"; // helpers -import { truncateText } from "helpers/string.helper"; -import { renderEmoji } from "helpers/emoji.helper"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; // constants -import { EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; -import { EUserProjectRoles } from "constants/project"; -import { cn } from "helpers/common.helper"; -import { ModuleMobileHeader } from "components/modules/module-mobile-header"; const ModuleDropdownOption: React.FC<{ moduleId: string }> = ({ moduleId }) => { // router @@ -212,9 +212,7 @@ export const ModuleIssuesHeader: React.FC = observer(() => { className="ml-1.5 flex-shrink-0" placement="bottom-start" > - {projectModuleIds?.map((moduleId) => ( - - ))} + {projectModuleIds?.map((moduleId) => )} } /> diff --git a/web/components/headers/modules-list.tsx b/web/components/headers/modules-list.tsx index 9ad34678a..b942b7b13 100644 --- a/web/components/headers/modules-list.tsx +++ b/web/components/headers/modules-list.tsx @@ -1,19 +1,20 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; +// icons import { GanttChartSquare, LayoutGrid, List, Plus } from "lucide-react"; -// hooks -import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; -import useLocalStorage from "hooks/use-local-storage"; // ui import { Breadcrumbs, Button, Tooltip, DiceIcon, CustomMenu } from "@plane/ui"; -// helper -import { renderEmoji } from "helpers/emoji.helper"; +// components +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; // constants import { MODULE_VIEW_LAYOUTS } from "constants/module"; import { EUserProjectRoles } from "constants/project"; -// components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; +// helper +import { renderEmoji } from "helpers/emoji.helper"; +// hooks +import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; +import useLocalStorage from "hooks/use-local-storage"; export const ModulesListHeader: React.FC = observer(() => { // router @@ -71,14 +72,16 @@ export const ModulesListHeader: React.FC = observer(() => { @@ -106,7 +109,13 @@ export const ModulesListHeader: React.FC = observer(() => { // placement="bottom-start" customButton={ - {modulesView === 'gantt_chart' ? : modulesView === 'grid' ? : } + {modulesView === "gantt_chart" ? ( + + ) : modulesView === "grid" ? ( + + ) : ( + + )} Layout } @@ -115,6 +124,7 @@ export const ModulesListHeader: React.FC = observer(() => { > {MODULE_VIEW_LAYOUTS.map((layout) => ( setModulesView(layout.key)} className="flex items-center gap-2" > @@ -127,5 +137,3 @@ export const ModulesListHeader: React.FC = observer(() => {
); }); - - diff --git a/web/components/headers/page-details.tsx b/web/components/headers/page-details.tsx index e2a427db7..0eed72178 100644 --- a/web/components/headers/page-details.tsx +++ b/web/components/headers/page-details.tsx @@ -1,16 +1,16 @@ import { FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { FileText, Plus } from "lucide-react"; // hooks -import { useApplication, usePage, useProject } from "hooks/store"; // ui import { Breadcrumbs, Button } from "@plane/ui"; // helpers +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { renderEmoji } from "helpers/emoji.helper"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; +import { useApplication, usePage, useProject } from "hooks/store"; export interface IPagesHeaderProps { showButton?: boolean; diff --git a/web/components/headers/pages.tsx b/web/components/headers/pages.tsx index 1984971d6..b5ce74fc5 100644 --- a/web/components/headers/pages.tsx +++ b/web/components/headers/pages.tsx @@ -1,17 +1,17 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { FileText, Plus } from "lucide-react"; // hooks -import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; // ui import { Breadcrumbs, Button } from "@plane/ui"; // helpers +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { EUserProjectRoles } from "constants/project"; import { renderEmoji } from "helpers/emoji.helper"; // constants -import { EUserProjectRoles } from "constants/project"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; +import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; export const PagesHeader = observer(() => { // router diff --git a/web/components/headers/profile-settings.tsx b/web/components/headers/profile-settings.tsx index 24c69f093..5c419f05b 100644 --- a/web/components/headers/profile-settings.tsx +++ b/web/components/headers/profile-settings.tsx @@ -1,7 +1,7 @@ import { FC } from "react"; // ui -import { Breadcrumbs } from "@plane/ui"; import { Settings } from "lucide-react"; +import { Breadcrumbs } from "@plane/ui"; import { BreadcrumbLink } from "components/common"; interface IProfileSettingHeader { diff --git a/web/components/headers/project-archived-issue-details.tsx b/web/components/headers/project-archived-issue-details.tsx index 9d4596f83..8752e7396 100644 --- a/web/components/headers/project-archived-issue-details.tsx +++ b/web/components/headers/project-archived-issue-details.tsx @@ -1,22 +1,22 @@ import { FC } from "react"; -import useSWR from "swr"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; +import useSWR from "swr"; // hooks +import { Breadcrumbs, LayersIcon } from "@plane/ui"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { ISSUE_DETAILS } from "constants/fetch-keys"; +import { renderEmoji } from "helpers/emoji.helper"; import { useProject } from "hooks/store"; // ui -import { Breadcrumbs, LayersIcon } from "@plane/ui"; // types +import { IssueArchiveService } from "services/issue"; import { TIssue } from "@plane/types"; // constants -import { ISSUE_DETAILS } from "constants/fetch-keys"; // services -import { IssueArchiveService } from "services/issue"; // helpers -import { renderEmoji } from "helpers/emoji.helper"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; const issueArchiveService = new IssueArchiveService(); diff --git a/web/components/headers/project-archived-issues.tsx b/web/components/headers/project-archived-issues.tsx index d1da1c859..8ade61aae 100644 --- a/web/components/headers/project-archived-issues.tsx +++ b/web/components/headers/project-archived-issues.tsx @@ -1,19 +1,19 @@ import { FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { ArrowLeft } from "lucide-react"; // hooks -import { useIssues, useLabel, useMember, useProject, useProjectState } from "hooks/store"; // constants -import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; // ui import { Breadcrumbs, LayersIcon } from "@plane/ui"; // components -import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "components/issues"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; // helpers import { renderEmoji } from "helpers/emoji.helper"; +import { useIssues, useLabel, useMember, useProject, useProjectState } from "hooks/store"; // types import type { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; diff --git a/web/components/headers/project-draft-issues.tsx b/web/components/headers/project-draft-issues.tsx index 139ec0257..3fd0cb399 100644 --- a/web/components/headers/project-draft-issues.tsx +++ b/web/components/headers/project-draft-issues.tsx @@ -1,17 +1,17 @@ import { FC, useCallback } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks -import { useIssues, useLabel, useMember, useProject, useProjectState } from "hooks/store"; // components -import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; -// ui import { Breadcrumbs, LayersIcon } from "@plane/ui"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; +// ui // helper -import { renderEmoji } from "helpers/emoji.helper"; import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; +import { renderEmoji } from "helpers/emoji.helper"; +import { useIssues, useLabel, useMember, useProject, useProjectState } from "hooks/store"; import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; export const ProjectDraftIssueHeader: FC = observer(() => { diff --git a/web/components/headers/project-inbox.tsx b/web/components/headers/project-inbox.tsx index b5260edd7..b89fbaaac 100644 --- a/web/components/headers/project-inbox.tsx +++ b/web/components/headers/project-inbox.tsx @@ -1,17 +1,17 @@ import { FC, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Plus } from "lucide-react"; // hooks -import { useProject } from "hooks/store"; // ui import { Breadcrumbs, Button, LayersIcon } from "@plane/ui"; // components -import { CreateInboxIssueModal } from "components/inbox"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { CreateInboxIssueModal } from "components/inbox"; // helper import { renderEmoji } from "helpers/emoji.helper"; +import { useProject } from "hooks/store"; export const ProjectInboxHeader: FC = observer(() => { // states diff --git a/web/components/headers/project-issue-details.tsx b/web/components/headers/project-issue-details.tsx index 3732f2598..2f6349e61 100644 --- a/web/components/headers/project-issue-details.tsx +++ b/web/components/headers/project-issue-details.tsx @@ -1,22 +1,22 @@ import { FC } from "react"; -import useSWR from "swr"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; +import useSWR from "swr"; // hooks +import { PanelRight } from "lucide-react"; +import { Breadcrumbs, LayersIcon } from "@plane/ui"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { ISSUE_DETAILS } from "constants/fetch-keys"; +import { cn } from "helpers/common.helper"; +import { renderEmoji } from "helpers/emoji.helper"; import { useApplication, useProject } from "hooks/store"; // ui -import { Breadcrumbs, LayersIcon } from "@plane/ui"; // helpers -import { renderEmoji } from "helpers/emoji.helper"; // services import { IssueService } from "services/issue"; // constants -import { ISSUE_DETAILS } from "constants/fetch-keys"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; -import { PanelRight } from "lucide-react"; -import { cn } from "helpers/common.helper"; // services const issueService = new IssueService(); @@ -91,7 +91,9 @@ export const ProjectIssueDetailsHeader: FC = observer(() => {
); diff --git a/web/components/headers/project-issues.tsx b/web/components/headers/project-issues.tsx index 43030c5c2..8e8807fdb 100644 --- a/web/components/headers/project-issues.tsx +++ b/web/components/headers/project-issues.tsx @@ -1,8 +1,17 @@ import { useCallback, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Briefcase, Circle, ExternalLink, Plus } from "lucide-react"; // hooks +import { Breadcrumbs, Button, LayersIcon } from "@plane/ui"; +import { ProjectAnalyticsModal } from "components/analytics"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; +import { IssuesMobileHeader } from "components/issues/issues-mobile-header"; +import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { renderEmoji } from "helpers/emoji.helper"; import { useApplication, useEventTracker, @@ -13,21 +22,12 @@ import { useMember, } from "hooks/store"; // components -import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; -import { ProjectAnalyticsModal } from "components/analytics"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; // ui -import { Breadcrumbs, Button, LayersIcon } from "@plane/ui"; // types +import { useIssues } from "hooks/store/use-issues"; import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; // constants -import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; // helper -import { renderEmoji } from "helpers/emoji.helper"; -import { EUserProjectRoles } from "constants/project"; -import { useIssues } from "hooks/store/use-issues"; -import { IssuesMobileHeader } from "components/issues/issues-mobile-header"; export const ProjectIssuesHeader: React.FC = observer(() => { // states diff --git a/web/components/headers/project-settings.tsx b/web/components/headers/project-settings.tsx index b70a4614f..87b2e507e 100644 --- a/web/components/headers/project-settings.tsx +++ b/web/components/headers/project-settings.tsx @@ -1,17 +1,17 @@ import { FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // ui import { Breadcrumbs, CustomMenu } from "@plane/ui"; // helper +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { EUserProjectRoles, PROJECT_SETTINGS_LINKS } from "constants/project"; import { renderEmoji } from "helpers/emoji.helper"; // hooks import { useProject, useUser } from "hooks/store"; // constants -import { EUserProjectRoles, PROJECT_SETTINGS_LINKS } from "constants/project"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; export interface IProjectSettingHeader { title: string; diff --git a/web/components/headers/project-view-issues.tsx b/web/components/headers/project-view-issues.tsx index 175534a79..eea211431 100644 --- a/web/components/headers/project-view-issues.tsx +++ b/web/components/headers/project-view-issues.tsx @@ -1,9 +1,22 @@ import { useCallback } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import { Plus } from "lucide-react"; import Link from "next/link"; +import { useRouter } from "next/router"; +import { Plus } from "lucide-react"; // hooks +// components +// ui +import { Breadcrumbs, Button, CustomMenu, PhotoFilterIcon } from "@plane/ui"; +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; +// helpers +// types +// constants +import { EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { renderEmoji } from "helpers/emoji.helper"; +import { truncateText } from "helpers/string.helper"; import { useApplication, useEventTracker, @@ -15,20 +28,7 @@ import { useProjectView, useUser, } from "hooks/store"; -// components -import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "components/issues"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; -// ui -import { Breadcrumbs, Button, CustomMenu, PhotoFilterIcon } from "@plane/ui"; -// helpers -import { truncateText } from "helpers/string.helper"; -import { renderEmoji } from "helpers/emoji.helper"; -// types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; -// constants -import { EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; -import { EUserProjectRoles } from "constants/project"; export const ProjectViewIssuesHeader: React.FC = observer(() => { // router diff --git a/web/components/headers/project-views.tsx b/web/components/headers/project-views.tsx index bb070a22f..3b4d7fb20 100644 --- a/web/components/headers/project-views.tsx +++ b/web/components/headers/project-views.tsx @@ -1,16 +1,16 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Plus } from "lucide-react"; // hooks -import { useApplication, useProject, useUser } from "hooks/store"; // components import { Breadcrumbs, PhotoFilterIcon, Button } from "@plane/ui"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; // helpers +import { EUserProjectRoles } from "constants/project"; import { renderEmoji } from "helpers/emoji.helper"; // constants -import { EUserProjectRoles } from "constants/project"; +import { useApplication, useProject, useUser } from "hooks/store"; export const ProjectViewsHeader: React.FC = observer(() => { // router diff --git a/web/components/headers/projects.tsx b/web/components/headers/projects.tsx index f6dd7fd3c..3810860aa 100644 --- a/web/components/headers/projects.tsx +++ b/web/components/headers/projects.tsx @@ -1,14 +1,14 @@ import { observer } from "mobx-react-lite"; import { Search, Plus, Briefcase } from "lucide-react"; // hooks -import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; // ui import { Breadcrumbs, Button } from "@plane/ui"; // constants +import { BreadcrumbLink } from "components/common"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { EUserWorkspaceRoles } from "constants/workspace"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { BreadcrumbLink } from "components/common"; +import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; export const ProjectsHeader = observer(() => { // store hooks diff --git a/web/components/headers/user-profile.tsx b/web/components/headers/user-profile.tsx index 30bc5b2a9..09b764cdc 100644 --- a/web/components/headers/user-profile.tsx +++ b/web/components/headers/user-profile.tsx @@ -1,23 +1,23 @@ // ui +import { FC } from "react"; +import { observer } from "mobx-react-lite"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import { ChevronDown, PanelRight } from "lucide-react"; import { Breadcrumbs, CustomMenu } from "@plane/ui"; import { BreadcrumbLink } from "components/common"; // components import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { cn } from "helpers/common.helper"; -import { FC } from "react"; -import { useApplication, useUser } from "hooks/store"; -import { ChevronDown, PanelRight } from "lucide-react"; -import { observer } from "mobx-react-lite"; import { PROFILE_ADMINS_TAB, PROFILE_VIEWER_TAB } from "constants/profile"; -import Link from "next/link"; -import { useRouter } from "next/router"; +import { cn } from "helpers/common.helper"; +import { useApplication, useUser } from "hooks/store"; type TUserProfileHeader = { - type?: string | undefined -} + type?: string | undefined; +}; export const UserProfileHeader: FC = observer((props) => { - const { type = undefined } = props + const { type = undefined } = props; const router = useRouter(); const { workspaceSlug, userId } = router.query; @@ -34,45 +34,60 @@ export const UserProfileHeader: FC = observer((props) => { const { theme: themStore } = useApplication(); - return (
-
- -
- - } /> - -
- - {type} - -
- } - customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm" - closeOnSelect - > - <> - {tabsList.map((tab) => ( - - {tab.label} - - ))} - - + return ( +
+
+ +
+ + } + /> + +
+ + {type} + +
+ } + customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm" + closeOnSelect + > + <> + {tabsList.map((tab) => ( + + + {tab.label} + + + ))} + + +
-
) + ); }); - - diff --git a/web/components/headers/workspace-active-cycles.tsx b/web/components/headers/workspace-active-cycles.tsx index 195b89471..a33161de9 100644 --- a/web/components/headers/workspace-active-cycles.tsx +++ b/web/components/headers/workspace-active-cycles.tsx @@ -1,10 +1,10 @@ import { observer } from "mobx-react-lite"; // ui +import { Crown } from "lucide-react"; import { Breadcrumbs, ContrastIcon } from "@plane/ui"; import { BreadcrumbLink } from "components/common"; import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; // icons -import { Crown } from "lucide-react"; export const WorkspaceActiveCycleHeader = observer(() => (
diff --git a/web/components/headers/workspace-analytics.tsx b/web/components/headers/workspace-analytics.tsx index a6ad67f05..2bede32ba 100644 --- a/web/components/headers/workspace-analytics.tsx +++ b/web/components/headers/workspace-analytics.tsx @@ -1,14 +1,14 @@ +import { useEffect } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import { BarChart2, PanelRight } from "lucide-react"; // ui import { Breadcrumbs } from "@plane/ui"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { BreadcrumbLink } from "components/common"; -import { useApplication } from "hooks/store"; -import { observer } from "mobx-react"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { cn } from "helpers/common.helper"; -import { useEffect } from "react"; +import { useApplication } from "hooks/store"; export const WorkspaceAnalyticsHeader = observer(() => { const router = useRouter(); @@ -47,11 +47,21 @@ export const WorkspaceAnalyticsHeader = observer(() => { } /> - {analytics_tab === 'custom' && - - } + )}
diff --git a/web/components/headers/workspace-dashboard.tsx b/web/components/headers/workspace-dashboard.tsx index 6b85577f6..e7ae3c726 100644 --- a/web/components/headers/workspace-dashboard.tsx +++ b/web/components/headers/workspace-dashboard.tsx @@ -1,17 +1,17 @@ -import { LayoutGrid, Zap } from "lucide-react"; import Image from "next/image"; import { useTheme } from "next-themes"; +import { LayoutGrid, Zap } from "lucide-react"; // images import githubBlackImage from "/public/logos/github-black.png"; import githubWhiteImage from "/public/logos/github-white.png"; // hooks -import { useEventTracker } from "hooks/store"; // components -import { BreadcrumbLink } from "components/common"; import { Breadcrumbs } from "@plane/ui"; +import { BreadcrumbLink } from "components/common"; import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; // constants import { CHANGELOG_REDIRECTED, GITHUB_REDIRECTED } from "constants/event-tracker"; +import { useEventTracker } from "hooks/store"; export const WorkspaceDashboardHeader = () => { // hooks diff --git a/web/components/headers/workspace-settings.tsx b/web/components/headers/workspace-settings.tsx index 5ced55204..faf1a45d1 100644 --- a/web/components/headers/workspace-settings.tsx +++ b/web/components/headers/workspace-settings.tsx @@ -1,14 +1,14 @@ import { FC } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // ui -import { Breadcrumbs, CustomMenu } from "@plane/ui"; import { Settings } from "lucide-react"; +import { Breadcrumbs, CustomMenu } from "@plane/ui"; // hooks -import { observer } from "mobx-react-lite"; // components +import { BreadcrumbLink } from "components/common"; import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { WORKSPACE_SETTINGS_LINKS } from "constants/workspace"; -import { BreadcrumbLink } from "components/common"; export interface IWorkspaceSettingHeader { title: string; diff --git a/web/components/icons/priority-icon.tsx b/web/components/icons/priority-icon.tsx index b23f56eab..36ea67b3d 100644 --- a/web/components/icons/priority-icon.tsx +++ b/web/components/icons/priority-icon.tsx @@ -14,12 +14,12 @@ export const PriorityIcon: React.FC = ({ priority, className = "" }) => { {priority === "urgent" ? "error" : priority === "high" - ? "signal_cellular_alt" - : priority === "medium" - ? "signal_cellular_alt_2_bar" - : priority === "low" - ? "signal_cellular_alt_1_bar" - : "block"} + ? "signal_cellular_alt" + : priority === "medium" + ? "signal_cellular_alt_2_bar" + : priority === "low" + ? "signal_cellular_alt_1_bar" + : "block"} ); }; diff --git a/web/components/icons/state/state-group-icon.tsx b/web/components/icons/state/state-group-icon.tsx index 15debf5f2..ae9e5f1a9 100644 --- a/web/components/icons/state/state-group-icon.tsx +++ b/web/components/icons/state/state-group-icon.tsx @@ -7,9 +7,9 @@ import { StateGroupUnstartedIcon, } from "components/icons"; // types +import { STATE_GROUPS } from "constants/state"; import { TStateGroups } from "@plane/types"; // constants -import { STATE_GROUPS } from "constants/state"; type Props = { className?: string; diff --git a/web/components/inbox/content/root.tsx b/web/components/inbox/content/root.tsx index 26f58131e..7cc19bec3 100644 --- a/web/components/inbox/content/root.tsx +++ b/web/components/inbox/content/root.tsx @@ -2,12 +2,12 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { Inbox } from "lucide-react"; // hooks -import { useInboxIssues } from "hooks/store"; -// components +import { Loader } from "@plane/ui"; import { InboxIssueActionsHeader } from "components/inbox"; import { InboxIssueDetailRoot } from "components/issues/issue-detail/inbox"; +import { useInboxIssues } from "hooks/store"; +// components // ui -import { Loader } from "@plane/ui"; type TInboxContentRoot = { workspaceSlug: string; diff --git a/web/components/inbox/inbox-issue-actions.tsx b/web/components/inbox/inbox-issue-actions.tsx index 4d4cfa0cc..661bc2d72 100644 --- a/web/components/inbox/inbox-issue-actions.tsx +++ b/web/components/inbox/inbox-issue-actions.tsx @@ -1,10 +1,12 @@ import { FC, useCallback, useEffect, useMemo, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { DayPicker } from "react-day-picker"; import { Popover } from "@headlessui/react"; -// hooks -import { useUser, useInboxIssues, useIssueDetail, useWorkspace, useEventTracker } from "hooks/store"; +// icons +import { CheckCircle2, ChevronDown, ChevronUp, Clock, FileStack, Trash2, XCircle } from "lucide-react"; +// ui +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // components import { AcceptIssueModal, @@ -12,14 +14,12 @@ import { DeleteInboxIssueModal, SelectDuplicateInboxIssueModal, } from "components/inbox"; -// ui -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; -// icons -import { CheckCircle2, ChevronDown, ChevronUp, Clock, FileStack, Trash2, XCircle } from "lucide-react"; +import { ISSUE_DELETED } from "constants/event-tracker"; +import { EUserProjectRoles } from "constants/project"; +// hooks +import { useUser, useInboxIssues, useIssueDetail, useWorkspace, useEventTracker } from "hooks/store"; // types import type { TInboxDetailedStatus } from "@plane/types"; -import { EUserProjectRoles } from "constants/project"; -import { ISSUE_DELETED } from "constants/event-tracker"; type TInboxIssueActionsHeader = { workspaceSlug: string; @@ -232,7 +232,7 @@ export const InboxIssueActionsHeader: FC = observer((p )} {inboxIssueId && ( -
+
diff --git a/web/components/issues/attachment/attachment-detail.tsx b/web/components/issues/attachment/attachment-detail.tsx index 0d345a619..8ff2b9305 100644 --- a/web/components/issues/attachment/attachment-detail.tsx +++ b/web/components/issues/attachment/attachment-detail.tsx @@ -2,17 +2,17 @@ import { FC, useState } from "react"; import Link from "next/link"; import { AlertCircle, X } from "lucide-react"; // hooks -import { useIssueDetail, useMember } from "hooks/store"; // ui import { Tooltip } from "@plane/ui"; // components -import { IssueAttachmentDeleteModal } from "./delete-attachment-confirmation-modal"; // icons import { getFileIcon } from "components/icons"; // helper -import { truncateText } from "helpers/string.helper"; -import { renderFormattedDate } from "helpers/date-time.helper"; import { convertBytesToSize, getFileExtension, getFileName } from "helpers/attachment.helper"; +import { renderFormattedDate } from "helpers/date-time.helper"; +import { truncateText } from "helpers/string.helper"; +import { useIssueDetail, useMember } from "hooks/store"; +import { IssueAttachmentDeleteModal } from "./delete-attachment-confirmation-modal"; // types import { TAttachmentOperations } from "./root"; diff --git a/web/components/issues/attachment/attachment-upload.tsx b/web/components/issues/attachment/attachment-upload.tsx index bf197980a..27dc572a9 100644 --- a/web/components/issues/attachment/attachment-upload.tsx +++ b/web/components/issues/attachment/attachment-upload.tsx @@ -2,11 +2,11 @@ import { useCallback, useState } from "react"; import { observer } from "mobx-react-lite"; import { useDropzone } from "react-dropzone"; // hooks -import { useApplication } from "hooks/store"; // constants import { MAX_FILE_SIZE } from "constants/common"; // helpers import { generateFileName } from "helpers/attachment.helper"; +import { useApplication } from "hooks/store"; // types import { TAttachmentOperations } from "./root"; diff --git a/web/components/issues/attachment/attachments-list.tsx b/web/components/issues/attachment/attachments-list.tsx index 2129a4f61..0f834c1a4 100644 --- a/web/components/issues/attachment/attachments-list.tsx +++ b/web/components/issues/attachment/attachments-list.tsx @@ -32,6 +32,7 @@ export const IssueAttachmentsList: FC = observer((props) issueAttachments.length > 0 && issueAttachments.map((attachmentId) => ( = observer((props) => { debouncedFormSave(); }} required - className="min-h-min block w-full resize-none overflow-hidden rounded border-none bg-transparent px-3 py-2 text-2xl font-medium outline-none ring-0 focus:ring-1 focus:ring-custom-primary" + className="block min-h-min w-full resize-none overflow-hidden rounded border-none bg-transparent px-3 py-2 text-2xl font-medium outline-none ring-0 focus:ring-1 focus:ring-custom-primary" hasError={Boolean(errors?.name)} role="textbox" /> @@ -173,7 +173,7 @@ export const IssueDescriptionForm: FC = observer((props) => { setIsSubmitting={setIsSubmitting} dragDropEnabled customClassName="min-h-[150px] shadow-sm" - onChange={(description: Object, description_html: string) => { + onChange={(description: any, description_html: string) => { setShowAlert(true); setIsSubmitting("submitting"); onChange(description_html); diff --git a/web/components/issues/description-input.tsx b/web/components/issues/description-input.tsx index 65e82df5f..4f1f5c056 100644 --- a/web/components/issues/description-input.tsx +++ b/web/components/issues/description-input.tsx @@ -1,16 +1,15 @@ import { FC, useState, useEffect } from "react"; // components -import { Loader } from "@plane/ui"; import { RichReadOnlyEditor, RichTextEditor } from "@plane/rich-text-editor"; -// store hooks +import { Loader } from "@plane/ui"; +// hooks import { useMention, useWorkspace } from "hooks/store"; +import useDebounce from "hooks/use-debounce"; // services import { FileService } from "services/file.service"; const fileService = new FileService(); // types import { TIssueOperations } from "./issue-detail"; -// hooks -import useDebounce from "hooks/use-debounce"; export type IssueDescriptionInputProps = { workspaceSlug: string; @@ -78,7 +77,7 @@ export const IssueDescriptionInput: FC = (props) => initialValue={initialValue} dragDropEnabled customClassName="min-h-[150px] shadow-sm" - onChange={(description: Object, description_html: string) => { + onChange={(description: any, description_html: string) => { setIsSubmitting("submitting"); setDescriptionHTML(description_html === "" ? "

" : description_html); }} diff --git a/web/components/issues/issue-detail/cycle-select.tsx b/web/components/issues/issue-detail/cycle-select.tsx index 4da762a9d..8744857c1 100644 --- a/web/components/issues/issue-detail/cycle-select.tsx +++ b/web/components/issues/issue-detail/cycle-select.tsx @@ -1,13 +1,12 @@ import React, { useState } from "react"; import { observer } from "mobx-react-lite"; // hooks -import { useIssueDetail } from "hooks/store"; // components import { CycleDropdown } from "components/dropdowns"; // ui -import { Spinner } from "@plane/ui"; // helpers import { cn } from "helpers/common.helper"; +import { useIssueDetail } from "hooks/store"; // types import type { TIssueOperations } from "./root"; @@ -41,14 +40,14 @@ export const IssueCycleSelect: React.FC = observer((props) => }; return ( -
+
= observer((props) => { projectId={projectId} inboxId={inboxId} issueId={issueId} - showDescription={true} + showDescription />
diff --git a/web/components/issues/issue-detail/inbox/root.tsx b/web/components/issues/issue-detail/inbox/root.tsx index 9b0e961c0..144198085 100644 --- a/web/components/issues/issue-detail/inbox/root.tsx +++ b/web/components/issues/issue-detail/inbox/root.tsx @@ -2,17 +2,16 @@ import { FC, useMemo } from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; // components -import { InboxIssueMainContent } from "./main-content"; -import { InboxIssueDetailsSidebar } from "./sidebar"; -// hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; +import { EUserProjectRoles } from "constants/project"; import { useEventTracker, useInboxIssues, useIssueDetail, useUser } from "hooks/store"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // types import { TIssue } from "@plane/types"; import { TIssueOperations } from "../root"; +import { InboxIssueMainContent } from "./main-content"; +import { InboxIssueDetailsSidebar } from "./sidebar"; // constants -import { EUserProjectRoles } from "constants/project"; export type TInboxIssueDetailRoot = { workspaceSlug: string; @@ -48,12 +47,7 @@ export const InboxIssueDetailRoot: FC = (props) => { console.error("Error fetching the parent issue"); } }, - update: async ( - workspaceSlug: string, - projectId: string, - issueId: string, - data: Partial, - ) => { + update: async (workspaceSlug: string, projectId: string, issueId: string, data: Partial) => { try { await updateInboxIssue(workspaceSlug, projectId, inboxId, issueId, data); captureIssueEvent({ diff --git a/web/components/issues/issue-detail/inbox/sidebar.tsx b/web/components/issues/issue-detail/inbox/sidebar.tsx index 592791a85..bf9e833ce 100644 --- a/web/components/issues/issue-detail/inbox/sidebar.tsx +++ b/web/components/issues/issue-detail/inbox/sidebar.tsx @@ -2,14 +2,14 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { CalendarCheck2, Signal, Tag } from "lucide-react"; // hooks -import { useIssueDetail, useProject, useProjectState } from "hooks/store"; // components -import { IssueLabel, TIssueOperations } from "components/issues"; -import { DateDropdown, PriorityDropdown, MemberDropdown, StateDropdown } from "components/dropdowns"; -// icons import { DoubleCircleIcon, StateGroupIcon, UserGroupIcon } from "@plane/ui"; +import { DateDropdown, PriorityDropdown, MemberDropdown, StateDropdown } from "components/dropdowns"; +import { IssueLabel, TIssueOperations } from "components/issues"; +// icons // helper import { renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { useIssueDetail, useProject, useProjectState } from "hooks/store"; type Props = { workspaceSlug: string; diff --git a/web/components/issues/issue-detail/issue-activity/activity-comment-root.tsx b/web/components/issues/issue-detail/issue-activity/activity-comment-root.tsx index 575e8d841..af3266067 100644 --- a/web/components/issues/issue-detail/issue-activity/activity-comment-root.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity-comment-root.tsx @@ -31,6 +31,7 @@ export const IssueActivityCommentRoot: FC = observer( {activityComments.map((activityComment, index) => activityComment.activity_type === "COMMENT" ? ( = observer((props > <> {activity.old_value === "" ? `added a new assignee ` : `removed the assignee `} - = observer((props > {activity.new_value && activity.new_value !== "" ? activity.new_value : activity.old_value} - {showIssue && (activity.old_value === "" ? ` to ` : ` from `)} {showIssue && }. diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx index 8336e516f..ec3c777fc 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/cycle.tsx @@ -1,11 +1,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; // hooks +import { ContrastIcon } from "@plane/ui"; import { useIssueDetail } from "hooks/store"; // components import { IssueActivityBlockComponent } from "./"; // icons -import { ContrastIcon } from "@plane/ui"; type TIssueCycleActivity = { activityId: string; ends: "top" | "bottom" | undefined }; diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/default.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/default.tsx index e45387535..0eeb7ecac 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/default.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/default.tsx @@ -1,11 +1,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; // hooks +import { LayersIcon } from "@plane/ui"; import { useIssueDetail } from "hooks/store"; // components import { IssueActivityBlockComponent } from "./"; // icons -import { LayersIcon } from "@plane/ui"; type TIssueDefaultActivity = { activityId: string; ends: "top" | "bottom" | undefined }; diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx index e01b94e1b..a8c309bd5 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/estimate.tsx @@ -33,13 +33,11 @@ export const IssueEstimateActivity: FC = observer((props {activity.new_value ? `set the estimate point to ` : `removed the estimate point `} {activity.new_value && ( <> - {areEstimatesEnabledForCurrentProject ? estimateValue : `${currentPoint} ${currentPoint > 1 ? "points" : "point"}`} - )} {showIssue && (activity.new_value ? ` to ` : ` from `)} diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx index e209b4bbf..0097b65b6 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/activity-block.tsx @@ -1,13 +1,13 @@ import { FC, ReactNode } from "react"; import { Network } from "lucide-react"; // hooks +import { Tooltip } from "@plane/ui"; +import { renderFormattedTime, renderFormattedDate, calculateTimeAgo } from "helpers/date-time.helper"; import { useIssueDetail } from "hooks/store"; // ui -import { Tooltip } from "@plane/ui"; // components import { IssueUser } from "../"; // helpers -import { renderFormattedTime, renderFormattedDate, calculateTimeAgo } from "helpers/date-time.helper"; type TIssueActivityBlockComponent = { icon?: ReactNode; @@ -33,7 +33,7 @@ export const IssueActivityBlockComponent: FC = (pr ends === "top" ? `pb-2` : ends === "bottom" ? `pt-2` : `py-2` }`} > -
+
{icon ? icon : }
diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx index e86b1fb57..49f813ec6 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/helpers/issue-link.tsx @@ -1,8 +1,8 @@ import { FC } from "react"; // hooks +import { Tooltip } from "@plane/ui"; import { useIssueDetail } from "hooks/store"; // ui -import { Tooltip } from "@plane/ui"; type TIssueLink = { activityId: string; diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/module.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/module.tsx index c8089d233..0108c56b3 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/module.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/module.tsx @@ -1,11 +1,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; // hooks +import { DiceIcon } from "@plane/ui"; import { useIssueDetail } from "hooks/store"; // components import { IssueActivityBlockComponent } from "./"; // icons -import { DiceIcon } from "@plane/ui"; type TIssueModuleActivity = { activityId: string; ends: "top" | "bottom" | undefined }; diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx index e68a7c373..5ef67cf52 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/relation.tsx @@ -1,13 +1,13 @@ import { FC } from "react"; import { observer } from "mobx-react"; // hooks +import { issueRelationObject } from "components/issues/issue-detail/relation-select"; import { useIssueDetail } from "hooks/store"; // components +import { TIssueRelationTypes } from "@plane/types"; import { IssueActivityBlockComponent } from "./"; // component helpers -import { issueRelationObject } from "components/issues/issue-detail/relation-select"; // types -import { TIssueRelationTypes } from "@plane/types"; type TIssueRelationActivity = { activityId: string; ends: "top" | "bottom" | undefined }; diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx index 95b3cda80..0e3a80b34 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/start_date.tsx @@ -2,11 +2,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { CalendarDays } from "lucide-react"; // hooks +import { renderFormattedDate } from "helpers/date-time.helper"; import { useIssueDetail } from "hooks/store"; // components import { IssueActivityBlockComponent, IssueLink } from "./"; // helpers -import { renderFormattedDate } from "helpers/date-time.helper"; type TIssueStartDateActivity = { activityId: string; showIssue?: boolean; ends: "top" | "bottom" | undefined }; diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/state.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/state.tsx index 7cc47c2c8..757519388 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/state.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/state.tsx @@ -1,11 +1,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; // hooks +import { DoubleCircleIcon } from "@plane/ui"; import { useIssueDetail } from "hooks/store"; // components import { IssueActivityBlockComponent, IssueLink } from "./"; // icons -import { DoubleCircleIcon } from "@plane/ui"; type TIssueStateActivity = { activityId: string; showIssue?: boolean; ends: "top" | "bottom" | undefined }; diff --git a/web/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx b/web/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx index a4b40ec31..947b2e6e6 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/actions/target_date.tsx @@ -2,11 +2,11 @@ import { FC } from "react"; import { observer } from "mobx-react"; import { CalendarDays } from "lucide-react"; // hooks +import { renderFormattedDate } from "helpers/date-time.helper"; import { useIssueDetail } from "hooks/store"; // components import { IssueActivityBlockComponent, IssueLink } from "./"; // helpers -import { renderFormattedDate } from "helpers/date-time.helper"; type TIssueTargetDateActivity = { activityId: string; showIssue?: boolean; ends: "top" | "bottom" | undefined }; diff --git a/web/components/issues/issue-detail/issue-activity/activity/root.tsx b/web/components/issues/issue-detail/issue-activity/activity/root.tsx index af44463d5..092633b06 100644 --- a/web/components/issues/issue-detail/issue-activity/activity/root.tsx +++ b/web/components/issues/issue-detail/issue-activity/activity/root.tsx @@ -23,6 +23,7 @@ export const IssueActivityRoot: FC = observer((props) => {
{activityIds.map((activityId, index) => ( diff --git a/web/components/issues/issue-detail/issue-activity/comments/comment-block.tsx b/web/components/issues/issue-detail/issue-activity/comments/comment-block.tsx index 4dbc36f6b..b00dd2a13 100644 --- a/web/components/issues/issue-detail/issue-activity/comments/comment-block.tsx +++ b/web/components/issues/issue-detail/issue-activity/comments/comment-block.tsx @@ -1,9 +1,9 @@ import { FC, ReactNode } from "react"; import { MessageCircle } from "lucide-react"; // hooks +import { calculateTimeAgo } from "helpers/date-time.helper"; import { useIssueDetail } from "hooks/store"; // helpers -import { calculateTimeAgo } from "helpers/date-time.helper"; type TIssueCommentBlock = { commentId: string; @@ -24,7 +24,7 @@ export const IssueCommentBlock: FC = (props) => { if (!comment) return <>; return (
-
+
{comment.actor_detail.avatar && comment.actor_detail.avatar !== "" ? ( = (props) => { value={watch("comment_html") ?? ""} debouncedUpdatesEnabled={false} customClassName="min-h-[50px] p-3 shadow-sm" - onChange={(comment_json: Object, comment_html: string) => setValue("comment_html", comment_html)} + onChange={(comment_json: any, comment_html: string) => setValue("comment_html", comment_html)} mentionSuggestions={mentionSuggestions} mentionHighlights={mentionHighlights} /> @@ -150,7 +150,7 @@ export const IssueCommentCard: FC = (props) => { onClick={handleSubmit(onEnter)} disabled={isSubmitting || isEmpty} className={`group rounded border border-green-500 bg-green-500/20 p-2 shadow-md duration-300 ${ - isEmpty ? "bg-gray-200 cursor-not-allowed" : "hover:bg-green-500" + isEmpty ? "cursor-not-allowed bg-gray-200" : "hover:bg-green-500" }`} > = (props) => { customClassName="p-2" editorContentCustomClassNames="min-h-[35px]" debouncedUpdatesEnabled={false} - onChange={(comment_json: Object, comment_html: string) => { + onChange={(comment_json: any, comment_html: string) => { onChange(comment_html); }} mentionSuggestions={mentionSuggestions} diff --git a/web/components/issues/issue-detail/issue-activity/comments/root.tsx b/web/components/issues/issue-detail/issue-activity/comments/root.tsx index 4e2775c4a..0696fa129 100644 --- a/web/components/issues/issue-detail/issue-activity/comments/root.tsx +++ b/web/components/issues/issue-detail/issue-activity/comments/root.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react-lite"; // hooks import { useIssueDetail } from "hooks/store"; // components +import { TActivityOperations } from "../root"; import { IssueCommentCard } from "./comment-card"; // types -import { TActivityOperations } from "../root"; type TIssueCommentRoot = { workspaceSlug: string; @@ -28,6 +28,7 @@ export const IssueCommentRoot: FC = observer((props) => {
{commentIds.map((commentId, index) => ( = (props) => { return ( <>
@@ -149,7 +149,7 @@ export const LabelCreate: FC = (props) => { )} diff --git a/web/components/issues/issue-detail/label/label-list-item.tsx b/web/components/issues/issue-detail/label/label-list-item.tsx index 60792b01c..69c0e08e9 100644 --- a/web/components/issues/issue-detail/label/label-list-item.tsx +++ b/web/components/issues/issue-detail/label/label-list-item.tsx @@ -1,8 +1,8 @@ import { FC } from "react"; import { X } from "lucide-react"; // types -import { TLabelOperations } from "./root"; import { useIssueDetail, useLabel } from "hooks/store"; +import { TLabelOperations } from "./root"; type TLabelListItem = { workspaceSlug: string; diff --git a/web/components/issues/issue-detail/label/label-list.tsx b/web/components/issues/issue-detail/label/label-list.tsx index fd714e002..fdf94be28 100644 --- a/web/components/issues/issue-detail/label/label-list.tsx +++ b/web/components/issues/issue-detail/label/label-list.tsx @@ -1,8 +1,8 @@ import { FC } from "react"; // components +import { useIssueDetail } from "hooks/store"; import { LabelListItem } from "./label-list-item"; // hooks -import { useIssueDetail } from "hooks/store"; // types import { TLabelOperations } from "./root"; @@ -29,6 +29,7 @@ export const LabelList: FC = (props) => { <> {issueLabels.map((labelId) => ( = observer((props) => // states const [referenceElement, setReferenceElement] = useState(null); const [popperElement, setPopperElement] = useState(null); - const [isLoading, setIsLoading] = useState(false); + const [isLoading, setIsLoading] = useState(false); const [query, setQuery] = useState(""); const issue = getIssueById(issueId); @@ -71,7 +71,7 @@ export const IssueLabelSelect: React.FC = observer((props) => const label = (
@@ -102,7 +102,7 @@ export const IssueLabelSelect: React.FC = observer((props) =>
-
+
{isLoading ? (

Loading...

) : filteredOptions.length > 0 ? ( diff --git a/web/components/issues/issue-detail/label/select/root.tsx b/web/components/issues/issue-detail/label/select/root.tsx index c31e1bc61..de0bcca90 100644 --- a/web/components/issues/issue-detail/label/select/root.tsx +++ b/web/components/issues/issue-detail/label/select/root.tsx @@ -1,8 +1,8 @@ import { FC } from "react"; // components +import { TLabelOperations } from "../root"; import { IssueLabelSelect } from "./label-select"; // types -import { TLabelOperations } from "../root"; type TIssueLabelSelectRoot = { workspaceSlug: string; diff --git a/web/components/issues/issue-detail/links/create-update-link-modal.tsx b/web/components/issues/issue-detail/links/create-update-link-modal.tsx index fc9eb3838..689968f07 100644 --- a/web/components/issues/issue-detail/links/create-update-link-modal.tsx +++ b/web/components/issues/issue-detail/links/create-update-link-modal.tsx @@ -152,8 +152,8 @@ export const IssueLinkCreateUpdateModal: FC = (props) ? "Updating Link..." : "Update Link" : isSubmitting - ? "Adding Link..." - : "Add Link"} + ? "Adding Link..." + : "Add Link"}
diff --git a/web/components/issues/issue-detail/links/link-detail.tsx b/web/components/issues/issue-detail/links/link-detail.tsx index f1b003b99..4504329f0 100644 --- a/web/components/issues/issue-detail/links/link-detail.tsx +++ b/web/components/issues/issue-detail/links/link-detail.tsx @@ -1,15 +1,15 @@ import { FC, useState } from "react"; // hooks -import { useIssueDetail, useMember } from "hooks/store"; // ui +import { Pencil, Trash2, LinkIcon } from "lucide-react"; import { ExternalLinkIcon, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; // icons -import { Pencil, Trash2, LinkIcon } from "lucide-react"; // types -import { IssueLinkCreateUpdateModal, TLinkOperationsModal } from "./create-update-link-modal"; // helpers import { calculateTimeAgo } from "helpers/date-time.helper"; import { copyTextToClipboard } from "helpers/string.helper"; +import { useIssueDetail, useMember } from "hooks/store"; +import { IssueLinkCreateUpdateModal, TLinkOperationsModal } from "./create-update-link-modal"; export type TIssueLinkDetail = { linkId: string; @@ -50,7 +50,7 @@ export const IssueLinkDetail: FC = (props) => {
{ copyTextToClipboard(linkDetail.url); setToast({ diff --git a/web/components/issues/issue-detail/links/links.tsx b/web/components/issues/issue-detail/links/links.tsx index 368bddb91..1120c3a5c 100644 --- a/web/components/issues/issue-detail/links/links.tsx +++ b/web/components/issues/issue-detail/links/links.tsx @@ -1,9 +1,9 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // computed +import { useIssueDetail, useUser } from "hooks/store"; import { IssueLinkDetail } from "./link-detail"; // hooks -import { useIssueDetail, useUser } from "hooks/store"; import { TLinkOperations } from "./root"; export type TLinkOperationsModal = Exclude; @@ -34,6 +34,7 @@ export const IssueLinkList: FC = observer((props) => { issueLinks.length > 0 && issueLinks.map((linkId) => ( ) => Promise; diff --git a/web/components/issues/issue-detail/main-content.tsx b/web/components/issues/issue-detail/main-content.tsx index 719129d98..b65560953 100644 --- a/web/components/issues/issue-detail/main-content.tsx +++ b/web/components/issues/issue-detail/main-content.tsx @@ -1,18 +1,18 @@ import { useEffect, useState } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { StateGroupIcon } from "@plane/ui"; +import { IssueAttachmentRoot, IssueUpdateStatus } from "components/issues"; import { useIssueDetail, useProjectState, useUser } from "hooks/store"; import useReloadConfirmations from "hooks/use-reload-confirmation"; // components -import { IssueAttachmentRoot, IssueUpdateStatus } from "components/issues"; -import { IssueTitleInput } from "../title-input"; import { IssueDescriptionInput } from "../description-input"; +import { SubIssuesRoot } from "../sub-issues"; +import { IssueTitleInput } from "../title-input"; +import { IssueActivity } from "./issue-activity"; import { IssueParentDetail } from "./parent"; import { IssueReaction } from "./reactions"; -import { SubIssuesRoot } from "../sub-issues"; -import { IssueActivity } from "./issue-activity"; // ui -import { StateGroupIcon } from "@plane/ui"; // types import { TIssueOperations } from "./root"; diff --git a/web/components/issues/issue-detail/module-select.tsx b/web/components/issues/issue-detail/module-select.tsx index f0fe06a2e..f157ede86 100644 --- a/web/components/issues/issue-detail/module-select.tsx +++ b/web/components/issues/issue-detail/module-select.tsx @@ -1,14 +1,13 @@ import React, { useState } from "react"; -import { observer } from "mobx-react-lite"; import xor from "lodash/xor"; +import { observer } from "mobx-react-lite"; // hooks -import { useIssueDetail } from "hooks/store"; // components import { ModuleDropdown } from "components/dropdowns"; // ui -import { Spinner } from "@plane/ui"; // helpers import { cn } from "helpers/common.helper"; +import { useIssueDetail } from "hooks/store"; // types import type { TIssueOperations } from "./root"; @@ -58,14 +57,14 @@ export const IssueModuleSelect: React.FC = observer((props) }; return ( -
+
= (props) => { Loading
) : subIssueIds && subIssueIds.length > 0 ? ( - subIssueIds.map((issueId) => currentIssue.id != issueId && ) + subIssueIds.map( + (issueId) => currentIssue.id != issueId && + ) ) : (
No sibling issues diff --git a/web/components/issues/issue-detail/reactions/issue-comment.tsx b/web/components/issues/issue-detail/reactions/issue-comment.tsx index 2268540bf..97c63a017 100644 --- a/web/components/issues/issue-detail/reactions/issue-comment.tsx +++ b/web/components/issues/issue-detail/reactions/issue-comment.tsx @@ -1,14 +1,13 @@ import { FC, useMemo } from "react"; import { observer } from "mobx-react-lite"; // components -import { ReactionSelector } from "./reaction-selector"; -// hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; +import { renderEmoji } from "helpers/emoji.helper"; import { useIssueDetail } from "hooks/store"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // types import { IUser } from "@plane/types"; -import { renderEmoji } from "helpers/emoji.helper"; +import { ReactionSelector } from "./reaction-selector"; export type TIssueCommentReaction = { workspaceSlug: string; @@ -71,15 +70,7 @@ export const IssueCommentReaction: FC = observer((props) else await issueCommentReactionOperations.create(reaction); }, }), - [ - workspaceSlug, - projectId, - commentId, - currentUser, - createCommentReaction, - removeCommentReaction, - userReactions, - ] + [workspaceSlug, projectId, commentId, currentUser, createCommentReaction, removeCommentReaction, userReactions] ); return ( diff --git a/web/components/issues/issue-detail/reactions/issue.tsx b/web/components/issues/issue-detail/reactions/issue.tsx index a9bc264f3..6f5610634 100644 --- a/web/components/issues/issue-detail/reactions/issue.tsx +++ b/web/components/issues/issue-detail/reactions/issue.tsx @@ -1,14 +1,13 @@ import { FC, useMemo } from "react"; import { observer } from "mobx-react-lite"; // components -import { ReactionSelector } from "./reaction-selector"; -// hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; +import { renderEmoji } from "helpers/emoji.helper"; import { useIssueDetail } from "hooks/store"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // types import { IUser } from "@plane/types"; -import { renderEmoji } from "helpers/emoji.helper"; +import { ReactionSelector } from "./reaction-selector"; export type TIssueReaction = { workspaceSlug: string; diff --git a/web/components/issues/issue-detail/reactions/reaction-selector.tsx b/web/components/issues/issue-detail/reactions/reaction-selector.tsx index 0782e7e15..655fd9105 100644 --- a/web/components/issues/issue-detail/reactions/reaction-selector.tsx +++ b/web/components/issues/issue-detail/reactions/reaction-selector.tsx @@ -1,9 +1,9 @@ import { Fragment } from "react"; import { Popover, Transition } from "@headlessui/react"; // helper +import { SmilePlus } from "lucide-react"; import { renderEmoji } from "helpers/emoji.helper"; // icons -import { SmilePlus } from "lucide-react"; const reactionEmojis = ["128077", "128078", "128516", "128165", "128533", "129505", "9992", "128064"]; diff --git a/web/components/issues/issue-detail/relation-select.tsx b/web/components/issues/issue-detail/relation-select.tsx index 260377406..0fd0902c6 100644 --- a/web/components/issues/issue-detail/relation-select.tsx +++ b/web/components/issues/issue-detail/relation-select.tsx @@ -1,15 +1,15 @@ import React from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; import { CircleDot, CopyPlus, Pencil, X, XCircle } from "lucide-react"; // hooks +import { RelatedIcon, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +import { ExistingIssuesListModal } from "components/core"; +import { cn } from "helpers/common.helper"; import { useIssueDetail, useIssues, useProject } from "hooks/store"; // components -import { ExistingIssuesListModal } from "components/core"; // ui -import { RelatedIcon, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { cn } from "helpers/common.helper"; // types import { TIssueRelationTypes, ISearchIssueResponse } from "@plane/types"; @@ -99,7 +99,7 @@ export const IssueRelationSelect: React.FC = observer((pro
-
Properties
+
Properties
{/* TODO: render properties using a common component */} -
-
-
+
+
+
State
@@ -195,7 +199,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { projectId={projectId?.toString() ?? ""} disabled={!is_editable} buttonVariant="transparent-with-text" - className="w-3/5 flex-grow group" + className="group w-3/5 flex-grow" buttonContainerClassName="w-full text-left" buttonClassName="text-sm" dropdownArrow @@ -203,8 +207,8 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { />
-
-
+
+
Assignees
@@ -216,7 +220,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { placeholder="Add assignees" multiple buttonVariant={issue?.assignee_ids?.length > 1 ? "transparent-without-text" : "transparent-with-text"} - className="w-3/5 flex-grow group" + className="group w-3/5 flex-grow" buttonContainerClassName="w-full text-left" buttonClassName={`text-sm justify-between ${ issue?.assignee_ids.length > 0 ? "" : "text-custom-text-400" @@ -227,8 +231,8 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { />
-
-
+
+
Priority
@@ -243,8 +247,8 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { />
-
-
+
+
Start date
@@ -259,7 +263,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { maxDate={maxDate ?? undefined} disabled={!is_editable} buttonVariant="transparent-with-text" - className="w-3/5 flex-grow group" + className="group w-3/5 flex-grow" buttonContainerClassName="w-full text-left" buttonClassName={`text-sm ${issue?.start_date ? "" : "text-custom-text-400"}`} hideIcon @@ -269,8 +273,8 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { />
-
-
+
+
Due date
@@ -285,7 +289,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { minDate={minDate ?? undefined} disabled={!is_editable} buttonVariant="transparent-with-text" - className="w-3/5 flex-grow group" + className="group w-3/5 flex-grow" buttonContainerClassName="w-full text-left" buttonClassName={cn("text-sm", { "text-custom-text-400": !issue.target_date, @@ -299,8 +303,8 @@ export const IssueDetailsSidebar: React.FC = observer((props) => {
{areEstimatesEnabledForCurrentProject && ( -
-
+
+
Estimate
@@ -310,7 +314,7 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { projectId={projectId} disabled={!is_editable} buttonVariant="transparent-with-text" - className="w-3/5 flex-grow group" + className="group w-3/5 flex-grow" buttonContainerClassName="w-full text-left" buttonClassName={`text-sm ${issue?.estimate_point !== null ? "" : "text-custom-text-400"}`} placeholder="None" @@ -322,8 +326,8 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { )} {projectDetails?.module_view && ( -
-
+
+
Module
@@ -339,8 +343,8 @@ export const IssueDetailsSidebar: React.FC = observer((props) => { )} {projectDetails?.cycle_view && ( -
-
+
+
Cycle
@@ -355,13 +359,13 @@ export const IssueDetailsSidebar: React.FC = observer((props) => {
)} -
-
+
+
Parent
= observer((props) => { />
-
-
+
+
Relates to
= observer((props) => { />
-
-
+
+
Blocking
= observer((props) => { />
-
-
+
+
Blocked by
= observer((props) => { />
-
-
+
+
Duplicate of
= observer((props) => { />
-
-
+
+
Labels
-
+
{ const { issues, issuesFilter } = useIssues(EIssuesStoreType.CYCLE); diff --git a/web/components/issues/issue-layouts/calendar/roots/module-root.tsx b/web/components/issues/issue-layouts/calendar/roots/module-root.tsx index cb474d25e..fd0153fe8 100644 --- a/web/components/issues/issue-layouts/calendar/roots/module-root.tsx +++ b/web/components/issues/issue-layouts/calendar/roots/module-root.tsx @@ -1,15 +1,15 @@ -import { useRouter } from "next/router"; +import { useMemo } from "react"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hoks +import { ModuleIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ModuleIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../../types"; import { BaseCalendarRoot } from "../base-calendar-root"; -import { EIssuesStoreType } from "constants/issue"; -import { useMemo } from "react"; export const ModuleCalendarLayout: React.FC = observer(() => { const { issues, issuesFilter } = useIssues(EIssuesStoreType.MODULE); diff --git a/web/components/issues/issue-layouts/calendar/roots/project-root.tsx b/web/components/issues/issue-layouts/calendar/roots/project-root.tsx index d42a8c5d2..f8933a227 100644 --- a/web/components/issues/issue-layouts/calendar/roots/project-root.tsx +++ b/web/components/issues/issue-layouts/calendar/roots/project-root.tsx @@ -1,14 +1,14 @@ +import { useMemo } from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // hooks +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ProjectIssueQuickActions } from "components/issues"; -import { BaseCalendarRoot } from "../base-calendar-root"; -import { EIssueActions } from "../../types"; import { TIssue } from "@plane/types"; -import { EIssuesStoreType } from "constants/issue"; -import { useMemo } from "react"; +import { EIssueActions } from "../../types"; +import { BaseCalendarRoot } from "../base-calendar-root"; export const CalendarLayout: React.FC = observer(() => { const router = useRouter(); diff --git a/web/components/issues/issue-layouts/calendar/roots/project-view-root.tsx b/web/components/issues/issue-layouts/calendar/roots/project-view-root.tsx index 0110aea2b..b50efd6c7 100644 --- a/web/components/issues/issue-layouts/calendar/roots/project-view-root.tsx +++ b/web/components/issues/issue-layouts/calendar/roots/project-view-root.tsx @@ -1,15 +1,15 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ProjectIssueQuickActions } from "components/issues"; -import { BaseCalendarRoot } from "../base-calendar-root"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../../types"; +import { BaseCalendarRoot } from "../base-calendar-root"; // constants -import { EIssuesStoreType } from "constants/issue"; export interface IViewCalendarLayout { issueActions: { diff --git a/web/components/issues/issue-layouts/calendar/week-days.tsx b/web/components/issues/issue-layouts/calendar/week-days.tsx index 5a640a566..2ce742fe8 100644 --- a/web/components/issues/issue-layouts/calendar/week-days.tsx +++ b/web/components/issues/issue-layouts/calendar/week-days.tsx @@ -4,12 +4,12 @@ import { CalendarDayTile } from "components/issues"; // helpers import { renderFormattedPayloadDate } from "helpers/date-time.helper"; // types -import { ICalendarDate, ICalendarWeek } from "./types"; -import { TGroupedIssues, TIssue, TIssueMap } from "@plane/types"; import { ICycleIssuesFilter } from "store/issue/cycle"; import { IModuleIssuesFilter } from "store/issue/module"; import { IProjectIssuesFilter } from "store/issue/project"; import { IProjectViewIssuesFilter } from "store/issue/project-views"; +import { TGroupedIssues, TIssue, TIssueMap } from "@plane/types"; +import { ICalendarDate, ICalendarWeek } from "./types"; type Props = { issuesFilterStore: IProjectIssuesFilter | IModuleIssuesFilter | ICycleIssuesFilter | IProjectViewIssuesFilter; diff --git a/web/components/issues/issue-layouts/empty-states/archived-issues.tsx b/web/components/issues/issue-layouts/empty-states/archived-issues.tsx index 0c8fb377a..96887ed60 100644 --- a/web/components/issues/issue-layouts/empty-states/archived-issues.tsx +++ b/web/components/issues/issue-layouts/empty-states/archived-issues.tsx @@ -1,15 +1,15 @@ +import size from "lodash/size"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; -import size from "lodash/size"; import { useTheme } from "next-themes"; // hooks +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { EMPTY_FILTER_STATE_DETAILS, EMPTY_ISSUE_STATE_DETAILS } from "constants/empty-state"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { useIssues, useUser } from "hooks/store"; // components -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; -import { EMPTY_FILTER_STATE_DETAILS, EMPTY_ISSUE_STATE_DETAILS } from "constants/empty-state"; // types import { IIssueFilterOptions } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/empty-states/cycle.tsx b/web/components/issues/issue-layouts/empty-states/cycle.tsx index b23b1998e..7b86c16a5 100644 --- a/web/components/issues/issue-layouts/empty-states/cycle.tsx +++ b/web/components/issues/issue-layouts/empty-states/cycle.tsx @@ -1,20 +1,21 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; -import { PlusIcon } from "lucide-react"; import { useTheme } from "next-themes"; +import { PlusIcon } from "lucide-react"; // hooks -import { useApplication, useEventTracker, useIssueDetail, useIssues, useUser } from "hooks/store"; -// ui import { TOAST_TYPE, setToast } from "@plane/ui"; -// components import { ExistingIssuesListModal } from "components/core"; +// ui +// components import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { CYCLE_EMPTY_STATE_DETAILS, EMPTY_FILTER_STATE_DETAILS } from "constants/empty-state"; +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { useApplication, useEventTracker, useIssues, useUser } from "hooks/store"; +// components // types import { ISearchIssueResponse, TIssueLayouts } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EIssuesStoreType } from "constants/issue"; -import { CYCLE_EMPTY_STATE_DETAILS, EMPTY_FILTER_STATE_DETAILS } from "constants/empty-state"; type Props = { workspaceSlug: string | undefined; @@ -44,7 +45,6 @@ export const CycleEmptyState: React.FC = observer((props) => { const { resolvedTheme } = useTheme(); // store hooks const { issues } = useIssues(EIssuesStoreType.CYCLE); - const { updateIssue, fetchIssue } = useIssueDetail(); const { commandPalette: { toggleCreateIssueModal }, } = useApplication(); diff --git a/web/components/issues/issue-layouts/empty-states/draft-issues.tsx b/web/components/issues/issue-layouts/empty-states/draft-issues.tsx index c496cc5fe..77b1123b6 100644 --- a/web/components/issues/issue-layouts/empty-states/draft-issues.tsx +++ b/web/components/issues/issue-layouts/empty-states/draft-issues.tsx @@ -1,15 +1,15 @@ +import size from "lodash/size"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; -import size from "lodash/size"; import { useTheme } from "next-themes"; // hooks +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { EMPTY_FILTER_STATE_DETAILS, EMPTY_ISSUE_STATE_DETAILS } from "constants/empty-state"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { useIssues, useUser } from "hooks/store"; // components -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; -import { EMPTY_FILTER_STATE_DETAILS, EMPTY_ISSUE_STATE_DETAILS } from "constants/empty-state"; // types import { IIssueFilterOptions } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/empty-states/global-view.tsx b/web/components/issues/issue-layouts/empty-states/global-view.tsx index bf898aec4..b24c4d5d6 100644 --- a/web/components/issues/issue-layouts/empty-states/global-view.tsx +++ b/web/components/issues/issue-layouts/empty-states/global-view.tsx @@ -1,9 +1,9 @@ import { observer } from "mobx-react-lite"; import { Plus, PlusIcon } from "lucide-react"; // hooks +import { EmptyState } from "components/common"; import { useApplication, useEventTracker, useProject } from "hooks/store"; // components -import { EmptyState } from "components/common"; // assets import emptyIssue from "public/empty-state/issue.svg"; import emptyProject from "public/empty-state/project.svg"; diff --git a/web/components/issues/issue-layouts/empty-states/module.tsx b/web/components/issues/issue-layouts/empty-states/module.tsx index 7a5c6f57f..c52d17af5 100644 --- a/web/components/issues/issue-layouts/empty-states/module.tsx +++ b/web/components/issues/issue-layouts/empty-states/module.tsx @@ -1,20 +1,20 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; -import { PlusIcon } from "lucide-react"; import { useTheme } from "next-themes"; +import { PlusIcon } from "lucide-react"; // hooks -import { useApplication, useEventTracker, useIssues, useUser } from "hooks/store"; -// ui import { TOAST_TYPE, setToast } from "@plane/ui"; -// components import { ExistingIssuesListModal } from "components/core"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { EMPTY_FILTER_STATE_DETAILS, MODULE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { useApplication, useEventTracker, useIssues, useUser } from "hooks/store"; +// ui +// components // types import { ISearchIssueResponse, TIssueLayouts } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EIssuesStoreType } from "constants/issue"; -import { EMPTY_FILTER_STATE_DETAILS, MODULE_EMPTY_STATE_DETAILS } from "constants/empty-state"; type Props = { workspaceSlug: string | undefined; diff --git a/web/components/issues/issue-layouts/empty-states/project-issues.tsx b/web/components/issues/issue-layouts/empty-states/project-issues.tsx index c7185934c..e44dd5626 100644 --- a/web/components/issues/issue-layouts/empty-states/project-issues.tsx +++ b/web/components/issues/issue-layouts/empty-states/project-issues.tsx @@ -1,15 +1,15 @@ +import size from "lodash/size"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; -import size from "lodash/size"; import { useTheme } from "next-themes"; // hooks +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { EMPTY_FILTER_STATE_DETAILS, EMPTY_ISSUE_STATE_DETAILS } from "constants/empty-state"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { useApplication, useEventTracker, useIssues, useUser } from "hooks/store"; // components -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; -import { EMPTY_FILTER_STATE_DETAILS, EMPTY_ISSUE_STATE_DETAILS } from "constants/empty-state"; // types import { IIssueFilterOptions } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/empty-states/project-view.tsx b/web/components/issues/issue-layouts/empty-states/project-view.tsx index 2da9a826f..fd98011fa 100644 --- a/web/components/issues/issue-layouts/empty-states/project-view.tsx +++ b/web/components/issues/issue-layouts/empty-states/project-view.tsx @@ -1,12 +1,12 @@ import { observer } from "mobx-react-lite"; import { PlusIcon } from "lucide-react"; // hooks +import { EmptyState } from "components/common"; +import { EIssuesStoreType } from "constants/issue"; import { useApplication, useEventTracker } from "hooks/store"; // components -import { EmptyState } from "components/common"; // assets import emptyIssue from "public/empty-state/issue.svg"; -import { EIssuesStoreType } from "constants/issue"; export const ProjectViewEmptyState: React.FC = observer(() => { // store hooks diff --git a/web/components/issues/issue-layouts/filters/applied-filters/cycle.tsx b/web/components/issues/issue-layouts/filters/applied-filters/cycle.tsx index 6299bebd7..76f36e815 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/cycle.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/cycle.tsx @@ -1,9 +1,9 @@ import { observer } from "mobx-react-lite"; import { X } from "lucide-react"; // hooks +import { CycleGroupIcon } from "@plane/ui"; import { useCycle } from "hooks/store"; // ui -import { CycleGroupIcon } from "@plane/ui"; // types import { TCycleGroups } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/date.tsx b/web/components/issues/issue-layouts/filters/applied-filters/date.tsx index 891fd6ddd..fdaed4b9b 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/date.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/date.tsx @@ -2,10 +2,10 @@ import { observer } from "mobx-react-lite"; // icons import { X } from "lucide-react"; // helpers +import { DATE_FILTER_OPTIONS } from "constants/filters"; import { renderFormattedDate } from "helpers/date-time.helper"; import { capitalizeFirstLetter } from "helpers/string.helper"; // constants -import { DATE_FILTER_OPTIONS } from "constants/filters"; type Props = { handleRemove: (val: string) => void; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx b/web/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx index 03b0c5138..10ad265f3 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/filters-list.tsx @@ -1,9 +1,6 @@ import { observer } from "mobx-react-lite"; import { X } from "lucide-react"; -import { useRouter } from "next/router"; // hooks -import { useApplication, useUser } from "hooks/store"; -// components import { AppliedCycleFilters, AppliedDateFilters, @@ -15,12 +12,14 @@ import { AppliedStateFilters, AppliedStateGroupFilters, } from "components/issues"; -// helpers +import { EUserProjectRoles } from "constants/project"; import { replaceUnderscoreIfSnakeCase } from "helpers/string.helper"; +import { useApplication, useUser } from "hooks/store"; +// components +// helpers // types import { IIssueFilterOptions, IIssueLabel, IState } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; type Props = { appliedFilters: IIssueFilterOptions; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/module.tsx b/web/components/issues/issue-layouts/filters/applied-filters/module.tsx index 790383f61..e34af8434 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/module.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/module.tsx @@ -1,9 +1,9 @@ import { observer } from "mobx-react-lite"; import { X } from "lucide-react"; // hooks +import { DiceIcon } from "@plane/ui"; import { useModule } from "hooks/store"; // ui -import { DiceIcon } from "@plane/ui"; type Props = { handleRemove: (val: string) => void; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/priority.tsx b/web/components/issues/issue-layouts/filters/applied-filters/priority.tsx index be3240b55..aad394d8a 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/priority.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/priority.tsx @@ -1,8 +1,8 @@ import { observer } from "mobx-react-lite"; // icons -import { PriorityIcon } from "@plane/ui"; import { X } from "lucide-react"; +import { PriorityIcon } from "@plane/ui"; // types import { TIssuePriorities } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/project.tsx b/web/components/issues/issue-layouts/filters/applied-filters/project.tsx index 4c5affe8d..24e8fd338 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/project.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/project.tsx @@ -1,9 +1,9 @@ import { observer } from "mobx-react-lite"; import { X } from "lucide-react"; // hooks +import { renderEmoji } from "helpers/emoji.helper"; import { useProject } from "hooks/store"; // helpers -import { renderEmoji } from "helpers/emoji.helper"; type Props = { handleRemove: (val: string) => void; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx index 227dc025b..35651d870 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/archived-issue.tsx @@ -1,12 +1,12 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { AppliedFiltersList, SaveFilterView } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { useIssues, useLabel, useProjectState } from "hooks/store"; // components -import { AppliedFiltersList, SaveFilterView } from "components/issues"; // types import { IIssueFilterOptions } from "@plane/types"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; export const ArchivedIssueAppliedFiltersRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx index daa194c9d..57e28240b 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/cycle-root.tsx @@ -1,12 +1,12 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { AppliedFiltersList, SaveFilterView } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { useIssues, useLabel, useProjectState } from "hooks/store"; // components -import { AppliedFiltersList, SaveFilterView } from "components/issues"; // types import { IIssueFilterOptions } from "@plane/types"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; export const CycleAppliedFiltersRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx index e9024afeb..a075d59d2 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/draft-issue.tsx @@ -1,12 +1,12 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { AppliedFiltersList, SaveFilterView } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { useIssues, useLabel, useProjectState } from "hooks/store"; // components -import { AppliedFiltersList, SaveFilterView } from "components/issues"; // types import { IIssueFilterOptions } from "@plane/types"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; export const DraftIssueAppliedFiltersRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx index c03e86504..a431652f1 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx @@ -1,18 +1,18 @@ -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import isEqual from "lodash/isEqual"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks -import { useEventTracker, useGlobalView, useIssues, useLabel, useUser } from "hooks/store"; //ui import { Button } from "@plane/ui"; // components import { AppliedFiltersList } from "components/issues"; // types -import { IIssueFilterOptions, TStaticViewTypes } from "@plane/types"; +import { GLOBAL_VIEW_UPDATED } from "constants/event-tracker"; import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { DEFAULT_GLOBAL_VIEWS_LIST, EUserWorkspaceRoles } from "constants/workspace"; // constants -import { GLOBAL_VIEW_UPDATED } from "constants/event-tracker"; +import { useEventTracker, useGlobalView, useIssues, useLabel, useUser } from "hooks/store"; +import { IIssueFilterOptions, TStaticViewTypes } from "@plane/types"; type Props = { globalViewId: string; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx index 055c32d20..d2c9ba7ed 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/module-root.tsx @@ -1,12 +1,12 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { AppliedFiltersList, SaveFilterView } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { useIssues, useLabel, useProjectState } from "hooks/store"; // components -import { AppliedFiltersList, SaveFilterView } from "components/issues"; // types import { IIssueFilterOptions } from "@plane/types"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; export const ModuleAppliedFiltersRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx index 7a6c39336..91eeef423 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/profile-issues-root.tsx @@ -1,13 +1,13 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks -import { useIssues, useLabel } from "hooks/store"; // components import { AppliedFiltersList } from "components/issues"; // types -import { IIssueFilterOptions } from "@plane/types"; import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; +import { useIssues, useLabel } from "hooks/store"; import { useWorkspaceIssueProperties } from "hooks/use-workspace-issue-properties"; +import { IIssueFilterOptions } from "@plane/types"; export const ProfileIssuesAppliedFiltersRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx index 68b5e6727..c0b67043a 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/project-root.tsx @@ -1,13 +1,13 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks -import { useLabel, useProjectState, useUser } from "hooks/store"; -import { useIssues } from "hooks/store/use-issues"; // components import { AppliedFiltersList, SaveFilterView } from "components/issues"; // constants import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { EUserProjectRoles } from "constants/project"; +import { useLabel, useProjectState, useUser } from "hooks/store"; +import { useIssues } from "hooks/store/use-issues"; // types import { IIssueFilterOptions } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx b/web/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx index 0768064ec..278e19d65 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx @@ -1,15 +1,15 @@ -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import isEqual from "lodash/isEqual"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { Button } from "@plane/ui"; +import { AppliedFiltersList } from "components/issues"; +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { useIssues, useLabel, useProjectState, useProjectView } from "hooks/store"; // components -import { AppliedFiltersList } from "components/issues"; // ui -import { Button } from "@plane/ui"; // types import { IIssueFilterOptions } from "@plane/types"; -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; export const ProjectViewAppliedFiltersRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/filters/applied-filters/state-group.tsx b/web/components/issues/issue-layouts/filters/applied-filters/state-group.tsx index 620a8f781..b4a6baa53 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/state-group.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/state-group.tsx @@ -1,8 +1,8 @@ import { observer } from "mobx-react-lite"; // icons -import { StateGroupIcon } from "@plane/ui"; import { X } from "lucide-react"; +import { StateGroupIcon } from "@plane/ui"; import { TStateGroups } from "@plane/types"; type Props = { diff --git a/web/components/issues/issue-layouts/filters/applied-filters/state.tsx b/web/components/issues/issue-layouts/filters/applied-filters/state.tsx index 59a873162..fc216afad 100644 --- a/web/components/issues/issue-layouts/filters/applied-filters/state.tsx +++ b/web/components/issues/issue-layouts/filters/applied-filters/state.tsx @@ -1,8 +1,8 @@ import { observer } from "mobx-react-lite"; // icons -import { StateGroupIcon } from "@plane/ui"; import { X } from "lucide-react"; +import { StateGroupIcon } from "@plane/ui"; // types import { IState } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx index b8988580a..02d1b2f04 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/display-filters-selection.tsx @@ -11,8 +11,8 @@ import { FilterSubGroupBy, } from "components/issues"; // types -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, TIssueGroupByOptions } from "@plane/types"; import { ILayoutDisplayFiltersOptions } from "constants/issue"; +import { IIssueDisplayFilterOptions, IIssueDisplayProperties, TIssueGroupByOptions } from "@plane/types"; type Props = { displayFilters: IIssueDisplayFilterOptions; @@ -37,7 +37,7 @@ export const DisplayFiltersSelection: React.FC = observer((props) => { Object.keys(layoutDisplayFiltersOptions?.display_filters ?? {}).includes(displayFilter); return ( -
+
{/* display properties */} {layoutDisplayFiltersOptions?.display_properties && (
diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx index f97140185..871bf8ff5 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/display-properties.tsx @@ -2,11 +2,11 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // components +import { ISSUE_DISPLAY_PROPERTIES } from "constants/issue"; +import { IIssueDisplayProperties } from "@plane/types"; import { FilterHeader } from "../helpers/filter-header"; // types -import { IIssueDisplayProperties } from "@plane/types"; // constants -import { ISSUE_DISPLAY_PROPERTIES } from "constants/issue"; type Props = { displayProperties: IIssueDisplayProperties; diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx index 0feb1d891..6de3c940d 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/extra-options.tsx @@ -4,9 +4,9 @@ import { observer } from "mobx-react-lite"; // components import { FilterOption } from "components/issues"; // types +import { ISSUE_EXTRA_OPTIONS } from "constants/issue"; import { IIssueDisplayFilterOptions, TIssueExtraOptions } from "@plane/types"; // constants -import { ISSUE_EXTRA_OPTIONS } from "constants/issue"; type Props = { selectedExtraOptions: { diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx index a4478e834..10dfa8c7c 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/group-by.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react-lite"; // components import { FilterHeader, FilterOption } from "components/issues"; // types +import { ISSUE_GROUP_BY_OPTIONS } from "constants/issue"; import { IIssueDisplayFilterOptions, TIssueGroupByOptions } from "@plane/types"; // constants -import { ISSUE_GROUP_BY_OPTIONS } from "constants/issue"; type Props = { displayFilters: IIssueDisplayFilterOptions; diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/issue-type.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/issue-type.tsx index 59c83a200..9cdcf953b 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/issue-type.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/issue-type.tsx @@ -4,9 +4,9 @@ import { observer } from "mobx-react-lite"; // components import { FilterHeader, FilterOption } from "components/issues"; // types +import { ISSUE_FILTER_OPTIONS } from "constants/issue"; import { TIssueTypeFilters } from "@plane/types"; // constants -import { ISSUE_FILTER_OPTIONS } from "constants/issue"; type Props = { selectedIssueType: TIssueTypeFilters | undefined; diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx index e417c650e..afcd0ba1b 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/order-by.tsx @@ -4,9 +4,9 @@ import { observer } from "mobx-react-lite"; // components import { FilterHeader, FilterOption } from "components/issues"; // types +import { ISSUE_ORDER_BY_OPTIONS } from "constants/issue"; import { TIssueOrderByOptions } from "@plane/types"; // constants -import { ISSUE_ORDER_BY_OPTIONS } from "constants/issue"; type Props = { selectedOrderBy: TIssueOrderByOptions | undefined; diff --git a/web/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx b/web/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx index 198148a84..98dcb7b95 100644 --- a/web/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx +++ b/web/components/issues/issue-layouts/filters/header/display-filters/sub-group-by.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react-lite"; // components import { FilterHeader, FilterOption } from "components/issues"; // types +import { ISSUE_GROUP_BY_OPTIONS } from "constants/issue"; import { IIssueDisplayFilterOptions, TIssueGroupByOptions } from "@plane/types"; // constants -import { ISSUE_GROUP_BY_OPTIONS } from "constants/issue"; type Props = { displayFilters: IIssueDisplayFilterOptions; diff --git a/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx b/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx index 168e31bc0..b26b688af 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/assignee.tsx @@ -1,11 +1,11 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { Avatar, Loader } from "@plane/ui"; +import { FilterHeader, FilterOption } from "components/issues"; import { useMember } from "hooks/store"; // components -import { FilterHeader, FilterOption } from "components/issues"; // ui -import { Avatar, Loader } from "@plane/ui"; type Props = { appliedFilters: string[] | null; @@ -24,8 +24,8 @@ export const FilterAssignees: React.FC = observer((props: Props) => { const appliedFiltersCount = appliedFilters?.length ?? 0; - const filteredOptions = memberIds?.filter((memberId) => - getUserDetails(memberId)?.display_name.toLowerCase().includes(searchQuery.toLowerCase()) + const filteredOptions = memberIds?.filter( + (memberId) => getUserDetails(memberId)?.display_name.toLowerCase().includes(searchQuery.toLowerCase()) ); const handleViewToggle = () => { diff --git a/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx b/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx index 7bde26ab9..45e3309a9 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/created-by.tsx @@ -1,11 +1,11 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { Avatar, Loader } from "@plane/ui"; +import { FilterHeader, FilterOption } from "components/issues"; import { useMember } from "hooks/store"; // components -import { FilterHeader, FilterOption } from "components/issues"; // ui -import { Avatar, Loader } from "@plane/ui"; type Props = { appliedFilters: string[] | null; @@ -22,8 +22,8 @@ export const FilterCreatedBy: React.FC = observer((props: Props) => { // store hooks const { getUserDetails } = useMember(); - const filteredOptions = memberIds?.filter((memberId) => - getUserDetails(memberId)?.display_name.toLowerCase().includes(searchQuery.toLowerCase()) + const filteredOptions = memberIds?.filter( + (memberId) => getUserDetails(memberId)?.display_name.toLowerCase().includes(searchQuery.toLowerCase()) ); const appliedFiltersCount = appliedFilters?.length ?? 0; diff --git a/web/components/issues/issue-layouts/filters/header/filters/cycle.tsx b/web/components/issues/issue-layouts/filters/header/filters/cycle.tsx index 47b3b0506..396addde6 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/cycle.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/cycle.tsx @@ -1,11 +1,11 @@ import React, { useState } from "react"; -import { observer } from "mobx-react"; import sortBy from "lodash/sortBy"; +import { observer } from "mobx-react"; // components +import { Loader, CycleGroupIcon } from "@plane/ui"; import { FilterHeader, FilterOption } from "components/issues"; import { useApplication, useCycle } from "hooks/store"; // ui -import { Loader, CycleGroupIcon } from "@plane/ui"; // types import { TCycleGroups } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx b/web/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx index ae7ded8b2..257aa1977 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/filters-selection.tsx @@ -2,8 +2,6 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; import { Search, X } from "lucide-react"; // hooks -import { useApplication } from "hooks/store"; -// components import { FilterAssignees, FilterMentions, @@ -18,10 +16,12 @@ import { FilterCycle, FilterModule, } from "components/issues"; +import { ILayoutDisplayFiltersOptions } from "constants/issue"; +import { useApplication } from "hooks/store"; +// components // types import { IIssueFilterOptions, IIssueLabel, IState } from "@plane/types"; // constants -import { ILayoutDisplayFiltersOptions } from "constants/issue"; type Props = { filters: IIssueFilterOptions; diff --git a/web/components/issues/issue-layouts/filters/header/filters/labels.tsx b/web/components/issues/issue-layouts/filters/header/filters/labels.tsx index b226f42b3..42e955535 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/labels.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/labels.tsx @@ -1,9 +1,9 @@ import React, { useState } from "react"; import { observer } from "mobx-react"; // components +import { Loader } from "@plane/ui"; import { FilterHeader, FilterOption } from "components/issues"; // ui -import { Loader } from "@plane/ui"; // types import { IIssueLabel } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/filters/header/filters/mentions.tsx b/web/components/issues/issue-layouts/filters/header/filters/mentions.tsx index a6af9833a..4d2839b2c 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/mentions.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/mentions.tsx @@ -1,11 +1,11 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { Loader, Avatar } from "@plane/ui"; +import { FilterHeader, FilterOption } from "components/issues"; import { useMember } from "hooks/store"; // components -import { FilterHeader, FilterOption } from "components/issues"; // ui -import { Loader, Avatar } from "@plane/ui"; type Props = { appliedFilters: string[] | null; @@ -24,8 +24,8 @@ export const FilterMentions: React.FC = observer((props: Props) => { const appliedFiltersCount = appliedFilters?.length ?? 0; - const filteredOptions = memberIds?.filter((memberId) => - getUserDetails(memberId)?.display_name.toLowerCase().includes(searchQuery.toLowerCase()) + const filteredOptions = memberIds?.filter( + (memberId) => getUserDetails(memberId)?.display_name.toLowerCase().includes(searchQuery.toLowerCase()) ); const handleViewToggle = () => { diff --git a/web/components/issues/issue-layouts/filters/header/filters/module.tsx b/web/components/issues/issue-layouts/filters/header/filters/module.tsx index 49e00f84d..812cf939f 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/module.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/module.tsx @@ -1,11 +1,11 @@ import React, { useState } from "react"; -import { observer } from "mobx-react"; import sortBy from "lodash/sortBy"; +import { observer } from "mobx-react"; // components +import { Loader, DiceIcon } from "@plane/ui"; import { FilterHeader, FilterOption } from "components/issues"; import { useApplication, useModule } from "hooks/store"; // ui -import { Loader, DiceIcon } from "@plane/ui"; type Props = { appliedFilters: string[] | null; diff --git a/web/components/issues/issue-layouts/filters/header/filters/project.tsx b/web/components/issues/issue-layouts/filters/header/filters/project.tsx index 61b7d50c1..3bdde6623 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/project.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/project.tsx @@ -1,13 +1,13 @@ import React, { useState } from "react"; import { observer } from "mobx-react"; // components +import { Loader } from "@plane/ui"; import { FilterHeader, FilterOption } from "components/issues"; // hooks +import { renderEmoji } from "helpers/emoji.helper"; import { useProject } from "hooks/store"; // ui -import { Loader } from "@plane/ui"; // helpers -import { renderEmoji } from "helpers/emoji.helper"; type Props = { appliedFilters: string[] | null; diff --git a/web/components/issues/issue-layouts/filters/header/filters/start-date.tsx b/web/components/issues/issue-layouts/filters/header/filters/start-date.tsx index 2cb715158..87def7e29 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/start-date.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/start-date.tsx @@ -2,8 +2,8 @@ import React, { useState } from "react"; import { observer } from "mobx-react-lite"; // components -import { FilterHeader, FilterOption } from "components/issues"; import { DateFilterModal } from "components/core"; +import { FilterHeader, FilterOption } from "components/issues"; // constants import { DATE_FILTER_OPTIONS } from "constants/filters"; diff --git a/web/components/issues/issue-layouts/filters/header/filters/state-group.tsx b/web/components/issues/issue-layouts/filters/header/filters/state-group.tsx index ea9097146..06c1aae9f 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/state-group.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/state-group.tsx @@ -2,9 +2,9 @@ import React, { useState } from "react"; import { observer } from "mobx-react-lite"; // components +import { StateGroupIcon } from "@plane/ui"; import { FilterHeader, FilterOption } from "components/issues"; // icons -import { StateGroupIcon } from "@plane/ui"; import { STATE_GROUPS } from "constants/state"; // constants diff --git a/web/components/issues/issue-layouts/filters/header/filters/state.tsx b/web/components/issues/issue-layouts/filters/header/filters/state.tsx index c13a69b0a..5dde1d279 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/state.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/state.tsx @@ -1,9 +1,9 @@ import React, { useState } from "react"; import { observer } from "mobx-react"; // components +import { Loader, StateGroupIcon } from "@plane/ui"; import { FilterHeader, FilterOption } from "components/issues"; // ui -import { Loader, StateGroupIcon } from "@plane/ui"; // types import { IState } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/filters/header/filters/target-date.tsx b/web/components/issues/issue-layouts/filters/header/filters/target-date.tsx index b168af668..9e0ce18a7 100644 --- a/web/components/issues/issue-layouts/filters/header/filters/target-date.tsx +++ b/web/components/issues/issue-layouts/filters/header/filters/target-date.tsx @@ -2,8 +2,8 @@ import React, { useState } from "react"; import { observer } from "mobx-react-lite"; // components -import { FilterHeader, FilterOption } from "components/issues"; import { DateFilterModal } from "components/core"; +import { FilterHeader, FilterOption } from "components/issues"; // constants import { DATE_FILTER_OPTIONS } from "constants/filters"; diff --git a/web/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx b/web/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx index 33b86ada1..0d00c3675 100644 --- a/web/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx +++ b/web/components/issues/issue-layouts/filters/header/helpers/dropdown.tsx @@ -1,11 +1,11 @@ import React, { Fragment, useState } from "react"; +import { Placement } from "@popperjs/core"; import { usePopper } from "react-popper"; import { Popover, Transition } from "@headlessui/react"; -import { Placement } from "@popperjs/core"; // ui +import { ChevronUp } from "lucide-react"; import { Button } from "@plane/ui"; // icons -import { ChevronUp } from "lucide-react"; type Props = { children: React.ReactNode; @@ -34,22 +34,26 @@ export const FiltersDropdown: React.FC = (props) => { return ( <> - {menuButton ? : } + {menuButton ? ( + + ) : ( + + )} { // router diff --git a/web/components/issues/issue-layouts/gantt/module-root.tsx b/web/components/issues/issue-layouts/gantt/module-root.tsx index c7c8e8b03..3311b6c6a 100644 --- a/web/components/issues/issue-layouts/gantt/module-root.tsx +++ b/web/components/issues/issue-layouts/gantt/module-root.tsx @@ -1,12 +1,12 @@ import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // hooks +import { EIssuesStoreType } from "constants/issue"; import { useIssues, useModule } from "hooks/store"; // components -import { BaseGanttRoot } from "./base-gantt-root"; -import { EIssuesStoreType } from "constants/issue"; -import { EIssueActions } from "../types"; import { TIssue } from "@plane/types"; +import { EIssueActions } from "../types"; +import { BaseGanttRoot } from "./base-gantt-root"; export const ModuleGanttLayout: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/gantt/project-root.tsx b/web/components/issues/issue-layouts/gantt/project-root.tsx index 18fd3ecef..1f9e560d3 100644 --- a/web/components/issues/issue-layouts/gantt/project-root.tsx +++ b/web/components/issues/issue-layouts/gantt/project-root.tsx @@ -1,13 +1,13 @@ import React from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { BaseGanttRoot } from "./base-gantt-root"; -import { EIssuesStoreType } from "constants/issue"; -import { EIssueActions } from "../types"; import { TIssue } from "@plane/types"; +import { EIssueActions } from "../types"; +import { BaseGanttRoot } from "./base-gantt-root"; export const GanttLayout: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/gantt/project-view-root.tsx b/web/components/issues/issue-layouts/gantt/project-view-root.tsx index 1ed02c2c9..cda2a1e53 100644 --- a/web/components/issues/issue-layouts/gantt/project-view-root.tsx +++ b/web/components/issues/issue-layouts/gantt/project-view-root.tsx @@ -1,14 +1,14 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components +import { TIssue } from "@plane/types"; +import { EIssueActions } from "../types"; import { BaseGanttRoot } from "./base-gantt-root"; // constants -import { EIssuesStoreType } from "constants/issue"; // types -import { EIssueActions } from "../types"; -import { TIssue } from "@plane/types"; export interface IViewGanttLayout { issueActions: { diff --git a/web/components/issues/issue-layouts/gantt/quick-add-issue-form.tsx b/web/components/issues/issue-layouts/gantt/quick-add-issue-form.tsx index 10b73ab35..94a6243e5 100644 --- a/web/components/issues/issue-layouts/gantt/quick-add-issue-form.tsx +++ b/web/components/issues/issue-layouts/gantt/quick-add-issue-form.tsx @@ -1,22 +1,21 @@ import { useEffect, useState, useRef, FC } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { useForm } from "react-hook-form"; -import { observer } from "mobx-react-lite"; import { PlusIcon } from "lucide-react"; // hooks +import { setPromiseToast } from "@plane/ui"; +import { cn } from "helpers/common.helper"; +import { renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { createIssuePayload } from "helpers/issue.helper"; import { useEventTracker, useProject } from "hooks/store"; import useKeypress from "hooks/use-keypress"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // helpers -import { renderFormattedPayloadDate } from "helpers/date-time.helper"; -import { createIssuePayload } from "helpers/issue.helper"; -import { cn } from "helpers/common.helper"; // ui -import { setPromiseToast } from "@plane/ui"; // types import { IProject, TIssue } from "@plane/types"; // constants -import { ISSUE_CREATED } from "constants/event-tracker"; interface IInputProps { formKey: string; diff --git a/web/components/issues/issue-layouts/kanban/base-kanban-root.tsx b/web/components/issues/issue-layouts/kanban/base-kanban-root.tsx index 3951e7032..775382f59 100644 --- a/web/components/issues/issue-layouts/kanban/base-kanban-root.tsx +++ b/web/components/issues/issue-layouts/kanban/base-kanban-root.tsx @@ -1,30 +1,29 @@ import { FC, useCallback, useRef, useState } from "react"; import { DragDropContext, DragStart, DraggableLocation, DropResult, Droppable } from "@hello-pangea/dnd"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { Spinner, TOAST_TYPE, setToast } from "@plane/ui"; +import { DeleteIssueModal } from "components/issues"; +import { ISSUE_DELETED } from "constants/event-tracker"; +import { EIssueFilterType, TCreateModalStoreTypes } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { useEventTracker, useUser } from "hooks/store"; // ui -import { Spinner, TOAST_TYPE, setToast } from "@plane/ui"; // types -import { TIssue } from "@plane/types"; -import { EIssueActions } from "../types"; -import { IQuickActionProps } from "../list/list-view-types"; +import { ICycleIssues, ICycleIssuesFilter } from "store/issue/cycle"; +import { IDraftIssues, IDraftIssuesFilter } from "store/issue/draft"; +import { IModuleIssues, IModuleIssuesFilter } from "store/issue/module"; +import { IProfileIssues, IProfileIssuesFilter } from "store/issue/profile"; import { IProjectIssues, IProjectIssuesFilter } from "store/issue/project"; +import { IProjectViewIssues, IProjectViewIssuesFilter } from "store/issue/project-views"; +import { TIssue } from "@plane/types"; +import { IQuickActionProps } from "../list/list-view-types"; +import { EIssueActions } from "../types"; //components import { KanBan } from "./default"; import { KanBanSwimLanes } from "./swimlanes"; -import { DeleteIssueModal } from "components/issues"; -import { EUserProjectRoles } from "constants/project"; -import { useIssues } from "hooks/store/use-issues"; import { handleDragDrop } from "./utils"; -import { ICycleIssues, ICycleIssuesFilter } from "store/issue/cycle"; -import { IDraftIssues, IDraftIssuesFilter } from "store/issue/draft"; -import { IProfileIssues, IProfileIssuesFilter } from "store/issue/profile"; -import { IModuleIssues, IModuleIssuesFilter } from "store/issue/module"; -import { IProjectViewIssues, IProjectViewIssuesFilter } from "store/issue/project-views"; -import { EIssueFilterType, TCreateModalStoreTypes } from "constants/issue"; -import { ISSUE_DELETED } from "constants/event-tracker"; export interface IBaseKanBanLayout { issues: IProjectIssues | ICycleIssues | IDraftIssues | IModuleIssues | IProjectViewIssues | IProfileIssues; @@ -227,15 +226,15 @@ export const BaseKanBanRoot: React.FC = observer((props: IBas const handleKanbanFilters = (toggle: "group_by" | "sub_group_by", value: string) => { if (workspaceSlug && projectId) { - let _kanbanFilters = issuesFilter?.issueFilters?.kanbanFilters?.[toggle] || []; - if (_kanbanFilters.includes(value)) _kanbanFilters = _kanbanFilters.filter((_value) => _value != value); - else _kanbanFilters.push(value); + let kanbanFilters = issuesFilter?.issueFilters?.kanbanFilters?.[toggle] || []; + if (kanbanFilters.includes(value)) kanbanFilters = kanbanFilters.filter((_value) => _value != value); + else kanbanFilters.push(value); issuesFilter.updateFilters( workspaceSlug.toString(), projectId.toString(), EIssueFilterType.KANBAN_FILTERS, { - [toggle]: _kanbanFilters, + [toggle]: kanbanFilters, }, viewId ); @@ -260,7 +259,7 @@ export const BaseKanBanRoot: React.FC = observer((props: IBas )}
@@ -288,7 +287,7 @@ export const BaseKanBanRoot: React.FC = observer((props: IBas
-
+
= memo((props) => { classNames="space-y-2 px-3 py-2" root={scrollableContainerRef} defaultHeight="100px" - horizonatlOffset={50} + horizontalOffset={50} alwaysRender={snapshot.isDragging} pauseHeightUpdateWhileRendering={isDragStarted} changingReference={issueIds} diff --git a/web/components/issues/issue-layouts/kanban/blocks-list.tsx b/web/components/issues/issue-layouts/kanban/blocks-list.tsx index 3746111e5..ff1c92873 100644 --- a/web/components/issues/issue-layouts/kanban/blocks-list.tsx +++ b/web/components/issues/issue-layouts/kanban/blocks-list.tsx @@ -1,9 +1,9 @@ import { MutableRefObject, memo } from "react"; //types +import { KanbanIssueBlock } from "components/issues"; import { TIssue, IIssueDisplayProperties, IIssueMap } from "@plane/types"; import { EIssueActions } from "../types"; // components -import { KanbanIssueBlock } from "components/issues"; interface IssueBlocksListProps { sub_group_id: string; diff --git a/web/components/issues/issue-layouts/kanban/default.tsx b/web/components/issues/issue-layouts/kanban/default.tsx index 3cbab589f..ece578058 100644 --- a/web/components/issues/issue-layouts/kanban/default.tsx +++ b/web/components/issues/issue-layouts/kanban/default.tsx @@ -1,4 +1,7 @@ +import { MutableRefObject } from "react"; import { observer } from "mobx-react-lite"; +// constants +import { TCreateModalStoreTypes } from "constants/issue"; // hooks import { useCycle, @@ -10,9 +13,6 @@ import { useProject, useProjectState, } from "hooks/store"; -// components -import { HeaderGroupByCard } from "./headers/group-by-card"; -import { KanbanGroup } from "./kanban-group"; // types import { GroupByColumnTypes, @@ -25,11 +25,12 @@ import { TUnGroupedIssues, TIssueKanbanFilters, } from "@plane/types"; -// constants +// parent components import { EIssueActions } from "../types"; import { getGroupByColumns } from "../utils"; -import { TCreateModalStoreTypes } from "constants/issue"; -import { MutableRefObject } from "react"; +// components +import { HeaderGroupByCard } from "./headers/group-by-card"; +import { KanbanGroup } from "./kanban-group"; export interface IGroupByKanBan { issuesMap: IIssueMap; @@ -89,11 +90,19 @@ const GroupByKanBan: React.FC = observer((props) => { const project = useProject(); const label = useLabel(); const cycle = useCycle(); - const _module = useModule(); + const moduleInfo = useModule(); const projectState = useProjectState(); const { peekIssue } = useIssueDetail(); - const list = getGroupByColumns(group_by as GroupByColumnTypes, project, cycle, _module, label, projectState, member); + const list = getGroupByColumns( + group_by as GroupByColumnTypes, + project, + cycle, + moduleInfo, + label, + projectState, + member + ); if (!list) return null; @@ -114,16 +123,19 @@ const GroupByKanBan: React.FC = observer((props) => { const isGroupByCreatedBy = group_by === "created_by"; return ( -
+
{groupList && groupList.length > 0 && groupList.map((_list: IGroupByColumn) => { const groupByVisibilityToggle = visibilityGroupBy(_list); return ( -
+
{sub_group_by === null && ( -
+
= observer((props) => {
diff --git a/web/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx b/web/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx index ea9464780..b0859a70d 100644 --- a/web/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx +++ b/web/components/issues/issue-layouts/kanban/headers/sub-group-by-card.tsx @@ -1,7 +1,7 @@ import React from "react"; +import { observer } from "mobx-react-lite"; import { Circle, ChevronDown, ChevronUp } from "lucide-react"; // mobx -import { observer } from "mobx-react-lite"; import { TIssueKanbanFilters } from "@plane/types"; interface IHeaderSubGroupByCard { diff --git a/web/components/issues/issue-layouts/kanban/kanban-group.tsx b/web/components/issues/issue-layouts/kanban/kanban-group.tsx index a05fb1791..9d7053216 100644 --- a/web/components/issues/issue-layouts/kanban/kanban-group.tsx +++ b/web/components/issues/issue-layouts/kanban/kanban-group.tsx @@ -3,7 +3,6 @@ import { Droppable } from "@hello-pangea/dnd"; // hooks import { useProjectState } from "hooks/store"; //components -import { KanbanIssueBlocksList, KanBanQuickAddIssueForm } from "."; //types import { TGroupedIssues, @@ -14,6 +13,7 @@ import { TUnGroupedIssues, } from "@plane/types"; import { EIssueActions } from "../types"; +import { KanbanIssueBlocksList, KanBanQuickAddIssueForm } from "."; interface IKanbanGroup { groupId: string; diff --git a/web/components/issues/issue-layouts/kanban/quick-add-issue-form.tsx b/web/components/issues/issue-layouts/kanban/quick-add-issue-form.tsx index 20f0cd8e0..71a0e661c 100644 --- a/web/components/issues/issue-layouts/kanban/quick-add-issue-form.tsx +++ b/web/components/issues/issue-layouts/kanban/quick-add-issue-form.tsx @@ -1,20 +1,20 @@ import { useEffect, useState, useRef } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { useForm } from "react-hook-form"; -import { observer } from "mobx-react-lite"; import { PlusIcon } from "lucide-react"; // hooks +import { setPromiseToast } from "@plane/ui"; +import { ISSUE_CREATED } from "constants/event-tracker"; +import { createIssuePayload } from "helpers/issue.helper"; import { useEventTracker, useProject } from "hooks/store"; import useKeypress from "hooks/use-keypress"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // helpers -import { createIssuePayload } from "helpers/issue.helper"; // ui -import { setPromiseToast } from "@plane/ui"; // types import { TIssue } from "@plane/types"; // constants -import { ISSUE_CREATED } from "constants/event-tracker"; const Inputs = (props: any) => { const { register, setFocus, projectDetail } = props; @@ -139,7 +139,7 @@ export const KanBanQuickAddIssueForm: React.FC = obser return ( <> {isOpen ? ( -
+
{ issueActions={issueActions} issues={issues} issuesFilter={issuesFilter} - showLoader={true} + showLoader QuickActions={CycleIssueQuickActions} viewId={cycleId?.toString() ?? ""} storeType={EIssuesStoreType.CYCLE} diff --git a/web/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx b/web/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx index 9152dbfe5..501734134 100644 --- a/web/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx +++ b/web/components/issues/issue-layouts/kanban/roots/draft-issue-root.tsx @@ -1,16 +1,16 @@ -import { useRouter } from "next/router"; +import { useMemo } from "react"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ProjectIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; // constants import { EIssueActions } from "../../types"; import { BaseKanBanRoot } from "../base-kanban-root"; -import { EIssuesStoreType } from "constants/issue"; -import { useMemo } from "react"; export interface IKanBanLayout {} @@ -42,7 +42,7 @@ export const DraftKanBanLayout: React.FC = observer(() => { issueActions={issueActions} issuesFilter={issuesFilter} issues={issues} - showLoader={true} + showLoader QuickActions={ProjectIssueQuickActions} /> ); diff --git a/web/components/issues/issue-layouts/kanban/roots/module-root.tsx b/web/components/issues/issue-layouts/kanban/roots/module-root.tsx index 07ad7eb83..96cfaceda 100644 --- a/web/components/issues/issue-layouts/kanban/roots/module-root.tsx +++ b/web/components/issues/issue-layouts/kanban/roots/module-root.tsx @@ -1,16 +1,16 @@ import React, { useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hook +import { ModuleIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ModuleIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; // constants import { EIssueActions } from "../../types"; import { BaseKanBanRoot } from "../base-kanban-root"; -import { EIssuesStoreType } from "constants/issue"; export interface IModuleKanBanLayout {} @@ -52,7 +52,7 @@ export const ModuleKanBanLayout: React.FC = observer(() => { issueActions={issueActions} issues={issues} issuesFilter={issuesFilter} - showLoader={true} + showLoader QuickActions={ModuleIssueQuickActions} viewId={moduleId?.toString()} storeType={EIssuesStoreType.MODULE} diff --git a/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx b/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx index c6c041654..99d703a72 100644 --- a/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx +++ b/web/components/issues/issue-layouts/kanban/roots/profile-issues-root.tsx @@ -1,17 +1,17 @@ -import { useRouter } from "next/router"; +import { useMemo } from "react"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { useIssues, useUser } from "hooks/store"; // components -import { ProjectIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; // constants import { EIssueActions } from "../../types"; import { BaseKanBanRoot } from "../base-kanban-root"; -import { EUserProjectRoles } from "constants/project"; -import { EIssuesStoreType } from "constants/issue"; -import { useMemo } from "react"; export const ProfileIssuesKanBanLayout: React.FC = observer(() => { const router = useRouter(); @@ -55,7 +55,7 @@ export const ProfileIssuesKanBanLayout: React.FC = observer(() => { issueActions={issueActions} issuesFilter={issuesFilter} issues={issues} - showLoader={true} + showLoader QuickActions={ProjectIssueQuickActions} storeType={EIssuesStoreType.PROFILE} canEditPropertiesBasedOnProject={canEditPropertiesBasedOnProject} diff --git a/web/components/issues/issue-layouts/kanban/roots/project-root.tsx b/web/components/issues/issue-layouts/kanban/roots/project-root.tsx index efd86bc8e..432663a02 100644 --- a/web/components/issues/issue-layouts/kanban/roots/project-root.tsx +++ b/web/components/issues/issue-layouts/kanban/roots/project-root.tsx @@ -1,16 +1,16 @@ -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import { useMemo } from "react"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // mobx store +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store/use-issues"; // components -import { ProjectIssueQuickActions } from "components/issues"; -import { BaseKanBanRoot } from "../base-kanban-root"; // types import { TIssue } from "@plane/types"; // constants import { EIssueActions } from "../../types"; -import { EIssuesStoreType } from "constants/issue"; +import { BaseKanBanRoot } from "../base-kanban-root"; export interface IKanBanLayout {} @@ -46,7 +46,7 @@ export const KanBanLayout: React.FC = observer(() => { issueActions={issueActions} issues={issues} issuesFilter={issuesFilter} - showLoader={true} + showLoader QuickActions={ProjectIssueQuickActions} storeType={EIssuesStoreType.PROJECT} /> diff --git a/web/components/issues/issue-layouts/kanban/roots/project-view-root.tsx b/web/components/issues/issue-layouts/kanban/roots/project-view-root.tsx index 8dd33b728..77689e563 100644 --- a/web/components/issues/issue-layouts/kanban/roots/project-view-root.tsx +++ b/web/components/issues/issue-layouts/kanban/roots/project-view-root.tsx @@ -2,15 +2,15 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // hooks +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // constant -import { EIssuesStoreType } from "constants/issue"; // types import { TIssue } from "@plane/types"; +import { ProjectIssueQuickActions } from "../../quick-action-dropdowns"; import { EIssueActions } from "../../types"; // components import { BaseKanBanRoot } from "../base-kanban-root"; -import { ProjectIssueQuickActions } from "../../quick-action-dropdowns"; export interface IViewKanBanLayout { issueActions: { @@ -34,7 +34,7 @@ export const ProjectViewKanBanLayout: React.FC = observer((pr issueActions={issueActions} issuesFilter={issuesFilter} issues={issues} - showLoader={true} + showLoader QuickActions={ProjectIssueQuickActions} storeType={EIssuesStoreType.PROJECT_VIEW} viewId={viewId?.toString()} diff --git a/web/components/issues/issue-layouts/kanban/swimlanes.tsx b/web/components/issues/issue-layouts/kanban/swimlanes.tsx index d60e3b618..75cb830c6 100644 --- a/web/components/issues/issue-layouts/kanban/swimlanes.tsx +++ b/web/components/issues/issue-layouts/kanban/swimlanes.tsx @@ -1,10 +1,8 @@ import { MutableRefObject } from "react"; import { observer } from "mobx-react-lite"; // components -import { KanBan } from "./default"; -import { HeaderSubGroupByCard } from "./headers/sub-group-by-card"; -import { HeaderGroupByCard } from "./headers/group-by-card"; -// types +import { TCreateModalStoreTypes } from "constants/issue"; +import { useCycle, useLabel, useMember, useModule, useProject, useProjectState } from "hooks/store"; import { GroupByColumnTypes, IGroupByColumn, @@ -16,11 +14,13 @@ import { TUnGroupedIssues, TIssueKanbanFilters, } from "@plane/types"; -// constants import { EIssueActions } from "../types"; -import { useCycle, useLabel, useMember, useModule, useProject, useProjectState } from "hooks/store"; import { getGroupByColumns } from "../utils"; -import { TCreateModalStoreTypes } from "constants/issue"; +import { KanBan } from "./default"; +import { HeaderGroupByCard } from "./headers/group-by-card"; +import { HeaderSubGroupByCard } from "./headers/sub-group-by-card"; +// types +// constants interface ISubGroupSwimlaneHeader { issueIds: TGroupedIssues | TSubGroupedIssues | TUnGroupedIssues; @@ -47,7 +47,7 @@ const SubGroupSwimlaneHeader: React.FC = ({ kanbanFilters, handleKanbanFilters, }) => ( -
+
{list && list.length > 0 && list.map((_list: IGroupByColumn) => ( @@ -129,7 +129,7 @@ const SubGroupSwimlane: React.FC = observer((props) => { {list && list.length > 0 && list.map((_list: any) => ( -
+
= observer((props) => { const project = useProject(); const label = useLabel(); const cycle = useCycle(); - const _module = useModule(); + const projectModule = useModule(); const projectState = useProjectState(); const groupByList = getGroupByColumns( group_by as GroupByColumnTypes, project, cycle, - _module, + projectModule, label, projectState, member @@ -243,7 +243,7 @@ export const KanBanSwimLanes: React.FC = observer((props) => { sub_group_by as GroupByColumnTypes, project, cycle, - _module, + projectModule, label, projectState, member diff --git a/web/components/issues/issue-layouts/list/base-list-root.tsx b/web/components/issues/issue-layouts/list/base-list-root.tsx index ffe9de661..8a3d87e40 100644 --- a/web/components/issues/issue-layouts/list/base-list-root.tsx +++ b/web/components/issues/issue-layouts/list/base-list-root.tsx @@ -1,23 +1,23 @@ -import { List } from "./default"; import { FC, useCallback } from "react"; import { observer } from "mobx-react-lite"; // types -import { TIssue } from "@plane/types"; -import { IProjectIssues, IProjectIssuesFilter } from "store/issue/project"; +import { TCreateModalStoreTypes } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { useIssues, useUser } from "hooks/store"; +import { IArchivedIssuesFilter, IArchivedIssues } from "store/issue/archived"; import { ICycleIssues, ICycleIssuesFilter } from "store/issue/cycle"; +import { IDraftIssuesFilter, IDraftIssues } from "store/issue/draft"; import { IModuleIssues, IModuleIssuesFilter } from "store/issue/module"; import { IProfileIssues, IProfileIssuesFilter } from "store/issue/profile"; +import { IProjectIssues, IProjectIssuesFilter } from "store/issue/project"; import { IProjectViewIssues, IProjectViewIssuesFilter } from "store/issue/project-views"; -import { IDraftIssuesFilter, IDraftIssues } from "store/issue/draft"; -import { IArchivedIssuesFilter, IArchivedIssues } from "store/issue/archived"; +import { TIssue } from "@plane/types"; import { EIssueActions } from "../types"; // components +import { List } from "./default"; import { IQuickActionProps } from "./list-view-types"; // constants -import { EUserProjectRoles } from "constants/project"; -import { TCreateModalStoreTypes } from "constants/issue"; // hooks -import { useIssues, useUser } from "hooks/store"; interface IBaseListRoot { issuesFilter: diff --git a/web/components/issues/issue-layouts/list/block.tsx b/web/components/issues/issue-layouts/list/block.tsx index 90fee10cc..a2148634c 100644 --- a/web/components/issues/issue-layouts/list/block.tsx +++ b/web/components/issues/issue-layouts/list/block.tsx @@ -1,14 +1,14 @@ import { observer } from "mobx-react-lite"; // components -import { IssueProperties } from "../properties/all-properties"; // hooks -import { useApplication, useIssueDetail, useProject } from "hooks/store"; // ui import { Spinner, Tooltip, ControlLink } from "@plane/ui"; // helper import { cn } from "helpers/common.helper"; +import { useApplication, useIssueDetail, useProject } from "hooks/store"; // types import { TIssue, IIssueDisplayProperties, TIssueMap } from "@plane/types"; +import { IssueProperties } from "../properties/all-properties"; import { EIssueActions } from "../types"; interface IssueBlockProps { diff --git a/web/components/issues/issue-layouts/list/blocks-list.tsx b/web/components/issues/issue-layouts/list/blocks-list.tsx index d3c8d1406..23c364b67 100644 --- a/web/components/issues/issue-layouts/list/blocks-list.tsx +++ b/web/components/issues/issue-layouts/list/blocks-list.tsx @@ -1,10 +1,10 @@ import { FC, MutableRefObject } from "react"; // components +import RenderIfVisible from "components/core/render-if-visible-HOC"; import { IssueBlock } from "components/issues"; // types import { TGroupedIssues, TIssue, IIssueDisplayProperties, TIssueMap, TUnGroupedIssues } from "@plane/types"; import { EIssueActions } from "../types"; -import RenderIfVisible from "components/core/render-if-visible-HOC"; interface Props { issueIds: TGroupedIssues | TUnGroupedIssues | any; diff --git a/web/components/issues/issue-layouts/list/default.tsx b/web/components/issues/issue-layouts/list/default.tsx index c6f82c2be..db1bcb06a 100644 --- a/web/components/issues/issue-layouts/list/default.tsx +++ b/web/components/issues/issue-layouts/list/default.tsx @@ -1,9 +1,10 @@ import { useRef } from "react"; // components import { IssueBlocksList, ListQuickAddIssueForm } from "components/issues"; -import { HeaderGroupByCard } from "./headers/group-by-card"; // hooks +import { TCreateModalStoreTypes } from "constants/issue"; import { useCycle, useLabel, useMember, useModule, useProject, useProjectState } from "hooks/store"; +// constants // types import { GroupByColumnTypes, @@ -15,9 +16,8 @@ import { IGroupByColumn, } from "@plane/types"; import { EIssueActions } from "../types"; -// constants -import { TCreateModalStoreTypes } from "constants/issue"; import { getGroupByColumns } from "../utils"; +import { HeaderGroupByCard } from "./headers/group-by-card"; export interface IGroupByList { issueIds: TGroupedIssues | TUnGroupedIssues | any; @@ -66,7 +66,7 @@ const GroupByList: React.FC = (props) => { const label = useLabel(); const projectState = useProjectState(); const cycle = useCycle(); - const _module = useModule(); + const projectModule = useModule(); const containerRef = useRef(null); @@ -74,7 +74,7 @@ const GroupByList: React.FC = (props) => { group_by as GroupByColumnTypes, project, cycle, - _module, + projectModule, label, projectState, member, @@ -119,7 +119,7 @@ const GroupByList: React.FC = (props) => { const isGroupByCreatedBy = group_by === "created_by"; return ( -
+
{groups && groups.length > 0 && groups.map( diff --git a/web/components/issues/issue-layouts/list/headers/group-by-card.tsx b/web/components/issues/issue-layouts/list/headers/group-by-card.tsx index 404107af4..7edf89bf1 100644 --- a/web/components/issues/issue-layouts/list/headers/group-by-card.tsx +++ b/web/components/issues/issue-layouts/list/headers/group-by-card.tsx @@ -1,19 +1,19 @@ +import { useState } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // lucide icons import { CircleDashed, Plus } from "lucide-react"; // components -import { CreateUpdateIssueModal } from "components/issues"; -import { ExistingIssuesListModal } from "components/core"; -// ui import { CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; +import { ExistingIssuesListModal } from "components/core"; +import { CreateUpdateIssueModal } from "components/issues"; +// ui // mobx -import { observer } from "mobx-react-lite"; // hooks +import { TCreateModalStoreTypes } from "constants/issue"; import { useEventTracker } from "hooks/store"; // types import { TIssue, ISearchIssueResponse } from "@plane/types"; -import { useState } from "react"; -import { TCreateModalStoreTypes } from "constants/issue"; interface IHeaderGroupByCard { icon?: React.ReactNode; diff --git a/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx b/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx index 3c71293b4..7bae7ecff 100644 --- a/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx +++ b/web/components/issues/issue-layouts/list/quick-add-issue-form.tsx @@ -1,20 +1,20 @@ -import { FC, useEffect, useState, useRef, use } from "react"; +import { FC, useEffect, useState, useRef } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { useForm } from "react-hook-form"; import { PlusIcon } from "lucide-react"; -import { observer } from "mobx-react-lite"; // hooks +import { setPromiseToast } from "@plane/ui"; +import { ISSUE_CREATED } from "constants/event-tracker"; +import { createIssuePayload } from "helpers/issue.helper"; import { useEventTracker, useProject } from "hooks/store"; import useKeypress from "hooks/use-keypress"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // ui -import { setPromiseToast } from "@plane/ui"; // types import { TIssue, IProject } from "@plane/types"; // helper -import { createIssuePayload } from "helpers/issue.helper"; // constants -import { ISSUE_CREATED } from "constants/event-tracker"; interface IInputProps { formKey: string; diff --git a/web/components/issues/issue-layouts/list/roots/archived-issue-root.tsx b/web/components/issues/issue-layouts/list/roots/archived-issue-root.tsx index 6e70d00d0..2f3807beb 100644 --- a/web/components/issues/issue-layouts/list/roots/archived-issue-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/archived-issue-root.tsx @@ -1,16 +1,16 @@ import { FC, useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ArchivedIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ArchivedIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; // constants -import { BaseListRoot } from "../base-list-root"; import { EIssueActions } from "../../types"; -import { EIssuesStoreType } from "constants/issue"; +import { BaseListRoot } from "../base-list-root"; export const ArchivedIssueListLayout: FC = observer(() => { const router = useRouter(); diff --git a/web/components/issues/issue-layouts/list/roots/cycle-root.tsx b/web/components/issues/issue-layouts/list/roots/cycle-root.tsx index 5c15ebe60..46ee7f32e 100644 --- a/web/components/issues/issue-layouts/list/roots/cycle-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/cycle-root.tsx @@ -1,16 +1,16 @@ import React, { useCallback, useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { CycleIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useCycle, useIssues } from "hooks/store"; // components -import { CycleIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; // constants -import { BaseListRoot } from "../base-list-root"; import { EIssueActions } from "../../types"; -import { EIssuesStoreType } from "constants/issue"; +import { BaseListRoot } from "../base-list-root"; export interface ICycleListLayout {} diff --git a/web/components/issues/issue-layouts/list/roots/draft-issue-root.tsx b/web/components/issues/issue-layouts/list/roots/draft-issue-root.tsx index e11971874..10b75b115 100644 --- a/web/components/issues/issue-layouts/list/roots/draft-issue-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/draft-issue-root.tsx @@ -1,16 +1,16 @@ import { FC, useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ProjectIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../../types"; // constants import { BaseListRoot } from "../base-list-root"; -import { EIssuesStoreType } from "constants/issue"; export const DraftIssueListLayout: FC = observer(() => { const router = useRouter(); diff --git a/web/components/issues/issue-layouts/list/roots/module-root.tsx b/web/components/issues/issue-layouts/list/roots/module-root.tsx index 95c62d34c..aca528a6a 100644 --- a/web/components/issues/issue-layouts/list/roots/module-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/module-root.tsx @@ -1,16 +1,16 @@ import React, { useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // mobx store +import { ModuleIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ModuleIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../../types"; // constants import { BaseListRoot } from "../base-list-root"; -import { EIssuesStoreType } from "constants/issue"; export interface IModuleListLayout {} diff --git a/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx b/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx index fa4a05bbc..dc0c68cd8 100644 --- a/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/profile-issues-root.tsx @@ -1,17 +1,17 @@ import { FC, useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { useIssues, useUser } from "hooks/store"; // components -import { ProjectIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../../types"; // constants import { BaseListRoot } from "../base-list-root"; -import { EUserProjectRoles } from "constants/project"; -import { EIssuesStoreType } from "constants/issue"; export const ProfileIssuesListLayout: FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/list/roots/project-root.tsx b/web/components/issues/issue-layouts/list/roots/project-root.tsx index 9e1b5830b..8a0935979 100644 --- a/web/components/issues/issue-layouts/list/roots/project-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/project-root.tsx @@ -1,16 +1,16 @@ import { FC, useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ProjectIssueQuickActions } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { ProjectIssueQuickActions } from "components/issues"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../../types"; // constants import { BaseListRoot } from "../base-list-root"; -import { EIssuesStoreType } from "constants/issue"; export const ListLayout: FC = observer(() => { const router = useRouter(); diff --git a/web/components/issues/issue-layouts/list/roots/project-view-root.tsx b/web/components/issues/issue-layouts/list/roots/project-view-root.tsx index 5ecfd6da2..82ca03d42 100644 --- a/web/components/issues/issue-layouts/list/roots/project-view-root.tsx +++ b/web/components/issues/issue-layouts/list/roots/project-view-root.tsx @@ -2,15 +2,15 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // store +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // constants -import { EIssuesStoreType } from "constants/issue"; // types -import { EIssueActions } from "../../types"; import { TIssue } from "@plane/types"; +import { ProjectIssueQuickActions } from "../../quick-action-dropdowns"; +import { EIssueActions } from "../../types"; // components import { BaseListRoot } from "../base-list-root"; -import { ProjectIssueQuickActions } from "../../quick-action-dropdowns"; export interface IViewListLayout { issueActions: { diff --git a/web/components/issues/issue-layouts/properties/all-properties.tsx b/web/components/issues/issue-layouts/properties/all-properties.tsx index 238d2e744..8b3e2e673 100644 --- a/web/components/issues/issue-layouts/properties/all-properties.tsx +++ b/web/components/issues/issue-layouts/properties/all-properties.tsx @@ -1,14 +1,10 @@ import { useCallback, useMemo } from "react"; +import xor from "lodash/xor"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { CalendarCheck2, CalendarClock, Layers, Link, Paperclip } from "lucide-react"; -import xor from "lodash/xor"; // hooks -import { useEventTracker, useEstimate, useLabel, useIssues, useProjectState } from "hooks/store"; -// components -import { IssuePropertyLabels } from "../properties/labels"; import { Tooltip } from "@plane/ui"; -import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; import { DateDropdown, EstimateDropdown, @@ -18,15 +14,19 @@ import { CycleDropdown, StateDropdown, } from "components/dropdowns"; -// helpers -import { renderFormattedPayloadDate } from "helpers/date-time.helper"; -import { shouldHighlightIssueDueDate } from "helpers/issue.helper"; -import { cn } from "helpers/common.helper"; -// types -import { TIssue, IIssueDisplayProperties, TIssuePriorities } from "@plane/types"; -// constants import { ISSUE_UPDATED } from "constants/event-tracker"; import { EIssuesStoreType } from "constants/issue"; +import { cn } from "helpers/common.helper"; +import { renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { shouldHighlightIssueDueDate } from "helpers/issue.helper"; +import { useEventTracker, useEstimate, useLabel, useIssues, useProjectState } from "hooks/store"; +// components +import { TIssue, IIssueDisplayProperties, TIssuePriorities } from "@plane/types"; +import { IssuePropertyLabels } from "../properties/labels"; +import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; +// helpers +// types +// constants export interface IIssueProperties { issue: TIssue; @@ -338,7 +338,7 @@ export const IssueProperties: React.FC = observer((props) => { disabled={isReadOnly} multiple buttonVariant="border-with-text" - showCount={true} + showCount showTooltip />
diff --git a/web/components/issues/issue-layouts/properties/labels.tsx b/web/components/issues/issue-layouts/properties/labels.tsx index 0c1091d39..a57c60d6f 100644 --- a/web/components/issues/issue-layouts/properties/labels.tsx +++ b/web/components/issues/issue-layouts/properties/labels.tsx @@ -1,16 +1,16 @@ import { Fragment, useEffect, useRef, useState } from "react"; +import { Placement } from "@popperjs/core"; import { observer } from "mobx-react-lite"; import { usePopper } from "react-popper"; +import { Combobox } from "@headlessui/react"; import { Check, ChevronDown, Search, Tags } from "lucide-react"; // hooks +import { Tooltip } from "@plane/ui"; import { useApplication, useLabel } from "hooks/store"; import { useDropdownKeyDown } from "hooks/use-dropdown-key-down"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; // components -import { Combobox } from "@headlessui/react"; -import { Tooltip } from "@plane/ui"; // types -import { Placement } from "@popperjs/core"; import { IIssueLabel } from "@plane/types"; export interface IIssuePropertyLabels { @@ -56,7 +56,7 @@ export const IssuePropertyLabels: React.FC = observer((pro // popper-js refs const [referenceElement, setReferenceElement] = useState(null); const [popperElement, setPopperElement] = useState(null); - const [isLoading, setIsLoading] = useState(false); + const [isLoading, setIsLoading] = useState(false); // store hooks const { router: { workspaceSlug }, @@ -149,7 +149,7 @@ export const IssuePropertyLabels: React.FC = observer((pro {projectLabels ?.filter((l) => value.includes(l?.id)) .map((label) => ( - +
= observer((props) => { const { diff --git a/web/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx b/web/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx index a30db3a82..dae88a387 100644 --- a/web/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx +++ b/web/components/issues/issue-layouts/quick-action-dropdowns/archived-issue.tsx @@ -2,17 +2,19 @@ import { useState } from "react"; import { useRouter } from "next/router"; import { ExternalLink, Link, RotateCcw, Trash2 } from "lucide-react"; // hooks -import { useEventTracker, useIssues, useUser } from "hooks/store"; -// ui import { CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; -// components + import { DeleteIssueModal } from "components/issues"; -// helpers +// ui +// components +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { copyUrlToClipboard } from "helpers/string.helper"; +import { useEventTracker, useIssues, useUser } from "hooks/store"; +// components +// helpers // types import { IQuickActionProps } from "../list/list-view-types"; -import { EUserProjectRoles } from "constants/project"; -import { EIssuesStoreType } from "constants/issue"; export const ArchivedIssueQuickActions: React.FC = (props) => { const { issue, handleDelete, handleRestore, customActionButton, portalElement, readOnly = false } = props; diff --git a/web/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx b/web/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx index 2b4a5fa05..89beda00c 100644 --- a/web/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx +++ b/web/components/issues/issue-layouts/quick-action-dropdowns/cycle-issue.tsx @@ -1,24 +1,25 @@ import { useState } from "react"; -import { useRouter } from "next/router"; import omit from "lodash/omit"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // hooks -import { useEventTracker, useIssues, useProjectState, useUser } from "hooks/store"; // ui +import { Copy, ExternalLink, Link, Pencil, Trash2, XCircle } from "lucide-react"; import { ArchiveIcon, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; // icons -import { Copy, ExternalLink, Link, Pencil, Trash2, XCircle } from "lucide-react"; // components import { ArchiveIssueModal, CreateUpdateIssueModal, DeleteIssueModal } from "components/issues"; -// helpers +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { STATE_GROUPS } from "constants/state"; import { copyUrlToClipboard } from "helpers/string.helper"; +import { useEventTracker, useIssues, useProjectState, useUser } from "hooks/store"; +// components +// helpers // types import { TIssue } from "@plane/types"; import { IQuickActionProps } from "../list/list-view-types"; // constants -import { EIssuesStoreType } from "constants/issue"; -import { EUserProjectRoles } from "constants/project"; -import { STATE_GROUPS } from "constants/state"; export const CycleIssueQuickActions: React.FC = observer((props) => { const { diff --git a/web/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx b/web/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx index cf090385d..26eb6997c 100644 --- a/web/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx +++ b/web/components/issues/issue-layouts/quick-action-dropdowns/module-issue.tsx @@ -1,23 +1,24 @@ import { useState } from "react"; -import { useRouter } from "next/router"; import omit from "lodash/omit"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // hooks -import { useIssues, useEventTracker, useUser, useProjectState } from "hooks/store"; // ui -import { ArchiveIcon, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; import { Copy, ExternalLink, Link, Pencil, Trash2, XCircle } from "lucide-react"; +import { ArchiveIcon, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; // components import { ArchiveIssueModal, CreateUpdateIssueModal, DeleteIssueModal } from "components/issues"; -// helpers +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { STATE_GROUPS } from "constants/state"; import { copyUrlToClipboard } from "helpers/string.helper"; +import { useIssues, useEventTracker, useUser, useProjectState } from "hooks/store"; +// components +// helpers // types import { TIssue } from "@plane/types"; import { IQuickActionProps } from "../list/list-view-types"; // constants -import { EIssuesStoreType } from "constants/issue"; -import { EUserProjectRoles } from "constants/project"; -import { STATE_GROUPS } from "constants/state"; export const ModuleIssueQuickActions: React.FC = observer((props) => { const { diff --git a/web/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx b/web/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx index 7afbd2421..33b73f88c 100644 --- a/web/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx +++ b/web/components/issues/issue-layouts/quick-action-dropdowns/project-issue.tsx @@ -1,23 +1,23 @@ import { useState } from "react"; -import { useRouter } from "next/router"; import omit from "lodash/omit"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // hooks +import { Copy, ExternalLink, Link, Pencil, Trash2 } from "lucide-react"; +import { ArchiveIcon, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; +import { ArchiveIssueModal, CreateUpdateIssueModal, DeleteIssueModal } from "components/issues"; +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { STATE_GROUPS } from "constants/state"; +import { copyUrlToClipboard } from "helpers/string.helper"; import { useEventTracker, useIssues, useProjectState, useUser } from "hooks/store"; // ui -import { ArchiveIcon, CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; -import { Copy, ExternalLink, Link, Pencil, Trash2 } from "lucide-react"; // components -import { ArchiveIssueModal, CreateUpdateIssueModal, DeleteIssueModal } from "components/issues"; // helpers -import { copyUrlToClipboard } from "helpers/string.helper"; // types import { TIssue } from "@plane/types"; import { IQuickActionProps } from "../list/list-view-types"; // constant -import { EUserProjectRoles } from "constants/project"; -import { EIssuesStoreType } from "constants/issue"; -import { STATE_GROUPS } from "constants/state"; export const ProjectIssueQuickActions: React.FC = observer((props) => { const { diff --git a/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx b/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx index 3b098c8a1..84101542f 100644 --- a/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/all-issue-layout-root.tsx @@ -1,31 +1,31 @@ import React, { Fragment, useCallback, useMemo } from "react"; -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; -import useSWR from "swr"; import isEmpty from "lodash/isEmpty"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import useSWR from "swr"; // hooks -import { useApplication, useEventTracker, useGlobalView, useIssues, useProject, useUser } from "hooks/store"; -import { useWorkspaceIssueProperties } from "hooks/use-workspace-issue-properties"; -// components +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; import { GlobalViewsAppliedFiltersRoot, IssuePeekOverview } from "components/issues"; import { SpreadsheetView } from "components/issues/issue-layouts"; import { AllIssueQuickActions } from "components/issues/issue-layouts/quick-action-dropdowns"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; import { SpreadsheetLayoutLoader } from "components/ui"; +import { ALL_ISSUES_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { EUserWorkspaceRoles } from "constants/workspace"; +import { useApplication, useEventTracker, useGlobalView, useIssues, useProject, useUser } from "hooks/store"; +import { useWorkspaceIssueProperties } from "hooks/use-workspace-issue-properties"; +// components // types import { TIssue, IIssueDisplayFilterOptions } from "@plane/types"; import { EIssueActions } from "../types"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; -import { EUserWorkspaceRoles } from "constants/workspace"; -import { ALL_ISSUES_EMPTY_STATE_DETAILS } from "constants/empty-state"; export const AllIssueLayoutRoot: React.FC = observer(() => { // router const router = useRouter(); - const { workspaceSlug, globalViewId } = router.query; + const { workspaceSlug, globalViewId, ...routeFilters } = router.query; // theme const { resolvedTheme } = useTheme(); //swr hook for fetching issue properties @@ -61,14 +61,10 @@ export const AllIssueLayoutRoot: React.FC = observer(() => { globalViewId && ["all-issues", "assigned", "created", "subscribed"].includes(globalViewId.toString()) ) { - const routerQueryParams = { ...router.query }; - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { ["workspaceSlug"]: _workspaceSlug, ["globalViewId"]: _globalViewId, ...filters } = routerQueryParams; - let issueFilters: any = {}; - Object.keys(filters).forEach((key) => { + Object.keys(routeFilters).forEach((key) => { const filterKey: any = key; - const filterValue = filters[key]?.toString() || undefined; + const filterValue = routeFilters[key]?.toString() || undefined; if ( ISSUE_DISPLAY_FILTERS_BY_LAYOUT.my_issues.spreadsheet.filters.includes(filterKey) && filterKey && @@ -77,7 +73,7 @@ export const AllIssueLayoutRoot: React.FC = observer(() => { issueFilters = { ...issueFilters, [filterKey]: filterValue.split(",") }; }); - if (!isEmpty(filters)) + if (!isEmpty(routeFilters)) updateFilters( workspaceSlug.toString(), undefined, diff --git a/web/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx b/web/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx index 7db9a1e3b..ae8ca400a 100644 --- a/web/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/archived-issue-layout-root.tsx @@ -1,9 +1,8 @@ import React, { Fragment } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; // mobx store -import { useIssues } from "hooks/store"; // components import { ArchivedIssueListLayout, @@ -11,9 +10,10 @@ import { ProjectArchivedEmptyState, IssuePeekOverview, } from "components/issues"; +import { ListLayoutLoader } from "components/ui"; import { EIssuesStoreType } from "constants/issue"; // ui -import { ListLayoutLoader } from "components/ui"; +import { useIssues } from "hooks/store"; export const ArchivedIssueLayoutRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/roots/cycle-layout-root.tsx b/web/components/issues/issue-layouts/roots/cycle-layout-root.tsx index 759495284..5f308fbd1 100644 --- a/web/components/issues/issue-layouts/roots/cycle-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/cycle-layout-root.tsx @@ -1,12 +1,12 @@ import React, { Fragment, useState } from "react"; -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; -import useSWR from "swr"; -import size from "lodash/size"; import isEmpty from "lodash/isEmpty"; +import size from "lodash/size"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; +import useSWR from "swr"; // hooks -import { useCycle, useIssues } from "hooks/store"; // components +import { TransferIssues, TransferIssuesModal } from "components/cycles"; import { CycleAppliedFiltersRoot, CycleCalendarLayout, @@ -17,10 +17,10 @@ import { CycleSpreadsheetLayout, IssuePeekOverview, } from "components/issues"; -import { TransferIssues, TransferIssuesModal } from "components/cycles"; import { ActiveLoader } from "components/ui"; // constants import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; +import { useCycle, useIssues } from "hooks/store"; // types import { IIssueFilterOptions } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx b/web/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx index 02b666ceb..1a1602ad1 100644 --- a/web/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/draft-issue-layout-root.tsx @@ -1,19 +1,19 @@ import React from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; // hooks -import { useIssues } from "hooks/store"; -// components -import { DraftIssueAppliedFiltersRoot } from "../filters/applied-filters/roots/draft-issue"; -import { DraftIssueListLayout } from "../list/roots/draft-issue-root"; -import { ProjectDraftEmptyState } from "../empty-states"; import { IssuePeekOverview } from "components/issues/peek-overview"; import { ActiveLoader } from "components/ui"; -// ui -import { DraftKanBanLayout } from "../kanban/roots/draft-issue-root"; -// constants import { EIssuesStoreType } from "constants/issue"; +import { useIssues } from "hooks/store"; +// components +import { ProjectDraftEmptyState } from "../empty-states"; +import { DraftIssueAppliedFiltersRoot } from "../filters/applied-filters/roots/draft-issue"; +import { DraftKanBanLayout } from "../kanban/roots/draft-issue-root"; +import { DraftIssueListLayout } from "../list/roots/draft-issue-root"; +// ui +// constants export const DraftIssueLayoutRoot: React.FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/roots/module-layout-root.tsx b/web/components/issues/issue-layouts/roots/module-layout-root.tsx index 14505c65a..0c6ba3b66 100644 --- a/web/components/issues/issue-layouts/roots/module-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/module-layout-root.tsx @@ -1,10 +1,9 @@ import React, { Fragment } from "react"; -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; -import useSWR from "swr"; import size from "lodash/size"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; +import useSWR from "swr"; // mobx store -import { useIssues } from "hooks/store"; // components import { IssuePeekOverview, @@ -19,6 +18,7 @@ import { import { ActiveLoader } from "components/ui"; // constants import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; +import { useIssues } from "hooks/store"; // types import { IIssueFilterOptions } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/roots/project-layout-root.tsx b/web/components/issues/issue-layouts/roots/project-layout-root.tsx index cae73610e..a57d73b2c 100644 --- a/web/components/issues/issue-layouts/roots/project-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/project-layout-root.tsx @@ -1,8 +1,10 @@ import { FC, Fragment } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; // components +// ui +import { Spinner } from "@plane/ui"; import { ListLayout, CalendarLayout, @@ -13,14 +15,12 @@ import { ProjectEmptyState, IssuePeekOverview, } from "components/issues"; -// ui -import { Spinner } from "@plane/ui"; // hooks -import { useIssues } from "hooks/store"; // helpers import { ActiveLoader } from "components/ui"; // constants import { EIssuesStoreType } from "constants/issue"; +import { useIssues } from "hooks/store"; export const ProjectLayoutRoot: FC = observer(() => { // router diff --git a/web/components/issues/issue-layouts/roots/project-view-layout-root.tsx b/web/components/issues/issue-layouts/roots/project-view-layout-root.tsx index fa942b7f6..dbd6c5f96 100644 --- a/web/components/issues/issue-layouts/roots/project-view-layout-root.tsx +++ b/web/components/issues/issue-layouts/roots/project-view-layout-root.tsx @@ -1,9 +1,8 @@ import React, { Fragment, useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; // mobx store -import { useIssues } from "hooks/store"; // components import { IssuePeekOverview, @@ -18,6 +17,7 @@ import { import { ActiveLoader } from "components/ui"; // constants import { EIssuesStoreType } from "constants/issue"; +import { useIssues } from "hooks/store"; // types import { TIssue } from "@plane/types"; import { EIssueActions } from "../types"; diff --git a/web/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx b/web/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx index 2f09b55d6..5a522a527 100644 --- a/web/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/base-spreadsheet-root.tsx @@ -1,21 +1,21 @@ import { FC, useCallback } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { EIssueFilterType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; import { useUser } from "hooks/store"; // views -import { SpreadsheetView } from "./spreadsheet-view"; // types -import { TIssue, IIssueDisplayFilterOptions, TUnGroupedIssues } from "@plane/types"; -import { EIssueActions } from "../types"; -import { IQuickActionProps } from "../list/list-view-types"; // constants -import { EUserProjectRoles } from "constants/project"; import { ICycleIssuesFilter, ICycleIssues } from "store/issue/cycle"; import { IModuleIssuesFilter, IModuleIssues } from "store/issue/module"; import { IProjectIssuesFilter, IProjectIssues } from "store/issue/project"; import { IProjectViewIssuesFilter, IProjectViewIssues } from "store/issue/project-views"; -import { EIssueFilterType } from "constants/issue"; +import { TIssue, IIssueDisplayFilterOptions, TUnGroupedIssues } from "@plane/types"; +import { IQuickActionProps } from "../list/list-view-types"; +import { EIssueActions } from "../types"; +import { SpreadsheetView } from "./spreadsheet-view"; interface IBaseSpreadsheetRoot { issueFiltersStore: IProjectIssuesFilter | IModuleIssuesFilter | ICycleIssuesFilter | IProjectViewIssuesFilter; @@ -90,7 +90,7 @@ export const BaseSpreadsheetRoot = observer((props: IBaseSpreadsheetRoot) => { viewId ); }, - [issueFiltersStore?.updateFilters, projectId, workspaceSlug, viewId] + [issueFiltersStore, projectId, workspaceSlug, viewId] ); const renderQuickActions = useCallback( diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx index 88fbf1054..658e9c79b 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/cycle-column.tsx @@ -1,14 +1,14 @@ import React, { useCallback } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { CycleDropdown } from "components/dropdowns"; +import { EIssuesStoreType } from "constants/issue"; import { useEventTracker, useIssues } from "hooks/store"; // components -import { CycleDropdown } from "components/dropdowns"; // types import { TIssue } from "@plane/types"; // constants -import { EIssuesStoreType } from "constants/issue"; type Props = { issue: TIssue; diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx index e261797af..adc4a971b 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/due-date-column.tsx @@ -2,13 +2,13 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { CalendarCheck2 } from "lucide-react"; // hooks -import { useProjectState } from "hooks/store"; // components import { DateDropdown } from "components/dropdowns"; // helpers +import { cn } from "helpers/common.helper"; import { renderFormattedPayloadDate } from "helpers/date-time.helper"; import { shouldHighlightIssueDueDate } from "helpers/issue.helper"; -import { cn } from "helpers/common.helper"; +import { useProjectState } from "hooks/store"; // types import { TIssue } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx index f7a472b49..8143be214 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/estimate-column.tsx @@ -1,6 +1,6 @@ // components -import { EstimateDropdown } from "components/dropdowns"; import { observer } from "mobx-react-lite"; +import { EstimateDropdown } from "components/dropdowns"; // types import { TIssue } from "@plane/types"; diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx index ac06525df..6c59c22af 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/header-column.tsx @@ -1,5 +1,4 @@ //ui -import { CustomMenu } from "@plane/ui"; import { ArrowDownWideNarrow, ArrowUpNarrowWide, @@ -9,12 +8,13 @@ import { ListFilter, MoveRight, } from "lucide-react"; +import { CustomMenu } from "@plane/ui"; //hooks +import { SPREADSHEET_PROPERTY_DETAILS } from "constants/spreadsheet"; import useLocalStorage from "hooks/use-local-storage"; //types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, TIssueOrderByOptions } from "@plane/types"; //constants -import { SPREADSHEET_PROPERTY_DETAILS } from "constants/spreadsheet"; interface Props { property: keyof IIssueDisplayProperties; diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx index 60e429c9f..1e6ae197a 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/label-column.tsx @@ -1,11 +1,11 @@ import React from "react"; import { observer } from "mobx-react-lite"; // components -import { IssuePropertyLabels } from "../../properties"; // hooks import { useLabel } from "hooks/store"; // types import { TIssue } from "@plane/types"; +import { IssuePropertyLabels } from "../../properties"; type Props = { issue: TIssue; diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx index c688c6e1d..67c72d2a8 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/module-column.tsx @@ -1,15 +1,15 @@ import React, { useCallback } from "react"; -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import xor from "lodash/xor"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ModuleDropdown } from "components/dropdowns"; +import { EIssuesStoreType } from "constants/issue"; import { useEventTracker, useIssues } from "hooks/store"; // components -import { ModuleDropdown } from "components/dropdowns"; // types import { TIssue } from "@plane/types"; // constants -import { EIssuesStoreType } from "constants/issue"; type Props = { issue: TIssue; @@ -71,7 +71,7 @@ export const SpreadsheetModuleColumn: React.FC = observer((props) => { buttonClassName="relative border-[0.5px] border-custom-border-400 h-4.5" onClose={onClose} multiple - showCount={true} + showCount showTooltip />
diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx index b8801559c..714134d0c 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/priority-column.tsx @@ -8,7 +8,7 @@ import { TIssue } from "@plane/types"; type Props = { issue: TIssue; onClose: () => void; - onChange: (issue: TIssue, data: Partial,updates:any) => void; + onChange: (issue: TIssue, data: Partial, updates: any) => void; disabled: boolean; }; diff --git a/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx b/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx index c635ca85e..85e294641 100644 --- a/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/columns/sub-issue-column.tsx @@ -2,11 +2,11 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // hooks +import { cn } from "helpers/common.helper"; import { useApplication } from "hooks/store"; // types import { TIssue } from "@plane/types"; // helpers -import { cn } from "helpers/common.helper"; type Props = { issue: TIssue; diff --git a/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx b/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx index 3ce70868d..01be9fe99 100644 --- a/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx @@ -1,14 +1,14 @@ import { useRef } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; // types +import { SPREADSHEET_PROPERTY_DETAILS } from "constants/spreadsheet"; +import { useEventTracker } from "hooks/store"; import { IIssueDisplayProperties, TIssue } from "@plane/types"; +import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; import { EIssueActions } from "../types"; // constants -import { SPREADSHEET_PROPERTY_DETAILS } from "constants/spreadsheet"; // components -import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; -import { useEventTracker } from "hooks/store"; -import { observer } from "mobx-react"; type Props = { displayProperties: IIssueDisplayProperties; diff --git a/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx b/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx index abf6c3a01..161aa07ae 100644 --- a/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/issue-row.tsx @@ -1,24 +1,25 @@ import { Dispatch, MutableRefObject, SetStateAction, useRef, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // icons import { ChevronRight, MoreHorizontal } from "lucide-react"; -// constants -import { SPREADSHEET_PROPERTY_LIST } from "constants/spreadsheet"; -// components -import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; -import RenderIfVisible from "components/core/render-if-visible-HOC"; -import { IssueColumn } from "./issue-column"; // ui import { ControlLink, Tooltip } from "@plane/ui"; -// hooks -import useOutsideClickDetector from "hooks/use-outside-click-detector"; -import { useIssueDetail, useProject } from "hooks/store"; +// components +import RenderIfVisible from "components/core/render-if-visible-HOC"; +// constants +import { SPREADSHEET_PROPERTY_LIST } from "constants/spreadsheet"; // helper import { cn } from "helpers/common.helper"; +// hooks +import { useIssueDetail, useProject } from "hooks/store"; +import useOutsideClickDetector from "hooks/use-outside-click-detector"; // types import { IIssueDisplayProperties, TIssue } from "@plane/types"; +// local components +import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; import { EIssueActions } from "../types"; +import { IssueColumn } from "./issue-column"; interface Props { displayProperties: IIssueDisplayProperties; @@ -255,6 +256,7 @@ const IssueRowDetails = observer((props: IssueRowDetailsProps) => { {/* Rest of the columns */} {SPREADSHEET_PROPERTY_LIST.map((property) => ( { const router = useRouter(); diff --git a/web/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx b/web/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx index af8abc801..c52b40527 100644 --- a/web/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/roots/module-root.tsx @@ -2,13 +2,13 @@ import React, { useMemo } from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // mobx store +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { BaseSpreadsheetRoot } from "../base-spreadsheet-root"; -import { EIssueActions } from "../../types"; import { TIssue } from "@plane/types"; import { ModuleIssueQuickActions } from "../../quick-action-dropdowns"; -import { EIssuesStoreType } from "constants/issue"; +import { EIssueActions } from "../../types"; +import { BaseSpreadsheetRoot } from "../base-spreadsheet-root"; export const ModuleSpreadsheetLayout: React.FC = observer(() => { const router = useRouter(); diff --git a/web/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx b/web/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx index 4ce54cff5..cc570fd81 100644 --- a/web/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/roots/project-root.tsx @@ -2,13 +2,13 @@ import React, { useMemo } from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // mobx store +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; -import { BaseSpreadsheetRoot } from "../base-spreadsheet-root"; -import { EIssueActions } from "../../types"; import { TIssue } from "@plane/types"; import { ProjectIssueQuickActions } from "../../quick-action-dropdowns"; -import { EIssuesStoreType } from "constants/issue"; +import { EIssueActions } from "../../types"; +import { BaseSpreadsheetRoot } from "../base-spreadsheet-root"; export const ProjectSpreadsheetLayout: React.FC = observer(() => { const router = useRouter(); diff --git a/web/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx b/web/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx index d8b7571e5..dd134e070 100644 --- a/web/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/roots/project-view-root.tsx @@ -2,15 +2,15 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; // mobx store +import { EIssuesStoreType } from "constants/issue"; import { useIssues } from "hooks/store"; // components -import { BaseSpreadsheetRoot } from "../base-spreadsheet-root"; -import { ProjectIssueQuickActions } from "../../quick-action-dropdowns"; -// types -import { EIssueActions } from "../../types"; import { TIssue } from "@plane/types"; +import { ProjectIssueQuickActions } from "../../quick-action-dropdowns"; +import { EIssueActions } from "../../types"; +import { BaseSpreadsheetRoot } from "../base-spreadsheet-root"; +// types // constants -import { EIssuesStoreType } from "constants/issue"; export interface IViewSpreadsheetLayout { issueActions: { diff --git a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx index 4401eb839..346846def 100644 --- a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header-column.tsx @@ -1,10 +1,10 @@ import { useRef } from "react"; //types +import { observer } from "mobx-react"; import { IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types"; //components import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; import { HeaderColumn } from "./columns/header-column"; -import { observer } from "mobx-react"; interface Props { displayProperties: IIssueDisplayProperties; diff --git a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx index 98666d790..ea0e0f1c2 100644 --- a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx @@ -1,9 +1,9 @@ // ui import { LayersIcon } from "@plane/ui"; // types +import { SPREADSHEET_PROPERTY_LIST } from "constants/spreadsheet"; import { IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types"; // constants -import { SPREADSHEET_PROPERTY_LIST } from "constants/spreadsheet"; // components import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC"; import { SpreadsheetHeaderColumn } from "./spreadsheet-header-column"; @@ -38,6 +38,7 @@ export const SpreadsheetHeader = (props: Props) => { {SPREADSHEET_PROPERTY_LIST.map((property) => ( { // states const isScrolled = useRef(false); - const handleScroll = () => { + const handleScroll = useCallback(() => { if (!containerRef.current) return; const scrollLeft = containerRef.current.scrollLeft; @@ -51,19 +51,19 @@ export const SpreadsheetTable = observer((props: Props) => { //The shadow styles are added this way to avoid re-render of all the rows of table, which could be costly if (scrollLeft > 0 !== isScrolled.current) { - const firtColumns = containerRef.current.querySelectorAll("table tr td:first-child, th:first-child"); + const firstColumns = containerRef.current.querySelectorAll("table tr td:first-child, th:first-child"); - for (let i = 0; i < firtColumns.length; i++) { + for (let i = 0; i < firstColumns.length; i++) { const shadow = i === 0 ? headerShadow : columnShadow; if (scrollLeft > 0) { - (firtColumns[i] as HTMLElement).style.boxShadow = shadow; + (firstColumns[i] as HTMLElement).style.boxShadow = shadow; } else { - (firtColumns[i] as HTMLElement).style.boxShadow = "none"; + (firstColumns[i] as HTMLElement).style.boxShadow = "none"; } } isScrolled.current = scrollLeft > 0; } - }; + }, [containerRef]); useEffect(() => { const currentContainerRef = containerRef.current; @@ -73,7 +73,7 @@ export const SpreadsheetTable = observer((props: Props) => { return () => { if (currentContainerRef) currentContainerRef.removeEventListener("scroll", handleScroll); }; - }, []); + }, [handleScroll, containerRef]); const handleKeyBoardNavigation = useTableKeyboardNavigation(); diff --git a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx index e7b2bcee6..f71634ab8 100644 --- a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx +++ b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx @@ -3,12 +3,12 @@ import { observer } from "mobx-react-lite"; // components import { Spinner } from "@plane/ui"; import { SpreadsheetQuickAddIssueForm } from "components/issues"; -import { SpreadsheetTable } from "./spreadsheet-table"; -// types +import { useProject } from "hooks/store"; import { TIssue, IIssueDisplayFilterOptions, IIssueDisplayProperties } from "@plane/types"; import { EIssueActions } from "../types"; +import { SpreadsheetTable } from "./spreadsheet-table"; +// types //hooks -import { useProject } from "hooks/store"; type Props = { displayProperties: IIssueDisplayProperties; diff --git a/web/components/issues/issue-layouts/utils.tsx b/web/components/issues/issue-layouts/utils.tsx index ce49d774d..6dd462fd1 100644 --- a/web/components/issues/issue-layouts/utils.tsx +++ b/web/components/issues/issue-layouts/utils.tsx @@ -1,19 +1,19 @@ +import { ContrastIcon } from "lucide-react"; import { Avatar, CycleGroupIcon, DiceIcon, PriorityIcon, StateGroupIcon } from "@plane/ui"; // stores +import { ISSUE_PRIORITIES } from "constants/issue"; +import { STATE_GROUPS } from "constants/state"; +import { renderEmoji } from "helpers/emoji.helper"; +import { ICycleStore } from "store/cycle.store"; +import { ILabelStore } from "store/label.store"; import { IMemberRootStore } from "store/member"; +import { IModuleStore } from "store/module.store"; import { IProjectStore } from "store/project/project.store"; import { IStateStore } from "store/state.store"; -import { ILabelStore } from "store/label.store"; -import { ICycleStore } from "store/cycle.store"; -import { IModuleStore } from "store/module.store"; // helpers -import { renderEmoji } from "helpers/emoji.helper"; // constants -import { STATE_GROUPS } from "constants/state"; -import { ISSUE_PRIORITIES } from "constants/issue"; // types import { GroupByColumnTypes, IGroupByColumn, TCycleGroups } from "@plane/types"; -import { ContrastIcon } from "lucide-react"; export const getGroupByColumns = ( groupBy: GroupByColumnTypes | null, @@ -62,7 +62,7 @@ const getProjectColumns = (project: IProjectStore): IGroupByColumn[] | undefined return { id: project.id, name: project.name, - icon:
{renderEmoji(project.emoji || "")}
, + icon:
{renderEmoji(project.emoji || "")}
, payload: { project_id: project.id }, }; }) as any; @@ -112,19 +112,19 @@ const getModuleColumns = (projectStore: IProjectStore, moduleStore: IModuleStore const modules = []; moduleIds.map((moduleId) => { - const _module = getModuleById(moduleId); - if (_module) + const moduleInfo = getModuleById(moduleId); + if (moduleInfo) modules.push({ - id: _module.id, - name: _module.name, - icon: , - payload: { module_ids: [_module.id] }, + id: moduleInfo.id, + name: moduleInfo.name, + icon: , + payload: { module_ids: [moduleInfo.id] }, }); }) as any; modules.push({ id: "None", name: "None", - icon: , + icon: , }); return modules as any; @@ -138,7 +138,7 @@ const getStateColumns = (projectState: IStateStore): IGroupByColumn[] | undefine id: state.id, name: state.name, icon: ( -
+
), @@ -153,7 +153,7 @@ const getStateGroupColumns = () => { id: stateGroup.key, name: stateGroup.label, icon: ( -
+
), @@ -183,7 +183,7 @@ const getLabelsColumns = (label: ILabelStore) => { id: label.id, name: label.name, icon: ( -
+
), payload: label?.id === "None" ? {} : { label_ids: [label.id] }, })); diff --git a/web/components/issues/issue-modal/draft-issue-layout.tsx b/web/components/issues/issue-modal/draft-issue-layout.tsx index b4dae211d..785ccb0bb 100644 --- a/web/components/issues/issue-modal/draft-issue-layout.tsx +++ b/web/components/issues/issue-modal/draft-issue-layout.tsx @@ -1,15 +1,15 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; +import { ConfirmIssueDiscard } from "components/issues"; +import { IssueFormRoot } from "components/issues/issue-modal/form"; import { useEventTracker } from "hooks/store"; // services import { IssueDraftService } from "services/issue"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // components -import { IssueFormRoot } from "components/issues/issue-modal/form"; -import { ConfirmIssueDiscard } from "components/issues"; // types import type { TIssue } from "@plane/types"; diff --git a/web/components/issues/issue-modal/form.tsx b/web/components/issues/issue-modal/form.tsx index 7fcb6cffa..527ebd0e1 100644 --- a/web/components/issues/issue-modal/form.tsx +++ b/web/components/issues/issue-modal/form.tsx @@ -1,20 +1,13 @@ import React, { FC, useState, useRef, useEffect, Fragment } from "react"; -import { useRouter } from "next/router"; +import { RichTextEditorWithRef } from "@plane/rich-text-editor"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; import { LayoutPanelTop, Sparkle, X } from "lucide-react"; // editor -import { RichTextEditorWithRef } from "@plane/rich-text-editor"; // hooks -import { useApplication, useEstimate, useIssueDetail, useMention, useProject, useWorkspace } from "hooks/store"; -// services -import { AIService } from "services/ai.service"; -import { FileService } from "services/file.service"; -// components +import { Button, CustomMenu, Input, Loader, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; import { GptAssistantPopover } from "components/core"; -import { ParentIssuesListModal } from "components/issues"; -import { IssueLabelSelect } from "components/issues/select"; -import { CreateLabelModal } from "components/labels"; import { CycleDropdown, DateDropdown, @@ -25,10 +18,17 @@ import { MemberDropdown, StateDropdown, } from "components/dropdowns"; -// ui -import { Button, CustomMenu, Input, Loader, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; -// helpers +import { ParentIssuesListModal } from "components/issues"; +import { IssueLabelSelect } from "components/issues/select"; +import { CreateLabelModal } from "components/labels"; import { renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { useApplication, useEstimate, useIssueDetail, useMention, useProject, useWorkspace } from "hooks/store"; +// services +import { AIService } from "services/ai.service"; +import { FileService } from "services/file.service"; +// components +// ui +// helpers // types import type { TIssue, ISearchIssueResponse } from "@plane/types"; @@ -360,14 +360,14 @@ export const IssueFormRoot: FC = observer((props) => { ref={ref} hasError={Boolean(errors.name)} placeholder="Issue Title" - className="resize-none text-xl w-full" + className="w-full resize-none text-xl" tabIndex={getTabIndex("name")} /> )} />
{data?.description_html === undefined ? ( - +
@@ -381,18 +381,18 @@ export const IssueFormRoot: FC = observer((props) => {
-
+
) : ( -
+
{issueName && issueName.trim() !== "" && envConfig?.has_openai_configured && ( diff --git a/web/components/issues/parent-issues-list-modal.tsx b/web/components/issues/parent-issues-list-modal.tsx index b97eafc06..f5b804e74 100644 --- a/web/components/issues/parent-issues-list-modal.tsx +++ b/web/components/issues/parent-issues-list-modal.tsx @@ -1,17 +1,15 @@ import React, { useEffect, useState } from "react"; - import { useRouter } from "next/router"; - // headless ui import { Combobox, Dialog, Transition } from "@headlessui/react"; // services +import { Rocket, Search } from "lucide-react"; +import { LayersIcon, Loader, ToggleSwitch, Tooltip } from "@plane/ui"; +import useDebounce from "hooks/use-debounce"; import { ProjectService } from "services/project"; // hooks -import useDebounce from "hooks/use-debounce"; // ui -import { LayersIcon, Loader, ToggleSwitch, Tooltip } from "@plane/ui"; // icons -import { Rocket, Search } from "lucide-react"; // types import { ISearchIssueResponse } from "@plane/types"; diff --git a/web/components/issues/peek-overview/header.tsx b/web/components/issues/peek-overview/header.tsx index 8d8ec00df..b47551bc6 100644 --- a/web/components/issues/peek-overview/header.tsx +++ b/web/components/issues/peek-overview/header.tsx @@ -1,6 +1,6 @@ import { FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; import { MoveRight, MoveDiagonal, Link2, Trash2, RotateCcw } from "lucide-react"; // ui import { @@ -13,15 +13,17 @@ import { TOAST_TYPE, setToast, } from "@plane/ui"; +// components +import { IssueSubscription, IssueUpdateStatus } from "components/issues"; +import { STATE_GROUPS } from "constants/state"; // helpers +import { cn } from "helpers/common.helper"; import { copyUrlToClipboard } from "helpers/string.helper"; // store hooks import { useIssueDetail, useProjectState, useUser } from "hooks/store"; // helpers -import { cn } from "helpers/common.helper"; // components -import { IssueSubscription, IssueUpdateStatus } from "components/issues"; -import { STATE_GROUPS } from "constants/state"; +// helpers export type TPeekModes = "side-peek" | "modal" | "full-screen"; diff --git a/web/components/issues/peek-overview/issue-detail.tsx b/web/components/issues/peek-overview/issue-detail.tsx index 7f540874c..59b1c1609 100644 --- a/web/components/issues/peek-overview/issue-detail.tsx +++ b/web/components/issues/peek-overview/issue-detail.tsx @@ -1,14 +1,14 @@ import { FC, useEffect } from "react"; import { observer } from "mobx-react"; // store hooks +import { TIssueOperations } from "components/issues"; import { useIssueDetail, useProject, useUser } from "hooks/store"; // hooks import useReloadConfirmations from "hooks/use-reload-confirmation"; // components -import { TIssueOperations } from "components/issues"; +import { IssueDescriptionInput } from "../description-input"; import { IssueReaction } from "../issue-detail/reactions"; import { IssueTitleInput } from "../title-input"; -import { IssueDescriptionInput } from "../description-input"; interface IPeekOverviewIssueDetails { workspaceSlug: string; diff --git a/web/components/issues/peek-overview/properties.tsx b/web/components/issues/peek-overview/properties.tsx index 2f5a02c11..8ae021b86 100644 --- a/web/components/issues/peek-overview/properties.tsx +++ b/web/components/issues/peek-overview/properties.tsx @@ -12,9 +12,9 @@ import { CalendarCheck2, } from "lucide-react"; // hooks -import { useIssueDetail, useProject, useProjectState } from "hooks/store"; // ui icons import { DiceIcon, DoubleCircleIcon, UserGroupIcon, ContrastIcon, RelatedIcon } from "@plane/ui"; +import { DateDropdown, EstimateDropdown, PriorityDropdown, MemberDropdown, StateDropdown } from "components/dropdowns"; import { IssueLinkRoot, IssueCycleSelect, @@ -24,12 +24,12 @@ import { TIssueOperations, IssueRelationSelect, } from "components/issues"; -import { DateDropdown, EstimateDropdown, PriorityDropdown, MemberDropdown, StateDropdown } from "components/dropdowns"; // components +import { cn } from "helpers/common.helper"; import { renderFormattedPayloadDate } from "helpers/date-time.helper"; // helpers -import { cn } from "helpers/common.helper"; import { shouldHighlightIssueDueDate } from "helpers/issue.helper"; +import { useIssueDetail, useProject, useProjectState } from "hooks/store"; interface IPeekOverviewProperties { workspaceSlug: string; diff --git a/web/components/issues/peek-overview/root.tsx b/web/components/issues/peek-overview/root.tsx index b28cc5de6..3eae8d3e8 100644 --- a/web/components/issues/peek-overview/root.tsx +++ b/web/components/issues/peek-overview/root.tsx @@ -1,18 +1,19 @@ import { FC, useEffect, useState, useMemo } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks -import { useEventTracker, useIssueDetail, useIssues, useUser } from "hooks/store"; -// ui import { TOAST_TYPE, setPromiseToast, setToast } from "@plane/ui"; -// components import { IssueView } from "components/issues"; +// ui +// components +import { ISSUE_UPDATED, ISSUE_DELETED, ISSUE_ARCHIVED, ISSUE_RESTORED } from "constants/event-tracker"; +import { EIssuesStoreType } from "constants/issue"; +import { EUserProjectRoles } from "constants/project"; +import { useEventTracker, useIssueDetail, useIssues, useUser } from "hooks/store"; +// components // types import { TIssue } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EIssuesStoreType } from "constants/issue"; -import { ISSUE_UPDATED, ISSUE_DELETED, ISSUE_ARCHIVED, ISSUE_RESTORED } from "constants/event-tracker"; interface IIssuePeekOverview { is_archived?: boolean; diff --git a/web/components/issues/peek-overview/view.tsx b/web/components/issues/peek-overview/view.tsx index f94901c45..aa7bd395f 100644 --- a/web/components/issues/peek-overview/view.tsx +++ b/web/components/issues/peek-overview/view.tsx @@ -1,12 +1,7 @@ import { FC, useRef, useState } from "react"; - import { observer } from "mobx-react-lite"; - -// hooks -import useOutsideClickDetector from "hooks/use-outside-click-detector"; -import useKeypress from "hooks/use-keypress"; -// store hooks -import { useIssueDetail } from "hooks/store"; +// ui +import { Spinner } from "@plane/ui"; // components import { DeleteIssueModal, @@ -17,9 +12,12 @@ import { TIssueOperations, ArchiveIssueModal, } from "components/issues"; +// hooks +import { useIssueDetail } from "hooks/store"; +import useKeypress from "hooks/use-keypress"; +import useOutsideClickDetector from "hooks/use-outside-click-detector"; +// store hooks import { IssueActivity } from "../issue-detail/issue-activity"; -// ui -import { Spinner } from "@plane/ui"; interface IIssueView { workspaceSlug: string; @@ -139,7 +137,7 @@ export const IssueView: FC = observer((props) => { disabled={disabled} /> {/* content */} -
+
{isLoading && !issue ? (
@@ -170,7 +168,7 @@ export const IssueView: FC = observer((props) => {
) : ( -
+
>; diff --git a/web/components/issues/sub-issues/issue-list-item.tsx b/web/components/issues/sub-issues/issue-list-item.tsx index a748e986e..5d7d19730 100644 --- a/web/components/issues/sub-issues/issue-list-item.tsx +++ b/web/components/issues/sub-issues/issue-list-item.tsx @@ -1,16 +1,16 @@ import React from "react"; +import { observer } from "mobx-react-lite"; import { ChevronDown, ChevronRight, X, Pencil, Trash, Link as LinkIcon, Loader } from "lucide-react"; // components +import { ControlLink, CustomMenu, Tooltip } from "@plane/ui"; +import { useIssueDetail, useProject, useProjectState } from "hooks/store"; +import { TIssue } from "@plane/types"; import { IssueList } from "./issues-list"; import { IssueProperty } from "./properties"; // ui -import { ControlLink, CustomMenu, Tooltip } from "@plane/ui"; // types -import { TIssue } from "@plane/types"; import { TSubIssueOperations } from "./root"; // import { ISubIssuesRootLoaders, ISubIssuesRootLoadersHandler } from "./root"; -import { useIssueDetail, useProject, useProjectState } from "hooks/store"; -import { observer } from "mobx-react-lite"; export interface ISubIssues { workspaceSlug: string; diff --git a/web/components/issues/sub-issues/issues-list.tsx b/web/components/issues/sub-issues/issues-list.tsx index ad09938cb..cb1d66461 100644 --- a/web/components/issues/sub-issues/issues-list.tsx +++ b/web/components/issues/sub-issues/issues-list.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react-lite"; // hooks import { useIssueDetail } from "hooks/store"; // components +import { TIssue } from "@plane/types"; import { IssueListItem } from "./issue-list-item"; // types -import { TIssue } from "@plane/types"; import { TSubIssueOperations } from "./root"; export interface IIssueList { diff --git a/web/components/issues/sub-issues/properties.tsx b/web/components/issues/sub-issues/properties.tsx index 03c9d8902..f737b57e7 100644 --- a/web/components/issues/sub-issues/properties.tsx +++ b/web/components/issues/sub-issues/properties.tsx @@ -1,8 +1,8 @@ import React from "react"; // hooks +import { PriorityDropdown, MemberDropdown, StateDropdown } from "components/dropdowns"; import { useIssueDetail } from "hooks/store"; // components -import { PriorityDropdown, MemberDropdown, StateDropdown } from "components/dropdowns"; // types import { TSubIssueOperations } from "./root"; diff --git a/web/components/issues/sub-issues/root.tsx b/web/components/issues/sub-issues/root.tsx index da49200dd..ed46a40f5 100644 --- a/web/components/issues/sub-issues/root.tsx +++ b/web/components/issues/sub-issues/root.tsx @@ -1,20 +1,20 @@ import { FC, useCallback, useEffect, useMemo, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Plus, ChevronRight, ChevronDown, Loader } from "lucide-react"; // hooks -import { useEventTracker, useIssueDetail } from "hooks/store"; -// components +import { CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; import { ExistingIssuesListModal } from "components/core"; import { CreateUpdateIssueModal, DeleteIssueModal } from "components/issues"; +import { copyTextToClipboard } from "helpers/string.helper"; +import { useEventTracker, useIssueDetail } from "hooks/store"; +// components +import { IUser, TIssue } from "@plane/types"; import { IssueList } from "./issues-list"; import { ProgressBar } from "./progressbar"; // ui -import { CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { copyTextToClipboard } from "helpers/string.helper"; // types -import { IUser, TIssue } from "@plane/types"; export interface ISubIssuesRoot { workspaceSlug: string; diff --git a/web/components/issues/title-input.tsx b/web/components/issues/title-input.tsx index 2db4eb4b5..bb412b795 100644 --- a/web/components/issues/title-input.tsx +++ b/web/components/issues/title-input.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react"; // components import { TextArea } from "@plane/ui"; // types +import useDebounce from "hooks/use-debounce"; import { TIssueOperations } from "./issue-detail"; // hooks -import useDebounce from "hooks/use-debounce"; export type IssueTitleInputProps = { disabled?: boolean; diff --git a/web/components/labels/create-label-modal.tsx b/web/components/labels/create-label-modal.tsx index b6a3f63e8..ee0988741 100644 --- a/web/components/labels/create-label-modal.tsx +++ b/web/components/labels/create-label-modal.tsx @@ -1,18 +1,18 @@ import React, { useEffect } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import { Controller, useForm } from "react-hook-form"; +import { useRouter } from "next/router"; import { TwitterPicker } from "react-color"; +import { Controller, useForm } from "react-hook-form"; import { Dialog, Popover, Transition } from "@headlessui/react"; import { ChevronDown } from "lucide-react"; // hooks +import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +import { LABEL_COLOR_OPTIONS, getRandomLabelColor } from "constants/label"; import { useLabel } from "hooks/store"; // ui -import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // types import type { IIssueLabel, IState } from "@plane/types"; // constants -import { LABEL_COLOR_OPTIONS, getRandomLabelColor } from "constants/label"; // types type Props = { diff --git a/web/components/labels/create-update-label-inline.tsx b/web/components/labels/create-update-label-inline.tsx index d30d48a6a..a29a334b6 100644 --- a/web/components/labels/create-update-label-inline.tsx +++ b/web/components/labels/create-update-label-inline.tsx @@ -1,17 +1,17 @@ import React, { forwardRef, useEffect } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { TwitterPicker } from "react-color"; import { Controller, SubmitHandler, useForm } from "react-hook-form"; import { Popover, Transition } from "@headlessui/react"; -// hooks -import { useLabel } from "hooks/store"; // ui import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +// constants +import { getRandomLabelColor, LABEL_COLOR_OPTIONS } from "constants/label"; +// hooks +import { useLabel } from "hooks/store"; // types import { IIssueLabel } from "@plane/types"; -// fetch-keys -import { getRandomLabelColor, LABEL_COLOR_OPTIONS } from "constants/label"; type Props = { labelForm: boolean; @@ -74,6 +74,7 @@ export const CreateUpdateLabelInline = observer( const handleLabelUpdate: SubmitHandler = async (formData) => { if (!workspaceSlug || !projectId || isSubmitting) return; + // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain await updateLabel(workspaceSlug.toString(), projectId.toString(), labelToUpdate?.id!, formData) .then(() => { reset(defaultValues); diff --git a/web/components/labels/delete-label-modal.tsx b/web/components/labels/delete-label-modal.tsx index 83b3e807d..d5c269136 100644 --- a/web/components/labels/delete-label-modal.tsx +++ b/web/components/labels/delete-label-modal.tsx @@ -1,13 +1,13 @@ import React, { useState } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; -import { observer } from "mobx-react-lite"; // hooks +import { AlertTriangle } from "lucide-react"; +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; import { useLabel } from "hooks/store"; // icons -import { AlertTriangle } from "lucide-react"; // ui -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // types import type { IIssueLabel } from "@plane/types"; diff --git a/web/components/labels/label-block/label-item-block.tsx b/web/components/labels/label-block/label-item-block.tsx index eca3bcaaf..2a797d0b6 100644 --- a/web/components/labels/label-block/label-item-block.tsx +++ b/web/components/labels/label-block/label-item-block.tsx @@ -1,12 +1,12 @@ import { useRef, useState } from "react"; -import { LucideIcon, X } from "lucide-react"; import { DraggableProvidedDragHandleProps } from "@hello-pangea/dnd"; +import { LucideIcon, X } from "lucide-react"; //ui import { CustomMenu } from "@plane/ui"; //types +import useOutsideClickDetector from "hooks/use-outside-click-detector"; import { IIssueLabel } from "@plane/types"; //hooks -import useOutsideClickDetector from "hooks/use-outside-click-detector"; //components import { DragHandle } from "./drag-handle"; import { LabelName } from "./label-name"; diff --git a/web/components/labels/project-setting-label-group.tsx b/web/components/labels/project-setting-label-group.tsx index 71d11dacb..6519e581e 100644 --- a/web/components/labels/project-setting-label-group.tsx +++ b/web/components/labels/project-setting-label-group.tsx @@ -1,12 +1,4 @@ import React, { Dispatch, SetStateAction, useState } from "react"; -import { Disclosure, Transition } from "@headlessui/react"; - -// store -import { observer } from "mobx-react-lite"; -// icons -import { ChevronDown, Pencil, Trash2 } from "lucide-react"; -// types -import { IIssueLabel } from "@plane/types"; import { Draggable, DraggableProvided, @@ -14,10 +6,18 @@ import { DraggableStateSnapshot, Droppable, } from "@hello-pangea/dnd"; -import { ICustomMenuItem, LabelItemBlock } from "./label-block/label-item-block"; -import { CreateUpdateLabelInline } from "./create-update-label-inline"; -import { ProjectSettingLabelItem } from "./project-setting-label-item"; +import { observer } from "mobx-react-lite"; +import { Disclosure, Transition } from "@headlessui/react"; + +// store +// icons +import { ChevronDown, Pencil, Trash2 } from "lucide-react"; +// types import useDraggableInPortal from "hooks/use-draggable-portal"; +import { IIssueLabel } from "@plane/types"; +import { CreateUpdateLabelInline } from "./create-update-label-inline"; +import { ICustomMenuItem, LabelItemBlock } from "./label-block/label-item-block"; +import { ProjectSettingLabelItem } from "./project-setting-label-item"; type Props = { label: IIssueLabel; @@ -107,7 +107,7 @@ export const ProjectSettingLabelGroup: React.FC = observer((props) => { customMenuItems={customMenuItems} dragHandleProps={dragHandleProps} handleLabelDelete={handleLabelDelete} - isLabelGroup={true} + isLabelGroup /> )} diff --git a/web/components/labels/project-setting-label-item.tsx b/web/components/labels/project-setting-label-item.tsx index ed72e4503..30e424064 100644 --- a/web/components/labels/project-setting-label-item.tsx +++ b/web/components/labels/project-setting-label-item.tsx @@ -1,14 +1,14 @@ import React, { Dispatch, SetStateAction, useState } from "react"; -import { useRouter } from "next/router"; import { DraggableProvidedDragHandleProps, DraggableStateSnapshot } from "@hello-pangea/dnd"; +import { useRouter } from "next/router"; import { X, Pencil } from "lucide-react"; // hooks import { useLabel } from "hooks/store"; // types import { IIssueLabel } from "@plane/types"; // components -import { ICustomMenuItem, LabelItemBlock } from "./label-block/label-item-block"; import { CreateUpdateLabelInline } from "./create-update-label-inline"; +import { ICustomMenuItem, LabelItemBlock } from "./label-block/label-item-block"; type Props = { label: IIssueLabel; diff --git a/web/components/labels/project-setting-label-list.tsx b/web/components/labels/project-setting-label-list.tsx index fcd84d70a..ba6b43b0b 100644 --- a/web/components/labels/project-setting-label-list.tsx +++ b/web/components/labels/project-setting-label-list.tsx @@ -1,6 +1,4 @@ import React, { useState, useRef } from "react"; -import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import { DragDropContext, Draggable, @@ -9,24 +7,26 @@ import { DropResult, Droppable, } from "@hello-pangea/dnd"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; // hooks -import { useLabel, useUser } from "hooks/store"; -import useDraggableInPortal from "hooks/use-draggable-portal"; -// components +import { Button, Loader } from "@plane/ui"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; import { CreateUpdateLabelInline, DeleteLabelModal, ProjectSettingLabelGroup, ProjectSettingLabelItem, } from "components/labels"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { PROJECT_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { useLabel, useUser } from "hooks/store"; +import useDraggableInPortal from "hooks/use-draggable-portal"; +// components // ui -import { Button, Loader } from "@plane/ui"; // types import { IIssueLabel } from "@plane/types"; // constants -import { PROJECT_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; const LABELS_ROOT = "labels.root"; @@ -76,16 +76,18 @@ export const ProjectSettingsLabelList: React.FC = observer(() => { if (destination?.droppableId === LABELS_ROOT) parentLabel = null; if (result.reason == "DROP" && childLabel != parentLabel) { - updateLabelPosition( - workspaceSlug?.toString()!, - projectId?.toString()!, - childLabel, - parentLabel, - index, - prevParentLabel == parentLabel, - prevIndex - ); - return; + if (workspaceSlug && projectId) { + updateLabelPosition( + workspaceSlug?.toString(), + projectId?.toString(), + childLabel, + parentLabel, + index, + prevParentLabel == parentLabel, + prevIndex + ); + return; + } } }; @@ -104,7 +106,7 @@ export const ProjectSettingsLabelList: React.FC = observer(() => {
{showLabelForm && ( -
+
{ )} {projectLabels ? ( projectLabels.length === 0 && !showLabelForm ? ( -
+
= observer((props) => { }); }; - const handleUpdateModule = async (payload: Partial, dirtyFields: any) => { + const handleUpdateModule = async (payload: Partial, dirtyFields: unknown) => { if (!workspaceSlug || !projectId || !data) return; const selectedProjectId = payload.project_id ?? projectId.toString(); @@ -92,7 +92,7 @@ export const CreateUpdateModuleModal: React.FC = observer((props) => { }); captureModuleEvent({ eventName: MODULE_UPDATED, - payload: { ...res, changed_properties: Object.keys(dirtyFields), state: "SUCCESS" }, + payload: { ...res, changed_properties: Object.keys(dirtyFields || {}), state: "SUCCESS" }, }); }) .catch((err) => { @@ -108,7 +108,7 @@ export const CreateUpdateModuleModal: React.FC = observer((props) => { }); }; - const handleFormSubmit = async (formData: Partial, dirtyFields: any) => { + const handleFormSubmit = async (formData: Partial, dirtyFields: unknown) => { if (!workspaceSlug || !projectId) return; const payload: Partial = { diff --git a/web/components/modules/module-card-item.tsx b/web/components/modules/module-card-item.tsx index dbbde56d7..8023657da 100644 --- a/web/components/modules/module-card-item.tsx +++ b/web/components/modules/module-card-item.tsx @@ -1,21 +1,21 @@ import React, { useState } from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import { Info, LinkIcon, Pencil, Star, Trash2 } from "lucide-react"; // hooks -import { useEventTracker, useMember, useModule, useUser } from "hooks/store"; -// components -import { CreateUpdateModuleModal, DeleteModuleModal } from "components/modules"; -// ui import { Avatar, AvatarGroup, CustomMenu, LayersIcon, Tooltip, TOAST_TYPE, setToast, setPromiseToast } from "@plane/ui"; -// helpers -import { copyUrlToClipboard } from "helpers/string.helper"; -import { renderFormattedDate } from "helpers/date-time.helper"; -// constants +import { CreateUpdateModuleModal, DeleteModuleModal } from "components/modules"; +import { MODULE_FAVORITED, MODULE_UNFAVORITED } from "constants/event-tracker"; import { MODULE_STATUS } from "constants/module"; import { EUserProjectRoles } from "constants/project"; -import { MODULE_FAVORITED, MODULE_UNFAVORITED } from "constants/event-tracker"; +import { renderFormattedDate } from "helpers/date-time.helper"; +import { copyUrlToClipboard } from "helpers/string.helper"; +import { useEventTracker, useMember, useModule, useUser } from "hooks/store"; +// components +// ui +// helpers +// constants type Props = { moduleId: string; diff --git a/web/components/modules/module-list-item.tsx b/web/components/modules/module-list-item.tsx index 63e780cb2..7fe25b918 100644 --- a/web/components/modules/module-list-item.tsx +++ b/web/components/modules/module-list-item.tsx @@ -1,13 +1,9 @@ import React, { useState } from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import { Check, Info, LinkIcon, Pencil, Star, Trash2, User2 } from "lucide-react"; // hooks -import { useModule, useUser, useEventTracker, useMember } from "hooks/store"; -// components -import { CreateUpdateModuleModal, DeleteModuleModal } from "components/modules"; -// ui import { Avatar, AvatarGroup, @@ -18,13 +14,17 @@ import { setToast, setPromiseToast, } from "@plane/ui"; -// helpers -import { copyUrlToClipboard } from "helpers/string.helper"; -import { renderFormattedDate } from "helpers/date-time.helper"; -// constants +import { CreateUpdateModuleModal, DeleteModuleModal } from "components/modules"; +import { MODULE_FAVORITED, MODULE_UNFAVORITED } from "constants/event-tracker"; import { MODULE_STATUS } from "constants/module"; import { EUserProjectRoles } from "constants/project"; -import { MODULE_FAVORITED, MODULE_UNFAVORITED } from "constants/event-tracker"; +import { renderFormattedDate } from "helpers/date-time.helper"; +import { copyUrlToClipboard } from "helpers/string.helper"; +import { useModule, useUser, useEventTracker, useMember } from "hooks/store"; +// components +// ui +// helpers +// constants type Props = { moduleId: string; @@ -175,9 +175,9 @@ export const ModuleListItem: React.FC = observer((props) => { )} setDeleteModal(false)} /> -
-
-
+
+
+
@@ -202,10 +202,10 @@ export const ModuleListItem: React.FC = observer((props) => {
-
+
{moduleStatus && ( = observer((props) => {
-
+
{renderDate && ( @@ -226,7 +226,7 @@ export const ModuleListItem: React.FC = observer((props) => { )}
-
+
{moduleDetails.member_ids.length > 0 ? ( diff --git a/web/components/modules/module-mobile-header.tsx b/web/components/modules/module-mobile-header.tsx index e3f504479..4763639ed 100644 --- a/web/components/modules/module-mobile-header.tsx +++ b/web/components/modules/module-mobile-header.tsx @@ -1,12 +1,12 @@ -import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; +import { useCallback, useState } from "react"; +import router from "next/router"; +import { Calendar, ChevronDown, Kanban, List } from "lucide-react"; import { CustomMenu } from "@plane/ui"; import { ProjectAnalyticsModal } from "components/analytics"; import { DisplayFiltersSelection, FilterSelection, FiltersDropdown } from "components/issues"; import { EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT, ISSUE_LAYOUTS } from "constants/issue"; import { useIssues, useLabel, useMember, useModule, useProjectState } from "hooks/store"; -import { Calendar, ChevronDown, Kanban, List } from "lucide-react"; -import router from "next/router"; -import { useCallback, useState } from "react"; +import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; export const ModuleMobileHeader = () => { const [analyticsModal, setAnalyticsModal] = useState(false); @@ -83,35 +83,36 @@ export const ModuleMobileHeader = () => { onClose={() => setAnalyticsModal(false)} moduleDetails={moduleDetails ?? undefined} /> -
+
Layout} + customButton={Layout} customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm" closeOnSelect > {layouts.map((layout, index) => ( { handleLayoutChange(ISSUE_LAYOUTS[index].key); }} className="flex items-center gap-2" > - +
{layout.title}
))}
-
+
+ Filters - + } > @@ -127,14 +128,14 @@ export const ModuleMobileHeader = () => { />
-
+
+ Display - + } > @@ -153,7 +154,7 @@ export const ModuleMobileHeader = () => { diff --git a/web/components/modules/module-peek-overview.tsx b/web/components/modules/module-peek-overview.tsx index 81614b61b..5590d0390 100644 --- a/web/components/modules/module-peek-overview.tsx +++ b/web/components/modules/module-peek-overview.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks import { useModule } from "hooks/store"; // components diff --git a/web/components/modules/modules-list-view.tsx b/web/components/modules/modules-list-view.tsx index bf12fde8b..33c11cbd8 100644 --- a/web/components/modules/modules-list-view.tsx +++ b/web/components/modules/modules-list-view.tsx @@ -1,17 +1,17 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; // hooks -import { useApplication, useEventTracker, useModule, useUser } from "hooks/store"; -import useLocalStorage from "hooks/use-local-storage"; // components -import { ModuleCardItem, ModuleListItem, ModulePeekOverview, ModulesListGanttChartView } from "components/modules"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { ModuleCardItem, ModuleListItem, ModulePeekOverview, ModulesListGanttChartView } from "components/modules"; // ui import { CycleModuleBoardLayout, CycleModuleListLayout, GanttLayoutLoader } from "components/ui"; // constants -import { EUserProjectRoles } from "constants/project"; import { MODULE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EUserProjectRoles } from "constants/project"; +import { useApplication, useEventTracker, useModule, useUser } from "hooks/store"; +import useLocalStorage from "hooks/use-local-storage"; export const ModulesListView: React.FC = observer(() => { // router diff --git a/web/components/modules/select/status.tsx b/web/components/modules/select/status.tsx index 33a634e9b..8efdcb472 100644 --- a/web/components/modules/select/status.tsx +++ b/web/components/modules/select/status.tsx @@ -5,9 +5,9 @@ import { Controller, FieldError, Control } from "react-hook-form"; // ui import { CustomSelect, DoubleCircleIcon, ModuleStatusIcon } from "@plane/ui"; // types +import { MODULE_STATUS } from "constants/module"; import type { IModule } from "@plane/types"; // constants -import { MODULE_STATUS } from "constants/module"; type Props = { control: Control; diff --git a/web/components/modules/sidebar-select/select-status.tsx b/web/components/modules/sidebar-select/select-status.tsx index b8c337fd4..4a203ee62 100644 --- a/web/components/modules/sidebar-select/select-status.tsx +++ b/web/components/modules/sidebar-select/select-status.tsx @@ -5,10 +5,10 @@ import { Control, Controller, UseFormWatch } from "react-hook-form"; // ui import { CustomSelect, DoubleCircleIcon } from "@plane/ui"; // types +import { MODULE_STATUS } from "constants/module"; import { IModule } from "@plane/types"; // common // constants -import { MODULE_STATUS } from "constants/module"; type Props = { control: Control, any>; diff --git a/web/components/modules/sidebar.tsx b/web/components/modules/sidebar.tsx index ad3da373c..c9f28cf98 100644 --- a/web/components/modules/sidebar.tsx +++ b/web/components/modules/sidebar.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; import { Disclosure, Transition } from "@headlessui/react"; import { @@ -14,13 +14,6 @@ import { Trash2, UserCircle2, } from "lucide-react"; -// hooks -import { useModule, useUser, useEventTracker } from "hooks/store"; -// components -import { LinkModal, LinksList, SidebarProgressStats } from "components/core"; -import { DeleteModuleModal } from "components/modules"; -import ProgressChart from "components/core/sidebar/progress-chart"; -import { DateRangeDropdown, MemberDropdown } from "components/dropdowns"; // ui import { CustomMenu, @@ -32,15 +25,22 @@ import { TOAST_TYPE, setToast, } from "@plane/ui"; +// components +import { LinkModal, LinksList, SidebarProgressStats } from "components/core"; +import ProgressChart from "components/core/sidebar/progress-chart"; +import { DateRangeDropdown, MemberDropdown } from "components/dropdowns"; +import { DeleteModuleModal } from "components/modules"; +// constant +import { MODULE_LINK_CREATED, MODULE_LINK_DELETED, MODULE_LINK_UPDATED, MODULE_UPDATED } from "constants/event-tracker"; +import { MODULE_STATUS } from "constants/module"; +import { EUserProjectRoles } from "constants/project"; // helpers import { renderFormattedPayloadDate } from "helpers/date-time.helper"; import { copyUrlToClipboard } from "helpers/string.helper"; +// hooks +import { useModule, useUser, useEventTracker } from "hooks/store"; // types import { ILinkDetails, IModule, ModuleLink } from "@plane/types"; -// constant -import { MODULE_STATUS } from "constants/module"; -import { EUserProjectRoles } from "constants/project"; -import { MODULE_LINK_CREATED, MODULE_LINK_DELETED, MODULE_LINK_UPDATED, MODULE_UPDATED } from "constants/event-tracker"; const defaultValues: Partial = { lead_id: "", @@ -340,7 +340,7 @@ export const ModuleDetailsSidebar: React.FC = observer((props) => { Date range
-
+
= observer((props) => { control={control} name="lead_id" render={({ field: { value } }) => ( -
+
{ @@ -408,7 +408,7 @@ export const ModuleDetailsSidebar: React.FC = observer((props) => { control={control} name="member_ids" render={({ field: { value } }) => ( -
+
{ @@ -429,7 +429,7 @@ export const ModuleDetailsSidebar: React.FC = observer((props) => { Issues
-
+
{issueCount}
diff --git a/web/components/notifications/notification-card.tsx b/web/components/notifications/notification-card.tsx index bd26dcfa5..03f75ca63 100644 --- a/web/components/notifications/notification-card.tsx +++ b/web/components/notifications/notification-card.tsx @@ -1,22 +1,22 @@ import React, { useEffect, useRef } from "react"; import Image from "next/image"; -import { useRouter } from "next/router"; import Link from "next/link"; +import { useRouter } from "next/router"; import { Menu } from "@headlessui/react"; -import { ArchiveRestore, Clock, MessageSquare, MoreVertical, User2 } from "lucide-react"; -// hooks -import { useEventTracker } from "hooks/store"; // icons +import { ArchiveRestore, Clock, MessageSquare, MoreVertical, User2 } from "lucide-react"; +// ui import { ArchiveIcon, CustomMenu, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; // constants +import { ISSUE_OPENED, NOTIFICATIONS_READ, NOTIFICATION_ARCHIVED, NOTIFICATION_SNOOZED } from "constants/event-tracker"; import { snoozeOptions } from "constants/notification"; // helper -import { replaceUnderscoreIfSnakeCase, truncateText, stripAndTruncateHTML } from "helpers/string.helper"; import { calculateTimeAgo, renderFormattedTime, renderFormattedDate } from "helpers/date-time.helper"; +import { replaceUnderscoreIfSnakeCase, truncateText, stripAndTruncateHTML } from "helpers/string.helper"; +// hooks +import { useEventTracker } from "hooks/store"; // type import type { IUserNotification, NotificationType } from "@plane/types"; -// constants -import { ISSUE_OPENED, NOTIFICATIONS_READ, NOTIFICATION_ARCHIVED, NOTIFICATION_SNOOZED } from "constants/event-tracker"; type NotificationCardProps = { selectedTab: NotificationType; @@ -215,7 +215,7 @@ export const NotificationCard: React.FC = (props) => { {notification.message}
)} -
+
{({ open }) => ( <> @@ -231,11 +231,11 @@ export const NotificationCard: React.FC = (props) => {
{moreOptions.map((item) => ( - + {({ close }) => (
@@ -357,7 +358,7 @@ export const NotificationCard: React.FC = (props) => { }, }, ].map((item) => ( - + diff --git a/web/components/notifications/notification-popover.tsx b/web/components/notifications/notification-popover.tsx index a8f25762e..d7aa1b07d 100644 --- a/web/components/notifications/notification-popover.tsx +++ b/web/components/notifications/notification-popover.tsx @@ -1,20 +1,20 @@ import React, { Fragment } from "react"; +import { observer } from "mobx-react-lite"; import { Popover, Transition } from "@headlessui/react"; import { Bell } from "lucide-react"; -import { observer } from "mobx-react-lite"; // hooks -import { useApplication } from "hooks/store"; -import useUserNotification from "hooks/use-user-notifications"; -import useOutsideClickDetector from "hooks/use-outside-click-detector"; -// components +import { Tooltip } from "@plane/ui"; import { EmptyState } from "components/common"; import { SnoozeNotificationModal, NotificationCard, NotificationHeader } from "components/notifications"; -import { Tooltip } from "@plane/ui"; import { NotificationsLoader } from "components/ui"; +import { getNumberCount } from "helpers/string.helper"; +import { useApplication } from "hooks/store"; +import useOutsideClickDetector from "hooks/use-outside-click-detector"; +import useUserNotification from "hooks/use-user-notifications"; +// components // images import emptyNotification from "public/empty-state/notification.svg"; // helpers -import { getNumberCount } from "helpers/string.helper"; export const NotificationPopover = observer(() => { // states diff --git a/web/components/notifications/select-snooze-till-modal.tsx b/web/components/notifications/select-snooze-till-modal.tsx index c2875b8dd..f65d51ba7 100644 --- a/web/components/notifications/select-snooze-till-modal.tsx +++ b/web/components/notifications/select-snooze-till-modal.tsx @@ -1,13 +1,13 @@ import { Fragment, FC } from "react"; import { useRouter } from "next/router"; import { useForm, Controller } from "react-hook-form"; -import { DateDropdown } from "components/dropdowns"; import { Transition, Dialog } from "@headlessui/react"; import { X } from "lucide-react"; +import { Button, CustomSelect, TOAST_TYPE, setToast } from "@plane/ui"; +import { DateDropdown } from "components/dropdowns"; // constants import { allTimeIn30MinutesInterval12HoursFormat } from "constants/notification"; // ui -import { Button, CustomSelect, TOAST_TYPE, setToast } from "@plane/ui"; // types import type { IUserNotification } from "@plane/types"; @@ -143,7 +143,7 @@ export const SnoozeNotificationModal: FC = (props) => { leaveFrom="opacity-100 translate-y-0 sm:scale-100" leaveTo="opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95" > - +
@@ -157,7 +157,7 @@ export const SnoozeNotificationModal: FC = (props) => {
-
+
Pick a date
= (props) => { onClick={() => { setValue("period", "AM"); }} - className={`flex h-full w-1/2 cursor-pointer items-center justify-center text-center ${watch("period") === "AM" + className={`flex h-full w-1/2 cursor-pointer items-center justify-center text-center ${ + watch("period") === "AM" ? "bg-custom-primary-100/90 text-custom-primary-0" : "bg-custom-background-80" - }`} + }`} > AM
@@ -221,10 +222,11 @@ export const SnoozeNotificationModal: FC = (props) => { onClick={() => { setValue("period", "PM"); }} - className={`flex h-full w-1/2 cursor-pointer items-center justify-center text-center ${watch("period") === "PM" + className={`flex h-full w-1/2 cursor-pointer items-center justify-center text-center ${ + watch("period") === "PM" ? "bg-custom-primary-100/90 text-custom-primary-0" : "bg-custom-background-80" - }`} + }`} > PM
diff --git a/web/components/onboarding/invitations.tsx b/web/components/onboarding/invitations.tsx index c176ed580..2e94bb67e 100644 --- a/web/components/onboarding/invitations.tsx +++ b/web/components/onboarding/invitations.tsx @@ -1,23 +1,23 @@ import React, { useState } from "react"; import useSWR, { mutate } from "swr"; // hooks +import { CheckCircle2, Search } from "lucide-react"; +import { Button } from "@plane/ui"; +import { MEMBER_ACCEPTED } from "constants/event-tracker"; +import { USER_WORKSPACES, USER_WORKSPACE_INVITATIONS } from "constants/fetch-keys"; +import { ROLE } from "constants/workspace"; +import { truncateText } from "helpers/string.helper"; +import { getUserRole } from "helpers/user.helper"; import { useEventTracker, useUser, useWorkspace } from "hooks/store"; // components -import { Button } from "@plane/ui"; // helpers -import { truncateText } from "helpers/string.helper"; // services import { WorkspaceService } from "services/workspace.service"; // constants -import { USER_WORKSPACES, USER_WORKSPACE_INVITATIONS } from "constants/fetch-keys"; -import { ROLE } from "constants/workspace"; -import { MEMBER_ACCEPTED } from "constants/event-tracker"; // types import { IWorkspaceMemberInvitation } from "@plane/types"; // icons -import { CheckCircle2, Search } from "lucide-react"; import {} from "hooks/store/use-event-tracker"; -import { getUserRole } from "helpers/user.helper"; type Props = { handleNextStep: () => void; @@ -57,17 +57,18 @@ export const Invitations: React.FC = (props) => { }; const submitInvitations = async () => { - if (invitationsRespond.length <= 0) return; + const invitation = invitations?.find((invitation) => invitation.id === invitationsRespond[0]); + + if (invitationsRespond.length <= 0 && !invitation?.role) return; setIsJoiningWorkspaces(true); - const invitation = invitations?.find((invitation) => invitation.id === invitationsRespond[0]); await workspaceService .joinWorkspaces({ invitations: invitationsRespond }) .then(async () => { captureEvent(MEMBER_ACCEPTED, { member_id: invitation?.id, - role: getUserRole(invitation?.role!), + role: getUserRole(invitation?.role as any), project_id: undefined, accepted_from: "App", state: "SUCCESS", @@ -83,7 +84,7 @@ export const Invitations: React.FC = (props) => { console.error(error); captureEvent(MEMBER_ACCEPTED, { member_id: invitation?.id, - role: getUserRole(invitation?.role!), + role: getUserRole(invitation?.role as any), project_id: undefined, accepted_from: "App", state: "FAILED", diff --git a/web/components/onboarding/invite-members.tsx b/web/components/onboarding/invite-members.tsx index 1f78fcf20..c5a0d51c2 100644 --- a/web/components/onboarding/invite-members.tsx +++ b/web/components/onboarding/invite-members.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useRef, useState } from "react"; import Image from "next/image"; import { useTheme } from "next-themes"; -import { Listbox, Transition } from "@headlessui/react"; import { Control, Controller, @@ -13,29 +12,30 @@ import { useFieldArray, useForm, } from "react-hook-form"; +import { Listbox, Transition } from "@headlessui/react"; +// icons import { Check, ChevronDown, Plus, XCircle } from "lucide-react"; -// services -import { WorkspaceService } from "services/workspace.service"; -// hooks -import { useEventTracker } from "hooks/store"; // ui import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; // components import { OnboardingStepIndicator } from "components/onboarding/step-indicator"; -// hooks -import useDynamicDropdownPosition from "hooks/use-dynamic-dropdown"; -// types -import { IUser, IWorkspace, TOnboardingSteps } from "@plane/types"; // constants -import { EUserWorkspaceRoles, ROLE } from "constants/workspace"; import { MEMBER_INVITED } from "constants/event-tracker"; +import { EUserWorkspaceRoles, ROLE } from "constants/workspace"; // helpers import { getUserRole } from "helpers/user.helper"; +// hooks +import { useEventTracker } from "hooks/store"; +import useDynamicDropdownPosition from "hooks/use-dynamic-dropdown"; // assets -import user1 from "public/users/user-1.png"; -import user2 from "public/users/user-2.png"; import userDark from "public/onboarding/user-dark.svg"; import userLight from "public/onboarding/user-light.svg"; +import user1 from "public/users/user-1.png"; +import user2 from "public/users/user-2.png"; +// services +import { WorkspaceService } from "services/workspace.service"; +// types +import { IUser, IWorkspace, TOnboardingSteps } from "@plane/types"; type Props = { finishOnboarding: () => Promise; @@ -368,8 +368,8 @@ export const InviteMembers: React.FC = (props) => { >

Members

- {Array.from({ length: 4 }).map(() => ( -
+ {Array.from({ length: 4 }).map((i) => ( +
user
diff --git a/web/components/onboarding/join-workspaces.tsx b/web/components/onboarding/join-workspaces.tsx index 08ffab379..e59db31c7 100644 --- a/web/components/onboarding/join-workspaces.tsx +++ b/web/components/onboarding/join-workspaces.tsx @@ -1,10 +1,10 @@ import React from "react"; -import { Controller, useForm } from "react-hook-form"; import { observer } from "mobx-react-lite"; +import { Controller, useForm } from "react-hook-form"; // hooks +import { Invitations, OnboardingSidebar, OnboardingStepIndicator, Workspace } from "components/onboarding"; import { useUser } from "hooks/store"; // components -import { Invitations, OnboardingSidebar, OnboardingStepIndicator, Workspace } from "components/onboarding"; // types import { IWorkspace, TOnboardingSteps } from "@plane/types"; diff --git a/web/components/onboarding/onboarding-sidebar.tsx b/web/components/onboarding/onboarding-sidebar.tsx index af0da75ca..42ec102cb 100644 --- a/web/components/onboarding/onboarding-sidebar.tsx +++ b/web/components/onboarding/onboarding-sidebar.tsx @@ -1,6 +1,6 @@ import React, { useEffect } from "react"; -import { useTheme } from "next-themes"; import Image from "next/image"; +import { useTheme } from "next-themes"; import { Control, Controller, UseFormSetValue, UseFormWatch } from "react-hook-form"; import { BarChart2, @@ -20,9 +20,9 @@ import { Avatar, DiceIcon, PhotoFilterIcon } from "@plane/ui"; // hooks import { useUser, useWorkspace } from "hooks/store"; // types +import projectEmoji from "public/emoji/project-emoji.svg"; import { IWorkspace } from "@plane/types"; // assets -import projectEmoji from "public/emoji/project-emoji.svg"; const workspaceLinks = [ { @@ -86,8 +86,9 @@ type Props = { watch?: UseFormWatch; userFullName?: string; }; -var timer: number = 0; -var lastWorkspaceName: string = ""; + +let timer: number = 0; +let lastWorkspaceName: string = ""; export const OnboardingSidebar: React.FC = (props) => { const { workspaceName, showProject, control, setValue, watch, userFullName } = props; diff --git a/web/components/onboarding/switch-delete-account-modal.tsx b/web/components/onboarding/switch-delete-account-modal.tsx index ff37e5802..c84911220 100644 --- a/web/components/onboarding/switch-delete-account-modal.tsx +++ b/web/components/onboarding/switch-delete-account-modal.tsx @@ -1,13 +1,13 @@ import React, { useState } from "react"; import { useRouter } from "next/router"; -import { mutate } from "swr"; import { useTheme } from "next-themes"; +import { mutate } from "swr"; import { Dialog, Transition } from "@headlessui/react"; import { Trash2 } from "lucide-react"; // hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; import { useUser } from "hooks/store"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; type Props = { isOpen: boolean; diff --git a/web/components/onboarding/tour/root.tsx b/web/components/onboarding/tour/root.tsx index c09a2a94c..4c44f8c62 100644 --- a/web/components/onboarding/tour/root.tsx +++ b/web/components/onboarding/tour/root.tsx @@ -1,22 +1,22 @@ import { useState } from "react"; -import Image from "next/image"; import { observer } from "mobx-react-lite"; +import Image from "next/image"; import { X } from "lucide-react"; // hooks +import { Button } from "@plane/ui"; +import { TourSidebar } from "components/onboarding"; +import { PRODUCT_TOUR_SKIPPED, PRODUCT_TOUR_STARTED } from "constants/event-tracker"; import { useApplication, useEventTracker, useUser } from "hooks/store"; // components -import { TourSidebar } from "components/onboarding"; // ui -import { Button } from "@plane/ui"; // assets -import PlaneWhiteLogo from "public/plane-logos/white-horizontal.svg"; -import IssuesTour from "public/onboarding/issues.webp"; import CyclesTour from "public/onboarding/cycles.webp"; +import IssuesTour from "public/onboarding/issues.webp"; import ModulesTour from "public/onboarding/modules.webp"; -import ViewsTour from "public/onboarding/views.webp"; import PagesTour from "public/onboarding/pages.webp"; +import ViewsTour from "public/onboarding/views.webp"; +import PlaneWhiteLogo from "public/plane-logos/white-horizontal.svg"; // constants -import { PRODUCT_TOUR_SKIPPED, PRODUCT_TOUR_STARTED } from "constants/event-tracker"; type Props = { onComplete: () => void; diff --git a/web/components/onboarding/tour/sidebar.tsx b/web/components/onboarding/tour/sidebar.tsx index 350bd638a..535002493 100644 --- a/web/components/onboarding/tour/sidebar.tsx +++ b/web/components/onboarding/tour/sidebar.tsx @@ -1,6 +1,6 @@ // icons -import { ContrastIcon, DiceIcon, LayersIcon, PhotoFilterIcon } from "@plane/ui"; import { FileText } from "lucide-react"; +import { ContrastIcon, DiceIcon, LayersIcon, PhotoFilterIcon } from "@plane/ui"; // types import { TTourSteps } from "./root"; diff --git a/web/components/onboarding/user-details.tsx b/web/components/onboarding/user-details.tsx index a29df3c94..820f08da6 100644 --- a/web/components/onboarding/user-details.tsx +++ b/web/components/onboarding/user-details.tsx @@ -1,21 +1,22 @@ import React, { useState } from "react"; +import { observer } from "mobx-react-lite"; import Image from "next/image"; import { Controller, useForm } from "react-hook-form"; -import { observer } from "mobx-react-lite"; import { Camera, User2 } from "lucide-react"; +import { Button, Input } from "@plane/ui"; +// components +import { UserImageUploadModal } from "components/core"; +import { OnboardingSidebar, OnboardingStepIndicator } from "components/onboarding"; +// constants +import { USER_DETAILS } from "constants/event-tracker"; // hooks import { useEventTracker, useUser, useWorkspace } from "hooks/store"; -// components -import { Button, Input } from "@plane/ui"; -import { OnboardingSidebar, OnboardingStepIndicator } from "components/onboarding"; -import { UserImageUploadModal } from "components/core"; -// types -import { IUser } from "@plane/types"; -// services -import { FileService } from "services/file.service"; // assets import IssuesSvg from "public/onboarding/onboarding-issues.webp"; -import { USER_DETAILS } from "constants/event-tracker"; +// services +import { FileService } from "services/file.service"; +// types +import { IUser } from "@plane/types"; const defaultValues: Partial = { first_name: "", @@ -183,7 +184,7 @@ export const UserDetails: React.FC = observer((props) => { name="first_name" type="text" value={value} - autoFocus={true} + autoFocus onChange={(event) => { setUserName(event.target.value); onChange(event); @@ -220,6 +221,7 @@ export const UserDetails: React.FC = observer((props) => {
{USE_CASES.map((useCase) => (
) => Promise; diff --git a/web/components/page-views/signin.tsx b/web/components/page-views/signin.tsx index 2f1d62f84..7929a5e37 100644 --- a/web/components/page-views/signin.tsx +++ b/web/components/page-views/signin.tsx @@ -2,13 +2,13 @@ import { useEffect } from "react"; import { observer } from "mobx-react-lite"; import Image from "next/image"; // hooks +import { Spinner } from "@plane/ui"; +import { SignInRoot } from "components/account"; +import { PageHead } from "components/core"; import { useApplication, useUser } from "hooks/store"; import useSignInRedirection from "hooks/use-sign-in-redirection"; // components -import { SignInRoot } from "components/account"; -import { PageHead } from "components/core"; // ui -import { Spinner } from "@plane/ui"; // images import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text.png"; diff --git a/web/components/page-views/workspace-dashboard.tsx b/web/components/page-views/workspace-dashboard.tsx index 0d5d4115a..2f8392bc2 100644 --- a/web/components/page-views/workspace-dashboard.tsx +++ b/web/components/page-views/workspace-dashboard.tsx @@ -1,20 +1,20 @@ import { useEffect } from "react"; -import { useTheme } from "next-themes"; import { observer } from "mobx-react-lite"; +import { useTheme } from "next-themes"; // hooks -import { useApplication, useEventTracker, useDashboard, useProject, useUser } from "hooks/store"; // components -import { TourRoot } from "components/onboarding"; -import { UserGreetingsView } from "components/user"; -import { IssuePeekOverview } from "components/issues"; +import { Spinner } from "@plane/ui"; import { DashboardWidgets } from "components/dashboard"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { IssuePeekOverview } from "components/issues"; +import { TourRoot } from "components/onboarding"; +import { UserGreetingsView } from "components/user"; // ui -import { Spinner } from "@plane/ui"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; -import { PRODUCT_TOUR_COMPLETED } from "constants/event-tracker"; import { WORKSPACE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { PRODUCT_TOUR_COMPLETED } from "constants/event-tracker"; +import { EUserWorkspaceRoles } from "constants/workspace"; +import { useApplication, useEventTracker, useDashboard, useProject, useUser } from "hooks/store"; export const WorkspaceDashboardView = observer(() => { // theme diff --git a/web/components/pages/create-update-page-modal.tsx b/web/components/pages/create-update-page-modal.tsx index eea7e9d7f..c3e22e52e 100644 --- a/web/components/pages/create-update-page-modal.tsx +++ b/web/components/pages/create-update-page-modal.tsx @@ -2,15 +2,15 @@ import React, { FC } from "react"; import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; // components -import { PageForm } from "./page-form"; -// hooks +import { PAGE_CREATED, PAGE_UPDATED } from "constants/event-tracker"; import { useEventTracker } from "hooks/store"; +// hooks // types -import { IPage } from "@plane/types"; import { useProjectPages } from "hooks/store/use-project-page"; import { IPageStore } from "store/page.store"; +import { IPage } from "@plane/types"; +import { PageForm } from "./page-form"; // constants -import { PAGE_CREATED, PAGE_UPDATED } from "constants/event-tracker"; type Props = { // data?: IPage | null; diff --git a/web/components/pages/delete-page-modal.tsx b/web/components/pages/delete-page-modal.tsx index 67cd175f0..362dae172 100644 --- a/web/components/pages/delete-page-modal.tsx +++ b/web/components/pages/delete-page-modal.tsx @@ -1,16 +1,16 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; import { AlertTriangle } from "lucide-react"; -// hooks -import { useEventTracker, usePage } from "hooks/store"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; -// types -import { useProjectPages } from "hooks/store/use-project-page"; // constants import { PAGE_DELETED } from "constants/event-tracker"; +// hooks +import { useEventTracker, usePage } from "hooks/store"; +import { useProjectPages } from "hooks/store/use-project-page"; +// types type TConfirmPageDeletionProps = { pageId: string; diff --git a/web/components/pages/page-form.tsx b/web/components/pages/page-form.tsx index 4f5874e5f..97e881096 100644 --- a/web/components/pages/page-form.tsx +++ b/web/components/pages/page-form.tsx @@ -2,10 +2,10 @@ import { Controller, useForm } from "react-hook-form"; // ui import { Button, Input, Tooltip } from "@plane/ui"; // types -import { IPage } from "@plane/types"; // constants import { PAGE_ACCESS_SPECIFIERS } from "constants/page"; import { IPageStore } from "store/page.store"; +import { IPage } from "@plane/types"; type Props = { handleFormSubmit: (values: IPage) => Promise; diff --git a/web/components/pages/pages-list/all-pages-list.tsx b/web/components/pages/pages-list/all-pages-list.tsx index 4ed759a0f..e7cb21775 100644 --- a/web/components/pages/pages-list/all-pages-list.tsx +++ b/web/components/pages/pages-list/all-pages-list.tsx @@ -1,9 +1,9 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { Loader } from "@plane/ui"; import { PagesListView } from "components/pages/pages-list"; // ui -import { Loader } from "@plane/ui"; import { useProjectPages } from "hooks/store/use-project-specific-pages"; export const AllPagesList: FC = observer(() => { diff --git a/web/components/pages/pages-list/archived-pages-list.tsx b/web/components/pages/pages-list/archived-pages-list.tsx index eb57d7558..f7bcb6059 100644 --- a/web/components/pages/pages-list/archived-pages-list.tsx +++ b/web/components/pages/pages-list/archived-pages-list.tsx @@ -1,10 +1,10 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // components +import { Loader, Spinner } from "@plane/ui"; import { PagesListView } from "components/pages/pages-list"; // hooks // ui -import { Loader, Spinner } from "@plane/ui"; import { useProjectPages } from "hooks/store/use-project-specific-pages"; export const ArchivedPagesList: FC = observer(() => { diff --git a/web/components/pages/pages-list/favorite-pages-list.tsx b/web/components/pages/pages-list/favorite-pages-list.tsx index 4ce301a68..4d2ad5019 100644 --- a/web/components/pages/pages-list/favorite-pages-list.tsx +++ b/web/components/pages/pages-list/favorite-pages-list.tsx @@ -1,10 +1,10 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // components +import { Loader } from "@plane/ui"; import { PagesListView } from "components/pages/pages-list"; // hooks // ui -import { Loader } from "@plane/ui"; import { useProjectPages } from "hooks/store/use-project-specific-pages"; export const FavoritePagesList: FC = observer(() => { diff --git a/web/components/pages/pages-list/list-item.tsx b/web/components/pages/pages-list/list-item.tsx index 6b1a4793d..d4cb3c023 100644 --- a/web/components/pages/pages-list/list-item.tsx +++ b/web/components/pages/pages-list/list-item.tsx @@ -1,6 +1,7 @@ import { FC, useState } from "react"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; +import { useRouter } from "next/router"; import { AlertCircle, Archive, @@ -13,17 +14,16 @@ import { Star, Trash2, } from "lucide-react"; -import { copyUrlToClipboard } from "helpers/string.helper"; -import { renderFormattedTime, renderFormattedDate } from "helpers/date-time.helper"; // ui import { CustomMenu, Tooltip } from "@plane/ui"; // components import { CreateUpdatePageModal, DeletePageModal } from "components/pages"; // constants import { EUserProjectRoles } from "constants/project"; -import { useRouter } from "next/router"; -import { useProjectPages } from "hooks/store/use-project-specific-pages"; +import { renderFormattedTime, renderFormattedDate } from "helpers/date-time.helper"; +import { copyUrlToClipboard } from "helpers/string.helper"; import { useMember, usePage, useUser } from "hooks/store"; +import { useProjectPages } from "hooks/store/use-project-specific-pages"; import { IIssueLabel } from "@plane/types"; export interface IPagesListItem { diff --git a/web/components/pages/pages-list/list-view.tsx b/web/components/pages/pages-list/list-view.tsx index ebd1fa128..0d468ef3c 100644 --- a/web/components/pages/pages-list/list-view.tsx +++ b/web/components/pages/pages-list/list-view.tsx @@ -2,16 +2,16 @@ import { FC } from "react"; import { useRouter } from "next/router"; import { useTheme } from "next-themes"; // hooks +import { Loader } from "@plane/ui"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { PAGE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EUserProjectRoles } from "constants/project"; import { useApplication, useUser } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; // components -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; import { PagesListItem } from "./list-item"; // ui -import { Loader } from "@plane/ui"; // constants -import { EUserProjectRoles } from "constants/project"; -import { PAGE_EMPTY_STATE_DETAILS } from "constants/empty-state"; type IPagesListView = { pageIds: string[]; diff --git a/web/components/pages/pages-list/private-page-list.tsx b/web/components/pages/pages-list/private-page-list.tsx index 15a577d80..316c6bf44 100644 --- a/web/components/pages/pages-list/private-page-list.tsx +++ b/web/components/pages/pages-list/private-page-list.tsx @@ -2,9 +2,9 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // hooks // components +import { Loader } from "@plane/ui"; import { PagesListView } from "components/pages/pages-list"; // ui -import { Loader } from "@plane/ui"; import { useProjectPages } from "hooks/store/use-project-specific-pages"; export const PrivatePagesList: FC = observer(() => { diff --git a/web/components/pages/pages-list/recent-pages-list.tsx b/web/components/pages/pages-list/recent-pages-list.tsx index 71bbf12ac..28a430031 100644 --- a/web/components/pages/pages-list/recent-pages-list.tsx +++ b/web/components/pages/pages-list/recent-pages-list.tsx @@ -2,18 +2,18 @@ import React, { FC } from "react"; import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; // hooks +import { Loader } from "@plane/ui"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { PagesListView } from "components/pages/pages-list"; +import { PAGE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EUserProjectRoles } from "constants/project"; +import { replaceUnderscoreIfSnakeCase } from "helpers/string.helper"; import { useApplication, useUser } from "hooks/store"; import { useProjectPages } from "hooks/store/use-project-specific-pages"; // components -import { PagesListView } from "components/pages/pages-list"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Loader } from "@plane/ui"; // helpers -import { replaceUnderscoreIfSnakeCase } from "helpers/string.helper"; // constants -import { EUserProjectRoles } from "constants/project"; -import { PAGE_EMPTY_STATE_DETAILS } from "constants/empty-state"; export const RecentPagesList: FC = observer(() => { // theme diff --git a/web/components/pages/pages-list/shared-pages-list.tsx b/web/components/pages/pages-list/shared-pages-list.tsx index d20a1350e..2626db13c 100644 --- a/web/components/pages/pages-list/shared-pages-list.tsx +++ b/web/components/pages/pages-list/shared-pages-list.tsx @@ -1,10 +1,10 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // components +import { Loader } from "@plane/ui"; import { PagesListView } from "components/pages/pages-list"; // hooks // ui -import { Loader } from "@plane/ui"; import { useProjectPages } from "hooks/store/use-project-specific-pages"; export const SharedPagesList: FC = observer(() => { diff --git a/web/components/profile/activity/activity-list.tsx b/web/components/profile/activity/activity-list.tsx index 066912721..e77128e9f 100644 --- a/web/components/profile/activity/activity-list.tsx +++ b/web/components/profile/activity/activity-list.tsx @@ -1,16 +1,16 @@ -import Link from "next/link"; +import { RichReadOnlyEditor } from "@plane/rich-text-editor"; import { observer } from "mobx-react"; +import Link from "next/link"; import { History, MessageSquare } from "lucide-react"; // editor -import { RichReadOnlyEditor } from "@plane/rich-text-editor"; // hooks -import { useUser } from "hooks/store"; // components import { ActivityIcon, ActivityMessage, IssueLink } from "components/core"; // ui import { ActivitySettingsLoader } from "components/ui"; // helpers import { calculateTimeAgo } from "helpers/date-time.helper"; +import { useUser } from "hooks/store"; // types import { IUserActivityResponse } from "@plane/types"; diff --git a/web/components/profile/activity/download-button.tsx b/web/components/profile/activity/download-button.tsx index ff928dc2a..491ebf45f 100644 --- a/web/components/profile/activity/download-button.tsx +++ b/web/components/profile/activity/download-button.tsx @@ -1,11 +1,11 @@ import { useState } from "react"; import { useRouter } from "next/router"; // services -import { UserService } from "services/user.service"; // ui import { Button } from "@plane/ui"; // helpers import { renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { UserService } from "services/user.service"; const userService = new UserService(); diff --git a/web/components/profile/activity/profile-activity-list.tsx b/web/components/profile/activity/profile-activity-list.tsx index 3912c8568..6311c382c 100644 --- a/web/components/profile/activity/profile-activity-list.tsx +++ b/web/components/profile/activity/profile-activity-list.tsx @@ -1,22 +1,22 @@ import { useEffect } from "react"; -import Link from "next/link"; +import { RichReadOnlyEditor } from "@plane/rich-text-editor"; import { observer } from "mobx-react"; +import Link from "next/link"; import useSWR from "swr"; import { History, MessageSquare } from "lucide-react"; // hooks +import { ActivityIcon, ActivityMessage, IssueLink } from "components/core"; +import { ActivitySettingsLoader } from "components/ui"; +import { USER_ACTIVITY } from "constants/fetch-keys"; +import { calculateTimeAgo } from "helpers/date-time.helper"; import { useUser } from "hooks/store"; // services import { UserService } from "services/user.service"; // editor -import { RichReadOnlyEditor } from "@plane/rich-text-editor"; // components -import { ActivityIcon, ActivityMessage, IssueLink } from "components/core"; // ui -import { ActivitySettingsLoader } from "components/ui"; // helpers -import { calculateTimeAgo } from "helpers/date-time.helper"; // fetch-keys -import { USER_ACTIVITY } from "constants/fetch-keys"; // services const userService = new UserService(); diff --git a/web/components/profile/activity/workspace-activity-list.tsx b/web/components/profile/activity/workspace-activity-list.tsx index c2c75a195..aa5a03dee 100644 --- a/web/components/profile/activity/workspace-activity-list.tsx +++ b/web/components/profile/activity/workspace-activity-list.tsx @@ -2,11 +2,11 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; // services +import { USER_PROFILE_ACTIVITY } from "constants/fetch-keys"; import { UserService } from "services/user.service"; // components import { ActivityList } from "./activity-list"; // fetch-keys -import { USER_PROFILE_ACTIVITY } from "constants/fetch-keys"; // services const userService = new UserService(); diff --git a/web/components/profile/navbar.tsx b/web/components/profile/navbar.tsx index 582f0f26b..ecc0028db 100644 --- a/web/components/profile/navbar.tsx +++ b/web/components/profile/navbar.tsx @@ -1,7 +1,7 @@ import React from "react"; -import { useRouter } from "next/router"; import Link from "next/link"; +import { useRouter } from "next/router"; // components import { ProfileIssuesFilter } from "components/profile"; diff --git a/web/components/profile/overview/activity.tsx b/web/components/profile/overview/activity.tsx index 112c073ab..4a6cf98be 100644 --- a/web/components/profile/overview/activity.tsx +++ b/web/components/profile/overview/activity.tsx @@ -1,21 +1,21 @@ +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react"; //hooks +import { Loader } from "@plane/ui"; +import { ActivityMessage, IssueLink } from "components/core"; +import { ProfileEmptyState } from "components/ui"; +import { USER_PROFILE_ACTIVITY } from "constants/fetch-keys"; +import { calculateTimeAgo } from "helpers/date-time.helper"; import { useUser } from "hooks/store"; // services +import recentActivityEmptyState from "public/empty-state/recent_activity.svg"; import { UserService } from "services/user.service"; // components -import { ActivityMessage, IssueLink } from "components/core"; // ui -import { ProfileEmptyState } from "components/ui"; -import { Loader } from "@plane/ui"; // image -import recentActivityEmptyState from "public/empty-state/recent_activity.svg"; // helpers -import { calculateTimeAgo } from "helpers/date-time.helper"; // fetch-keys -import { USER_PROFILE_ACTIVITY } from "constants/fetch-keys"; // services const userService = new UserService(); diff --git a/web/components/profile/overview/priority-distribution.tsx b/web/components/profile/overview/priority-distribution.tsx new file mode 100644 index 000000000..12e430409 --- /dev/null +++ b/web/components/profile/overview/priority-distribution.tsx @@ -0,0 +1,88 @@ +// ui +import { Loader } from "@plane/ui"; +import { BarGraph, ProfileEmptyState } from "components/ui"; +// image +import { capitalizeFirstLetter } from "helpers/string.helper"; +import emptyBarGraph from "public/empty-state/empty_bar_graph.svg"; +// helpers +// types +import { IUserProfileData } from "@plane/types"; + +type Props = { + userProfile: IUserProfileData | undefined; +}; + +export const ProfilePriorityDistribution: React.FC = ({ userProfile }) => ( +
+

Issues by Priority

+ {userProfile ? ( +
+ {userProfile.priority_distribution.length > 0 ? ( + ({ + priority: capitalizeFirstLetter(priority.priority ?? "None"), + value: priority.priority_count, + }))} + height="300px" + indexBy="priority" + keys={["value"]} + borderRadius={4} + padding={0.7} + customYAxisTickValues={userProfile.priority_distribution.map((p) => p.priority_count)} + tooltip={(datum) => ( +
+ + {datum.data.priority}: + {datum.value} +
+ )} + colors={(datum) => { + if (datum.data.priority === "Urgent") return "#991b1b"; + else if (datum.data.priority === "High") return "#ef4444"; + else if (datum.data.priority === "Medium") return "#f59e0b"; + else if (datum.data.priority === "Low") return "#16a34a"; + else return "#e5e5e5"; + }} + theme={{ + axis: { + domain: { + line: { + stroke: "transparent", + }, + }, + }, + grid: { + line: { + stroke: "transparent", + }, + }, + }} + /> + ) : ( +
+ +
+ )} +
+ ) : ( +
+ + + + + + + +
+ )} +
+); diff --git a/web/components/profile/overview/priority-distribution/priority-distribution.tsx b/web/components/profile/overview/priority-distribution/priority-distribution.tsx index 63559bdee..48d612dff 100644 --- a/web/components/profile/overview/priority-distribution/priority-distribution.tsx +++ b/web/components/profile/overview/priority-distribution/priority-distribution.tsx @@ -1,9 +1,9 @@ // components -import { PriorityDistributionContent } from "./main-content"; // ui import { Loader } from "@plane/ui"; // types import { IUserPriorityDistribution } from "@plane/types"; +import { PriorityDistributionContent } from "./main-content"; type Props = { priorityDistribution: IUserPriorityDistribution[] | undefined; diff --git a/web/components/profile/overview/state-distribution.tsx b/web/components/profile/overview/state-distribution.tsx index f38283aa7..25de06c84 100644 --- a/web/components/profile/overview/state-distribution.tsx +++ b/web/components/profile/overview/state-distribution.tsx @@ -1,11 +1,11 @@ // ui import { ProfileEmptyState, PieGraph } from "components/ui"; // image +import { STATE_GROUPS } from "constants/state"; import stateGraph from "public/empty-state/state_graph.svg"; // types import { IUserProfileData, IUserStateDistribution } from "@plane/types"; // constants -import { STATE_GROUPS } from "constants/state"; type Props = { stateDistribution: IUserStateDistribution[]; diff --git a/web/components/profile/overview/stats.tsx b/web/components/profile/overview/stats.tsx index 3f96488a0..62873ee38 100644 --- a/web/components/profile/overview/stats.tsx +++ b/web/components/profile/overview/stats.tsx @@ -1,9 +1,9 @@ -import { useRouter } from "next/router"; import Link from "next/link"; +import { useRouter } from "next/router"; // ui -import { CreateIcon, LayerStackIcon, Loader } from "@plane/ui"; import { UserCircle2 } from "lucide-react"; +import { CreateIcon, LayerStackIcon, Loader } from "@plane/ui"; // types import { IUserProfileData } from "@plane/types"; diff --git a/web/components/profile/overview/workload.tsx b/web/components/profile/overview/workload.tsx index 86989748d..54e03b047 100644 --- a/web/components/profile/overview/workload.tsx +++ b/web/components/profile/overview/workload.tsx @@ -1,7 +1,7 @@ // types +import { STATE_GROUPS } from "constants/state"; import { IUserStateDistribution } from "@plane/types"; // constants -import { STATE_GROUPS } from "constants/state"; type Props = { stateDistribution: IUserStateDistribution[]; diff --git a/web/components/profile/preferences/index.ts b/web/components/profile/preferences/index.ts index ddda5712c..56ef42216 100644 --- a/web/components/profile/preferences/index.ts +++ b/web/components/profile/preferences/index.ts @@ -1 +1 @@ -export * from "./email-notification-form"; \ No newline at end of file +export * from "./email-notification-form"; diff --git a/web/components/profile/profile-issues-filter.tsx b/web/components/profile/profile-issues-filter.tsx index 5b4f9c8ed..491c00f3a 100644 --- a/web/components/profile/profile-issues-filter.tsx +++ b/web/components/profile/profile-issues-filter.tsx @@ -4,9 +4,9 @@ import { useRouter } from "next/router"; // components import { DisplayFiltersSelection, FilterSelection, FiltersDropdown, LayoutSelection } from "components/issues"; // hooks +import { EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { useIssues, useLabel } from "hooks/store"; // constants -import { EIssuesStoreType, EIssueFilterType, ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions, TIssueLayouts } from "@plane/types"; export const ProfileIssuesFilter = observer(() => { diff --git a/web/components/profile/profile-issues.tsx b/web/components/profile/profile-issues.tsx index 7e501764a..b6a99baf9 100644 --- a/web/components/profile/profile-issues.tsx +++ b/web/components/profile/profile-issues.tsx @@ -1,20 +1,20 @@ import React, { useEffect } from "react"; -import { useRouter } from "next/router"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import useSWR from "swr"; // components -import { ProfileIssuesListLayout } from "components/issues/issue-layouts/list/roots/profile-issues-root"; -import { ProfileIssuesKanBanLayout } from "components/issues/issue-layouts/kanban/roots/profile-issues-root"; -import { IssuePeekOverview, ProfileIssuesAppliedFiltersRoot } from "components/issues"; -import { KanbanLayoutLoader, ListLayoutLoader } from "components/ui"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { IssuePeekOverview, ProfileIssuesAppliedFiltersRoot } from "components/issues"; +import { ProfileIssuesKanBanLayout } from "components/issues/issue-layouts/kanban/roots/profile-issues-root"; +import { ProfileIssuesListLayout } from "components/issues/issue-layouts/list/roots/profile-issues-root"; +import { KanbanLayoutLoader, ListLayoutLoader } from "components/ui"; // hooks +import { PROFILE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EIssuesStoreType } from "constants/issue"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useIssues, useUser } from "hooks/store"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; -import { EIssuesStoreType } from "constants/issue"; -import { PROFILE_EMPTY_STATE_DETAILS } from "constants/empty-state"; interface IProfileIssuesPage { type: "assigned" | "subscribed" | "created"; @@ -41,8 +41,8 @@ export const ProfileIssuesPage = observer((props: IProfileIssuesPage) => { } = useIssues(EIssuesStoreType.PROFILE); useEffect(() => { - setViewId(type); - }, [type]); + if (setViewId) setViewId(type); + }, [type, setViewId]); useSWR( workspaceSlug && userId ? `CURRENT_WORKSPACE_PROFILE_ISSUES_${workspaceSlug}_${userId}_${type}` : null, diff --git a/web/components/profile/sidebar.tsx b/web/components/profile/sidebar.tsx index 48bb7d323..e8b234cb8 100644 --- a/web/components/profile/sidebar.tsx +++ b/web/components/profile/sidebar.tsx @@ -1,25 +1,26 @@ import { useEffect, useRef } from "react"; -import { useRouter } from "next/router"; -import Link from "next/link"; -import useSWR from "swr"; -import { Disclosure, Transition } from "@headlessui/react"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import useSWR from "swr"; +// ui +import { Disclosure, Transition } from "@headlessui/react"; +// icons +import { ChevronDown, Pencil } from "lucide-react"; +// plane ui +import { Loader, Tooltip } from "@plane/ui"; +// fetch-keys +import { USER_PROFILE_PROJECT_SEGREGATION } from "constants/fetch-keys"; +// helpers +import { renderFormattedDate } from "helpers/date-time.helper"; +import { renderEmoji } from "helpers/emoji.helper"; // hooks -import useOutsideClickDetector from "hooks/use-outside-click-detector"; import { useApplication, useUser } from "hooks/store"; +import useOutsideClickDetector from "hooks/use-outside-click-detector"; // services import { UserService } from "services/user.service"; // components import { ProfileSidebarTime } from "./time"; -// ui -import { Loader, Tooltip } from "@plane/ui"; -// icons -import { ChevronDown, Pencil } from "lucide-react"; -// helpers -import { renderFormattedDate } from "helpers/date-time.helper"; -import { renderEmoji } from "helpers/emoji.helper"; -// fetch-keys -import { USER_PROFILE_PROJECT_SEGREGATION } from "constants/fetch-keys"; // services const userService = new UserService(); @@ -76,7 +77,7 @@ export const ProfileSidebar = observer(() => { return (
{userProjectsData ? ( @@ -106,7 +107,7 @@ export const ProfileSidebar = observer(() => { className="h-full w-full rounded object-cover" /> ) : ( -
+
{userProjectsData.user_data.first_name?.[0]}
)} diff --git a/web/components/project/card-list.tsx b/web/components/project/card-list.tsx index 624e30bde..a19b53fbb 100644 --- a/web/components/project/card-list.tsx +++ b/web/components/project/card-list.tsx @@ -1,14 +1,14 @@ import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; // hooks -import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; // components -import { ProjectCard } from "components/project"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { ProjectCard } from "components/project"; import { ProjectsLoader } from "components/ui"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; import { WORKSPACE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EUserWorkspaceRoles } from "constants/workspace"; +import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; export const ProjectCardList = observer(() => { // theme diff --git a/web/components/project/card.tsx b/web/components/project/card.tsx index 9f554cfea..c74e9ee75 100644 --- a/web/components/project/card.tsx +++ b/web/components/project/card.tsx @@ -1,21 +1,20 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import { LinkIcon, Lock, Pencil, Star } from "lucide-react"; import Link from "next/link"; -// hooks -import { useProject } from "hooks/store"; -// components -import { DeleteProjectModal, JoinProjectModal } from "components/project"; +import { useRouter } from "next/router"; +import { LinkIcon, Lock, Pencil, Star } from "lucide-react"; // ui import { Avatar, AvatarGroup, Button, Tooltip, TOAST_TYPE, setToast, setPromiseToast } from "@plane/ui"; +// components +import { DeleteProjectModal, JoinProjectModal, EUserProjectRoles } from "components/project"; // helpers -import { copyTextToClipboard } from "helpers/string.helper"; import { renderEmoji } from "helpers/emoji.helper"; +import { copyTextToClipboard } from "helpers/string.helper"; +// hooks +import { useProject } from "hooks/store"; // types import type { IProject } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; export type ProjectCardProps = { project: IProject; diff --git a/web/components/project/confirm-project-member-remove.tsx b/web/components/project/confirm-project-member-remove.tsx index 7ab4afa0a..2c94c092d 100644 --- a/web/components/project/confirm-project-member-remove.tsx +++ b/web/components/project/confirm-project-member-remove.tsx @@ -1,11 +1,11 @@ import React, { useState } from "react"; -import { Dialog, Transition } from "@headlessui/react"; import { observer } from "mobx-react-lite"; +import { Dialog, Transition } from "@headlessui/react"; import { AlertTriangle } from "lucide-react"; // hooks +import { Button } from "@plane/ui"; import { useUser } from "hooks/store"; // ui -import { Button } from "@plane/ui"; // types import { IUserLite } from "@plane/types"; @@ -94,8 +94,8 @@ export const ConfirmProjectMemberRemove: React.FC = observer((props) => { ? "Leaving..." : "Leave" : isDeleteLoading - ? "Removing..." - : "Remove"} + ? "Removing..." + : "Remove"}
diff --git a/web/components/project/create-project-modal.tsx b/web/components/project/create-project-modal.tsx index f7bbd92cf..01cbb5888 100644 --- a/web/components/project/create-project-modal.tsx +++ b/web/components/project/create-project-modal.tsx @@ -1,23 +1,22 @@ import { useState, useEffect, Fragment, FC, ChangeEvent } from "react"; +import { observer } from "mobx-react-lite"; import { useForm, Controller } from "react-hook-form"; import { Dialog, Transition } from "@headlessui/react"; -import { observer } from "mobx-react-lite"; import { X } from "lucide-react"; -// hooks -import { useEventTracker, useProject, useUser } from "hooks/store"; // ui import { Button, CustomSelect, Input, TextArea, TOAST_TYPE, setToast } from "@plane/ui"; // components import { ImagePickerPopover } from "components/core"; -import EmojiIconPicker from "components/emoji-icon-picker"; import { MemberDropdown } from "components/dropdowns"; +import EmojiIconPicker from "components/emoji-icon-picker"; +// constants +import { PROJECT_CREATED } from "constants/event-tracker"; +import { NETWORK_CHOICES, PROJECT_UNSPLASH_COVERS } from "constants/project"; +import { EUserWorkspaceRoles } from "constants/workspace"; // helpers import { getRandomEmoji, renderEmoji } from "helpers/emoji.helper"; -// constants -import { NETWORK_CHOICES, PROJECT_UNSPLASH_COVERS } from "constants/project"; -// constants -import { EUserWorkspaceRoles } from "constants/workspace"; -import { PROJECT_CREATED } from "constants/event-tracker"; +// hooks +import { useEventTracker, useProject, useUser } from "hooks/store"; type Props = { isOpen: boolean; @@ -306,7 +305,7 @@ export const CreateProjectModal: FC = observer((props) => { onChange={handleIdentifierChange(onChange)} hasError={Boolean(errors.identifier)} placeholder="Identifier" - className="w-full text-xs focus:border-blue-400 uppercase" + className="w-full text-xs uppercase focus:border-blue-400" tabIndex={2} /> )} diff --git a/web/components/project/delete-project-modal.tsx b/web/components/project/delete-project-modal.tsx index 844bd3aad..bc26dcae4 100644 --- a/web/components/project/delete-project-modal.tsx +++ b/web/components/project/delete-project-modal.tsx @@ -4,13 +4,12 @@ import { Controller, useForm } from "react-hook-form"; import { Dialog, Transition } from "@headlessui/react"; import { AlertTriangle } from "lucide-react"; // hooks -import { useEventTracker, useProject, useWorkspace } from "hooks/store"; -// ui import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; +import { useEventTracker, useProject } from "hooks/store"; +// ui // types import type { IProject } from "@plane/types"; // constants -import { PROJECT_DELETED } from "constants/event-tracker"; type DeleteProjectModal = { isOpen: boolean; @@ -27,7 +26,6 @@ export const DeleteProjectModal: React.FC = (props) => { const { isOpen, project, onClose } = props; // store hooks const { captureProjectEvent } = useEventTracker(); - const { currentWorkspace } = useWorkspace(); const { deleteProject } = useProject(); // router const router = useRouter(); diff --git a/web/components/project/form.tsx b/web/components/project/form.tsx index ef5a20024..25186e08e 100644 --- a/web/components/project/form.tsx +++ b/web/components/project/form.tsx @@ -1,23 +1,24 @@ import { FC, useEffect, useState } from "react"; import { Controller, useForm } from "react-hook-form"; -// hooks -import { useEventTracker, useProject } from "hooks/store"; -// components -import EmojiIconPicker from "components/emoji-icon-picker"; -import { ImagePickerPopover } from "components/core"; -import { Button, CustomSelect, Input, TextArea, TOAST_TYPE, setToast } from "@plane/ui"; // icons import { Lock } from "lucide-react"; -// types -import { IProject, IWorkspace } from "@plane/types"; -// helpers -import { renderEmoji } from "helpers/emoji.helper"; -import { renderFormattedDate } from "helpers/date-time.helper"; +// ui +import { Button, CustomSelect, Input, TextArea, TOAST_TYPE, setToast } from "@plane/ui"; +// components +import { ImagePickerPopover } from "components/core"; +import EmojiIconPicker from "components/emoji-icon-picker"; // constants +import { PROJECT_UPDATED } from "constants/event-tracker"; import { NETWORK_CHOICES } from "constants/project"; +// helpers +import { renderFormattedDate } from "helpers/date-time.helper"; +import { renderEmoji } from "helpers/emoji.helper"; +// hooks +import { useEventTracker, useProject } from "hooks/store"; // services import { ProjectService } from "services/project"; -import { PROJECT_UPDATED } from "constants/event-tracker"; +// types +import { IProject, IWorkspace } from "@plane/types"; export interface IProjectDetailsForm { project: IProject; workspaceSlug: string; diff --git a/web/components/project/integration-card.tsx b/web/components/project/integration-card.tsx index cf256098f..84be19f71 100644 --- a/web/components/project/integration-card.tsx +++ b/web/components/project/integration-card.tsx @@ -1,24 +1,17 @@ import React from "react"; - import Image from "next/image"; - -import useSWR, { mutate } from "swr"; - -// services -import { ProjectService } from "services/project"; -// hooks import { useRouter } from "next/router"; +// ui +import { TOAST_TYPE, setToast } from "@plane/ui"; // components import { SelectRepository, SelectChannel } from "components/integration"; +// constants +import { PROJECT_GITHUB_REPOSITORY } from "constants/fetch-keys"; // icons import GithubLogo from "public/logos/github-square.png"; import SlackLogo from "public/services/slack.png"; -// ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // types import { IWorkspaceIntegration } from "@plane/types"; -// fetch-keys -import { PROJECT_GITHUB_REPOSITORY } from "constants/fetch-keys"; type Props = { integration: IWorkspaceIntegration; diff --git a/web/components/project/join-project-modal.tsx b/web/components/project/join-project-modal.tsx index 58b549b6c..384333581 100644 --- a/web/components/project/join-project-modal.tsx +++ b/web/components/project/join-project-modal.tsx @@ -2,9 +2,9 @@ import { useState, Fragment } from "react"; import { useRouter } from "next/router"; import { Transition, Dialog } from "@headlessui/react"; // hooks +import { Button } from "@plane/ui"; import { useProject, useUser } from "hooks/store"; // ui -import { Button } from "@plane/ui"; // types import type { IProject } from "@plane/types"; diff --git a/web/components/project/leave-project-modal.tsx b/web/components/project/leave-project-modal.tsx index 45618d4f2..6982d6316 100644 --- a/web/components/project/leave-project-modal.tsx +++ b/web/components/project/leave-project-modal.tsx @@ -1,17 +1,19 @@ import { FC, Fragment } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; +// headless ui import { Dialog, Transition } from "@headlessui/react"; +// icons import { AlertTriangleIcon } from "lucide-react"; -import { observer } from "mobx-react-lite"; -// hooks -import { useEventTracker, useUser } from "hooks/store"; // ui import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; -// types -import { IProject } from "@plane/types"; // constants import { PROJECT_MEMBER_LEAVE } from "constants/event-tracker"; +// hooks +import { useEventTracker, useUser } from "hooks/store"; +// types +import { IProject } from "@plane/types"; type FormData = { projectName: string; diff --git a/web/components/project/member-list-item.tsx b/web/components/project/member-list-item.tsx index 6bab775b8..43c2ce2a8 100644 --- a/web/components/project/member-list-item.tsx +++ b/web/components/project/member-list-item.tsx @@ -1,19 +1,19 @@ import { useState } from "react"; -import { useRouter } from "next/router"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; -// hooks -import { useEventTracker, useMember, useProject, useUser } from "hooks/store"; -// components -import { ConfirmProjectMemberRemove } from "components/project"; -// ui -import { CustomSelect, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +import Link from "next/link"; +import { useRouter } from "next/router"; // icons import { ChevronDown, Dot, XCircle } from "lucide-react"; +// ui +import { CustomSelect, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +// components +import { ConfirmProjectMemberRemove } from "components/project"; // constants -import { ROLE } from "constants/workspace"; -import { EUserProjectRoles } from "constants/project"; import { PROJECT_MEMBER_LEAVE } from "constants/event-tracker"; +import { EUserProjectRoles } from "constants/project"; +import { ROLE } from "constants/workspace"; +// hooks +import { useEventTracker, useMember, useProject, useUser } from "hooks/store"; type Props = { userId: string; diff --git a/web/components/project/member-list.tsx b/web/components/project/member-list.tsx index d7b432445..7eaab01ef 100644 --- a/web/components/project/member-list.tsx +++ b/web/components/project/member-list.tsx @@ -2,12 +2,12 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; import { Search } from "lucide-react"; // hooks -import { useEventTracker, useMember } from "hooks/store"; // components +import { Button } from "@plane/ui"; import { ProjectMemberListItem, SendProjectInvitationModal } from "components/project"; // ui -import { Button } from "@plane/ui"; import { MembersSettingsLoader } from "components/ui"; +import { useEventTracker, useMember } from "hooks/store"; export const ProjectMemberList: React.FC = observer(() => { // states diff --git a/web/components/project/member-select.tsx b/web/components/project/member-select.tsx index 7dc9b3233..491dbce0a 100644 --- a/web/components/project/member-select.tsx +++ b/web/components/project/member-select.tsx @@ -2,9 +2,9 @@ import React from "react"; import { observer } from "mobx-react-lite"; import { Ban } from "lucide-react"; // hooks +import { Avatar, CustomSearchSelect } from "@plane/ui"; import { useMember } from "hooks/store"; // ui -import { Avatar, CustomSearchSelect } from "@plane/ui"; type Props = { value: any; diff --git a/web/components/project/project-settings-member-defaults.tsx b/web/components/project/project-settings-member-defaults.tsx index 91c06cdfc..d6cffa7a4 100644 --- a/web/components/project/project-settings-member-defaults.tsx +++ b/web/components/project/project-settings-member-defaults.tsx @@ -1,20 +1,19 @@ import { useEffect } from "react"; -import { useRouter } from "next/router"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; -// hooks -import { useProject, useUser } from "hooks/store"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; - -import { MemberSelect } from "components/project"; +import useSWR from "swr"; // ui import { Loader, TOAST_TYPE, setToast } from "@plane/ui"; +// components +import { MemberSelect } from "components/project"; +// constants +import { PROJECT_MEMBERS } from "constants/fetch-keys"; +import { EUserProjectRoles } from "constants/project"; +// hooks +import { useProject, useUser } from "hooks/store"; // types import { IProject, IUserLite, IWorkspace } from "@plane/types"; -// fetch-keys -import { PROJECT_MEMBERS } from "constants/fetch-keys"; -// constants -import { EUserProjectRoles } from "constants/project"; const defaultValues: Partial = { project_lead: null, diff --git a/web/components/project/publish-project/modal.tsx b/web/components/project/publish-project/modal.tsx index 64cf87fb5..048eb0306 100644 --- a/web/components/project/publish-project/modal.tsx +++ b/web/components/project/publish-project/modal.tsx @@ -1,17 +1,21 @@ import { Fragment, useEffect, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; +// ui import { Dialog, Transition } from "@headlessui/react"; +// icons import { Check, CircleDot, Globe2 } from "lucide-react"; -// hooks -import { useProjectPublish } from "hooks/store"; // ui import { Button, Loader, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; -import { CustomPopover } from "./popover"; +// hooks +import { useProjectPublish } from "hooks/store"; +// store +import { IProjectPublishSettings, TProjectPublishViews } from "store/project/project-publish.store"; // types import { IProject } from "@plane/types"; -import { IProjectPublishSettings, TProjectPublishViews } from "store/project/project-publish.store"; +// local components +import { CustomPopover } from "./popover"; type Props = { isOpen: boolean; @@ -359,16 +363,16 @@ export const PublishProjectModal: React.FC = observer((props) => { : "hover:bg-custom-background-80 hover:text-custom-text-100" }`} onClick={() => { - const _views = + const optionViews = value.length > 0 ? value.includes(option.key) ? value.filter((_o: string) => _o !== option.key) : [...value, option.key] : [option.key]; - if (_views.length === 0) return; + if (optionViews.length === 0) return; - onChange(_views); + onChange(optionViews); checkIfUpdateIsRequired(); }} > diff --git a/web/components/project/send-project-invitation-modal.tsx b/web/components/project/send-project-invitation-modal.tsx index da2f37e9f..76b92ec99 100644 --- a/web/components/project/send-project-invitation-modal.tsx +++ b/web/components/project/send-project-invitation-modal.tsx @@ -1,19 +1,15 @@ import React, { useEffect } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useForm, Controller, useFieldArray } from "react-hook-form"; import { Dialog, Transition } from "@headlessui/react"; import { ChevronDown, Plus, X } from "lucide-react"; // hooks -import { useEventTracker, useMember, useUser, useWorkspace } from "hooks/store"; // ui import { Avatar, Button, CustomSelect, CustomSearchSelect, TOAST_TYPE, setToast } from "@plane/ui"; // helpers -import { getUserRole } from "helpers/user.helper"; +import { useEventTracker, useMember, useUser } from "hooks/store"; // constants -import { ROLE } from "constants/workspace"; -import { EUserProjectRoles } from "constants/project"; -import { PROJECT_MEMBER_ADDED } from "constants/event-tracker"; type Props = { isOpen: boolean; diff --git a/web/components/project/settings/delete-project-section.tsx b/web/components/project/settings/delete-project-section.tsx index fa1d70d5c..0f0e41fa7 100644 --- a/web/components/project/settings/delete-project-section.tsx +++ b/web/components/project/settings/delete-project-section.tsx @@ -2,9 +2,9 @@ import React from "react"; // ui import { Disclosure, Transition } from "@headlessui/react"; +import { ChevronDown, ChevronUp } from "lucide-react"; import { Button, Loader } from "@plane/ui"; // icons -import { ChevronDown, ChevronUp } from "lucide-react"; // types import { IProject } from "@plane/types"; diff --git a/web/components/project/settings/features-list.tsx b/web/components/project/settings/features-list.tsx index efbcc0857..188d103ba 100644 --- a/web/components/project/settings/features-list.tsx +++ b/web/components/project/settings/features-list.tsx @@ -1,17 +1,15 @@ import { FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { ContrastIcon, FileText, Inbox, Layers } from "lucide-react"; -// hooks -import { useEventTracker, useProject, useUser, useWorkspace } from "hooks/store"; // ui -import { DiceIcon, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; -// types -import { IProject } from "@plane/types"; +import { DiceIcon, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; // constants import { EUserProjectRoles } from "constants/project"; - -type Props = {}; +// hooks +import { useEventTracker, useProject, useUser } from "hooks/store"; +// types +import { IProject } from "@plane/types"; const PROJECT_FEATURES_LIST = [ { @@ -46,7 +44,7 @@ const PROJECT_FEATURES_LIST = [ }, ]; -export const ProjectFeaturesList: FC = observer(() => { +export const ProjectFeaturesList: FC = observer(() => { // router const router = useRouter(); const { workspaceSlug, projectId } = router.query; diff --git a/web/components/project/sidebar-list-item.tsx b/web/components/project/sidebar-list-item.tsx index 00dc858d0..c86ba0dc2 100644 --- a/web/components/project/sidebar-list-item.tsx +++ b/web/components/project/sidebar-list-item.tsx @@ -1,9 +1,9 @@ import { useRef, useState } from "react"; +import { DraggableProvided, DraggableStateSnapshot } from "@hello-pangea/dnd"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { DraggableProvided, DraggableStateSnapshot } from "@hello-pangea/dnd"; import { Disclosure, Transition } from "@headlessui/react"; -import { observer } from "mobx-react-lite"; // icons import { MoreVertical, @@ -18,13 +18,6 @@ import { MoreHorizontal, Inbox, } from "lucide-react"; -// hooks -import { useApplication, useEventTracker, useInbox, useProject } from "hooks/store"; -import useOutsideClickDetector from "hooks/use-outside-click-detector"; -// helpers -import { cn } from "helpers/common.helper"; -import { getNumberCount } from "helpers/string.helper"; -import { renderEmoji } from "helpers/emoji.helper"; // ui import { CustomMenu, @@ -36,9 +29,17 @@ import { LayersIcon, setPromiseToast, } from "@plane/ui"; -// components import { LeaveProjectModal, PublishProjectModal } from "components/project"; import { EUserProjectRoles } from "constants/project"; +import { cn } from "helpers/common.helper"; +import { renderEmoji } from "helpers/emoji.helper"; +import { getNumberCount } from "helpers/string.helper"; +// hooks +import { useApplication, useEventTracker, useInbox, useProject } from "hooks/store"; +import useOutsideClickDetector from "hooks/use-outside-click-detector"; +// helpers + +// components type Props = { projectId: string; diff --git a/web/components/project/sidebar-list.tsx b/web/components/project/sidebar-list.tsx index 05e09f565..2cee91e6b 100644 --- a/web/components/project/sidebar-list.tsx +++ b/web/components/project/sidebar-list.tsx @@ -1,21 +1,21 @@ -import { useState, FC, useRef, useEffect, useCallback } from "react"; -import { useRouter } from "next/router"; +import { useState, FC, useRef, useEffect } from "react"; import { DragDropContext, Draggable, DropResult, Droppable } from "@hello-pangea/dnd"; -import { Disclosure, Transition } from "@headlessui/react"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; +import { Disclosure, Transition } from "@headlessui/react"; import { ChevronDown, ChevronRight, Plus } from "lucide-react"; // hooks +import { TOAST_TYPE, setToast } from "@plane/ui"; +import { CreateProjectModal, ProjectSidebarListItem } from "components/project"; +import { EUserWorkspaceRoles } from "constants/workspace"; +import { cn } from "helpers/common.helper"; +import { orderJoinedProjects } from "helpers/project.helper"; +import { copyUrlToClipboard } from "helpers/string.helper"; import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; // components -import { CreateProjectModal, ProjectSidebarListItem } from "components/project"; // helpers -import { copyUrlToClipboard } from "helpers/string.helper"; -import { orderJoinedProjects } from "helpers/project.helper"; -import { cn } from "helpers/common.helper"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; import { IProject } from "@plane/types"; export const ProjectSidebarList: FC = observer(() => { @@ -63,8 +63,8 @@ export const ProjectSidebarList: FC = observer(() => { const joinedProjectsList: IProject[] = []; joinedProjects.map((projectId) => { - const _project = getProjectById(projectId); - if (_project) joinedProjectsList.push(_project); + const projectDetails = getProjectById(projectId); + if (projectDetails) joinedProjectsList.push(projectDetails); }); if (joinedProjectsList.length <= 0) return; diff --git a/web/components/states/create-state-modal.tsx b/web/components/states/create-state-modal.tsx index f39e3f335..b142cc60e 100644 --- a/web/components/states/create-state-modal.tsx +++ b/web/components/states/create-state-modal.tsx @@ -1,19 +1,19 @@ import React from "react"; -import { useRouter } from "next/router"; -import { Controller, useForm } from "react-hook-form"; -import { TwitterPicker } from "react-color"; -import { Dialog, Popover, Transition } from "@headlessui/react"; import { observer } from "mobx-react-lite"; -// hooks -import { useProjectState } from "hooks/store"; -// ui -import { Button, CustomSelect, Input, TextArea, TOAST_TYPE, setToast } from "@plane/ui"; +import { useRouter } from "next/router"; +import { TwitterPicker } from "react-color"; +import { Controller, useForm } from "react-hook-form"; +import { Dialog, Popover, Transition } from "@headlessui/react"; // icons import { ChevronDown } from "lucide-react"; -// types -import type { IState } from "@plane/types"; +// ui +import { Button, CustomSelect, Input, TextArea, TOAST_TYPE, setToast } from "@plane/ui"; // constants import { GROUP_CHOICES } from "constants/project"; +// hooks +import { useProjectState } from "hooks/store"; +// types +import type { IState } from "@plane/types"; // types type Props = { diff --git a/web/components/states/create-update-state-inline.tsx b/web/components/states/create-update-state-inline.tsx index 0a50208cd..88c50a017 100644 --- a/web/components/states/create-update-state-inline.tsx +++ b/web/components/states/create-update-state-inline.tsx @@ -1,18 +1,18 @@ import React, { useEffect } from "react"; -import { useRouter } from "next/router"; -import { useForm, Controller } from "react-hook-form"; -import { TwitterPicker } from "react-color"; -import { Popover, Transition } from "@headlessui/react"; import { observer } from "mobx-react-lite"; -// hooks -import { useEventTracker, useProjectState } from "hooks/store"; +import { useRouter } from "next/router"; +import { TwitterPicker } from "react-color"; +import { useForm, Controller } from "react-hook-form"; +import { Popover, Transition } from "@headlessui/react"; // ui import { Button, CustomSelect, Input, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +// constants +import { STATE_CREATED, STATE_UPDATED } from "constants/event-tracker"; +import { GROUP_CHOICES } from "constants/project"; +// hooks +import { useEventTracker, useProjectState } from "hooks/store"; // types import type { IState } from "@plane/types"; -// constants -import { GROUP_CHOICES } from "constants/project"; -import { STATE_CREATED, STATE_UPDATED } from "constants/event-tracker"; type Props = { data: IState | null; diff --git a/web/components/states/delete-state-modal.tsx b/web/components/states/delete-state-modal.tsx index df47c8b12..7496b53b4 100644 --- a/web/components/states/delete-state-modal.tsx +++ b/web/components/states/delete-state-modal.tsx @@ -1,16 +1,16 @@ import React, { useState } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; -import { observer } from "mobx-react-lite"; import { AlertTriangle } from "lucide-react"; -// hooks -import { useEventTracker, useProjectState } from "hooks/store"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; -// types -import type { IState } from "@plane/types"; // constants import { STATE_DELETED } from "constants/event-tracker"; +// hooks +import { useEventTracker, useProjectState } from "hooks/store"; +// types +import type { IState } from "@plane/types"; type Props = { isOpen: boolean; diff --git a/web/components/states/project-setting-state-list-item.tsx b/web/components/states/project-setting-state-list-item.tsx index 401c482f3..760c8501c 100644 --- a/web/components/states/project-setting-state-list-item.tsx +++ b/web/components/states/project-setting-state-list-item.tsx @@ -1,14 +1,14 @@ import { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks -import { useEventTracker, useProjectState } from "hooks/store"; // ui +import { Pencil, X, ArrowDown, ArrowUp } from "lucide-react"; import { Tooltip, StateGroupIcon } from "@plane/ui"; // icons -import { Pencil, X, ArrowDown, ArrowUp } from "lucide-react"; // helpers import { addSpaceIfCamelCase } from "helpers/string.helper"; +import { useEventTracker, useProjectState } from "hooks/store"; // types import { IState } from "@plane/types"; diff --git a/web/components/states/project-setting-state-list.tsx b/web/components/states/project-setting-state-list.tsx index 99ac40d84..5f7772567 100644 --- a/web/components/states/project-setting-state-list.tsx +++ b/web/components/states/project-setting-state-list.tsx @@ -1,20 +1,20 @@ import React, { useState } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react-lite"; // hooks +import { Plus } from "lucide-react"; +import { Loader } from "@plane/ui"; +import { CreateUpdateStateInline, DeleteStateModal, StateGroup, StatesListItem } from "components/states"; +import { STATES_LIST } from "constants/fetch-keys"; +import { sortByField } from "helpers/array.helper"; +import { orderStateGroups } from "helpers/state.helper"; import { useEventTracker, useProjectState } from "hooks/store"; // components -import { CreateUpdateStateInline, DeleteStateModal, StateGroup, StatesListItem } from "components/states"; // ui -import { Loader } from "@plane/ui"; // icons -import { Plus } from "lucide-react"; // helpers -import { orderStateGroups } from "helpers/state.helper"; -import { sortByField } from "helpers/array.helper"; // fetch-keys -import { STATES_LIST } from "constants/fetch-keys"; export const ProjectSettingStateList: React.FC = observer(() => { // router diff --git a/web/components/toast-alert/index.tsx b/web/components/toast-alert/index.tsx new file mode 100644 index 000000000..80594e218 --- /dev/null +++ b/web/components/toast-alert/index.tsx @@ -0,0 +1,61 @@ +import React from "react"; +// hooks +import { AlertTriangle, CheckCircle, Info, X, XCircle } from "lucide-react"; +import useToast from "hooks/use-toast"; +// icons + +const ToastAlerts = () => { + const { alerts, removeAlert } = useToast(); + + if (!alerts) return null; + + return ( +
+ {alerts.map((alert) => ( +
+
+ +
+
+
+
+ {alert.type === "success" ? ( +
+
+

{alert.title}

+ {alert.message &&

{alert.message}

} +
+
+
+
+ ))} +
+ ); +}; + +export default ToastAlerts; diff --git a/web/components/ui/empty-space.tsx b/web/components/ui/empty-space.tsx index 4b70bbb15..73fc6ba01 100644 --- a/web/components/ui/empty-space.tsx +++ b/web/components/ui/empty-space.tsx @@ -1,7 +1,7 @@ // next +import React from "react"; import Link from "next/link"; // react -import React from "react"; // icons import { ChevronRight } from "lucide-react"; diff --git a/web/components/ui/graphs/bar-graph.tsx b/web/components/ui/graphs/bar-graph.tsx index 3756b0455..3f40aad87 100644 --- a/web/components/ui/graphs/bar-graph.tsx +++ b/web/components/ui/graphs/bar-graph.tsx @@ -1,11 +1,11 @@ // nivo import { ResponsiveBar, BarSvgProps } from "@nivo/bar"; // helpers +import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; import { generateYAxisTickValues } from "helpers/graph.helper"; // types import { TGraph } from "./types"; // constants -import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; type Props = { indexBy: string; diff --git a/web/components/ui/graphs/calendar-graph.tsx b/web/components/ui/graphs/calendar-graph.tsx index 0725c425a..a64a4a920 100644 --- a/web/components/ui/graphs/calendar-graph.tsx +++ b/web/components/ui/graphs/calendar-graph.tsx @@ -1,9 +1,9 @@ // nivo import { ResponsiveCalendar, CalendarSvgProps } from "@nivo/calendar"; // types +import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; import { TGraph } from "./types"; // constants -import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; export const CalendarGraph: React.FC> = ({ height = "400px", diff --git a/web/components/ui/graphs/line-graph.tsx b/web/components/ui/graphs/line-graph.tsx index 91a19acc3..93eac0097 100644 --- a/web/components/ui/graphs/line-graph.tsx +++ b/web/components/ui/graphs/line-graph.tsx @@ -1,11 +1,11 @@ // nivo import { ResponsiveLine, LineSvgProps } from "@nivo/line"; // helpers +import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; import { generateYAxisTickValues } from "helpers/graph.helper"; // types import { TGraph } from "./types"; // constants -import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; type Props = { customYAxisTickValues?: number[]; diff --git a/web/components/ui/graphs/marimekko-graph.tsx b/web/components/ui/graphs/marimekko-graph.tsx new file mode 100644 index 000000000..c0e6eb300 --- /dev/null +++ b/web/components/ui/graphs/marimekko-graph.tsx @@ -0,0 +1,48 @@ +// nivo +import { ResponsiveMarimekko, SvgProps } from "@nivo/marimekko"; +// helpers +import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; +import { generateYAxisTickValues } from "helpers/graph.helper"; +// types +import { TGraph } from "./types"; +// constants + +type Props = { + id: string; + value: string; + customYAxisTickValues?: number[]; +}; + +export const MarimekkoGraph: React.FC, "height" | "width">> = ({ + id, + value, + customYAxisTickValues, + height = "400px", + width = "100%", + margin, + theme, + ...rest +}) => ( +
+ 7 ? -45 : 0, + }} + labelTextColor={{ from: "color", modifiers: [["darker", 1.6]] }} + theme={{ ...CHARTS_THEME, ...(theme ?? {}) }} + animate + {...rest} + /> +
+); diff --git a/web/components/ui/graphs/pie-graph.tsx b/web/components/ui/graphs/pie-graph.tsx index 52b56e492..739ede4b0 100644 --- a/web/components/ui/graphs/pie-graph.tsx +++ b/web/components/ui/graphs/pie-graph.tsx @@ -1,9 +1,9 @@ // nivo import { PieSvgProps, ResponsivePie } from "@nivo/pie"; // types +import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; import { TGraph } from "./types"; // constants -import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; export const PieGraph: React.FC, "height" | "width">> = ({ height = "400px", diff --git a/web/components/ui/graphs/scatter-plot-graph.tsx b/web/components/ui/graphs/scatter-plot-graph.tsx index c6ff5a772..4eb82a97e 100644 --- a/web/components/ui/graphs/scatter-plot-graph.tsx +++ b/web/components/ui/graphs/scatter-plot-graph.tsx @@ -1,9 +1,9 @@ // nivo import { ResponsiveScatterPlot, ScatterPlotSvgProps } from "@nivo/scatterplot"; // types +import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; import { TGraph } from "./types"; // constants -import { CHARTS_THEME, DEFAULT_MARGIN } from "constants/graph"; export const ScatterPlotGraph: React.FC, "height" | "width">> = ({ height = "400px", diff --git a/web/components/ui/loader/cycle-module-board-loader.tsx b/web/components/ui/loader/cycle-module-board-loader.tsx index 09c885fb9..f88719c38 100644 --- a/web/components/ui/loader/cycle-module-board-loader.tsx +++ b/web/components/ui/loader/cycle-module-board-loader.tsx @@ -2,8 +2,11 @@ export const CycleModuleBoardLayout = () => (
- {[...Array(5)].map(() => ( -
+ {[...Array(5)].map((i) => ( +
diff --git a/web/components/ui/loader/cycle-module-list-loader.tsx b/web/components/ui/loader/cycle-module-list-loader.tsx index 8787a1425..522b96f0d 100644 --- a/web/components/ui/loader/cycle-module-list-loader.tsx +++ b/web/components/ui/loader/cycle-module-list-loader.tsx @@ -2,8 +2,11 @@ export const CycleModuleListLayout = () => (
- {[...Array(5)].map(() => ( -
+ {[...Array(5)].map((i) => ( +
diff --git a/web/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx b/web/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx index 944ec02b8..3456e43ab 100644 --- a/web/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx +++ b/web/components/ui/loader/layouts/project-inbox/inbox-layout-loader.tsx @@ -1,7 +1,7 @@ import React from "react"; // ui -import { InboxSidebarLoader } from "./inbox-sidebar-loader"; import { Loader } from "@plane/ui"; +import { InboxSidebarLoader } from "./inbox-sidebar-loader"; export const InboxLayoutLoader = () => (
diff --git a/web/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx b/web/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx index ce464e83d..204c2fff6 100644 --- a/web/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx +++ b/web/components/ui/loader/layouts/project-inbox/inbox-sidebar-loader.tsx @@ -7,8 +7,8 @@ export const InboxSidebarLoader = () => (
- {[...Array(6)].map(() => ( -
+ {[...Array(6)].map((i) => ( +
diff --git a/web/components/ui/loader/notification-loader.tsx b/web/components/ui/loader/notification-loader.tsx index 143f1a9b6..7485c2c4c 100644 --- a/web/components/ui/loader/notification-loader.tsx +++ b/web/components/ui/loader/notification-loader.tsx @@ -1,7 +1,7 @@ export const NotificationsLoader = () => (
- {[...Array(3)].map(() => ( -
+ {[...Array(3)].map((i) => ( +
diff --git a/web/components/ui/loader/pages-loader.tsx b/web/components/ui/loader/pages-loader.tsx index e31e82942..612c17d88 100644 --- a/web/components/ui/loader/pages-loader.tsx +++ b/web/components/ui/loader/pages-loader.tsx @@ -4,13 +4,13 @@ export const PagesLoader = () => (

Pages

- {[...Array(5)].map(() => ( - + {[...Array(5)].map((i) => ( + ))}
- {[...Array(5)].map(() => ( -
+ {[...Array(5)].map((i) => ( +
diff --git a/web/components/ui/loader/projects-loader.tsx b/web/components/ui/loader/projects-loader.tsx index 9548a1f48..d1a781d6b 100644 --- a/web/components/ui/loader/projects-loader.tsx +++ b/web/components/ui/loader/projects-loader.tsx @@ -1,8 +1,11 @@ export const ProjectsLoader = () => (
- {[...Array(3)].map(() => ( -
+ {[...Array(3)].map((i) => ( +
diff --git a/web/components/ui/loader/settings/activity.tsx b/web/components/ui/loader/settings/activity.tsx index 7bc5c392f..70297f644 100644 --- a/web/components/ui/loader/settings/activity.tsx +++ b/web/components/ui/loader/settings/activity.tsx @@ -2,8 +2,8 @@ import { getRandomLength } from "../utils"; export const ActivitySettingsLoader = () => (
- {[...Array(10)].map(() => ( -
+ {[...Array(10)].map((i) => ( +
diff --git a/web/components/ui/loader/settings/api-token.tsx b/web/components/ui/loader/settings/api-token.tsx index fc5b4c41d..e31090bff 100644 --- a/web/components/ui/loader/settings/api-token.tsx +++ b/web/components/ui/loader/settings/api-token.tsx @@ -5,8 +5,8 @@ export const APITokenSettingsLoader = () => (
- {[...Array(2)].map(() => ( -
+ {[...Array(2)].map((i) => ( +
diff --git a/web/components/ui/loader/settings/email.tsx b/web/components/ui/loader/settings/email.tsx index fa68b972f..87634bf09 100644 --- a/web/components/ui/loader/settings/email.tsx +++ b/web/components/ui/loader/settings/email.tsx @@ -8,8 +8,8 @@ export const EmailSettingsLoader = () => (
- {[...Array(4)].map(() => ( -
+ {[...Array(4)].map((i) => ( +
diff --git a/web/components/ui/loader/settings/import-and-export.tsx b/web/components/ui/loader/settings/import-and-export.tsx index 70496d1c1..a3561207d 100644 --- a/web/components/ui/loader/settings/import-and-export.tsx +++ b/web/components/ui/loader/settings/import-and-export.tsx @@ -1,7 +1,7 @@ export const ImportExportSettingsLoader = () => (
- {[...Array(2)].map(() => ( -
+ {[...Array(2)].map((i) => ( +
diff --git a/web/components/ui/loader/settings/integration.tsx b/web/components/ui/loader/settings/integration.tsx index 871b570b1..2260517ee 100644 --- a/web/components/ui/loader/settings/integration.tsx +++ b/web/components/ui/loader/settings/integration.tsx @@ -1,7 +1,10 @@ export const IntegrationsSettingsLoader = () => (
- {[...Array(2)].map(() => ( -
+ {[...Array(2)].map((i) => ( +
diff --git a/web/components/ui/loader/settings/members.tsx b/web/components/ui/loader/settings/members.tsx index 3ed2c41ef..e286320a9 100644 --- a/web/components/ui/loader/settings/members.tsx +++ b/web/components/ui/loader/settings/members.tsx @@ -1,7 +1,7 @@ export const MembersSettingsLoader = () => (
- {[...Array(4)].map(() => ( -
+ {[...Array(4)].map((i) => ( +
diff --git a/web/components/ui/loader/view-list-loader.tsx b/web/components/ui/loader/view-list-loader.tsx index 97899a657..8b59b57a2 100644 --- a/web/components/ui/loader/view-list-loader.tsx +++ b/web/components/ui/loader/view-list-loader.tsx @@ -1,7 +1,7 @@ export const ViewListLoader = () => (
- {[...Array(8)].map(() => ( -
+ {[...Array(8)].map((i) => ( +
diff --git a/web/components/ui/multi-level-dropdown.tsx b/web/components/ui/multi-level-dropdown.tsx index 7bf4aa8a1..8bb0ebcf3 100644 --- a/web/components/ui/multi-level-dropdown.tsx +++ b/web/components/ui/multi-level-dropdown.tsx @@ -3,9 +3,9 @@ import { Fragment, useState } from "react"; // headless ui import { Menu, Transition } from "@headlessui/react"; // ui +import { Check, ChevronDown, ChevronLeft, ChevronRight } from "lucide-react"; import { Loader } from "@plane/ui"; // icons -import { Check, ChevronDown, ChevronLeft, ChevronRight } from "lucide-react"; type MultiLevelDropdownProps = { label: string; @@ -71,10 +71,10 @@ export const MultiLevelDropdown: React.FC = ({
{ + onClick={(e: unknown) => { if (option.hasChildren) { - e.stopPropagation(); - e.preventDefault(); + e?.stopPropagation(); + e?.preventDefault(); if (option.onClick) option.onClick(); diff --git a/web/components/views/delete-view-modal.tsx b/web/components/views/delete-view-modal.tsx index f4fe8e120..180c293e0 100644 --- a/web/components/views/delete-view-modal.tsx +++ b/web/components/views/delete-view-modal.tsx @@ -1,12 +1,12 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; import { AlertTriangle } from "lucide-react"; -// hooks -import { useProjectView } from "hooks/store"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; +// hooks +import { useProjectView } from "hooks/store"; // types import { IProjectView } from "@plane/types"; diff --git a/web/components/views/form.tsx b/web/components/views/form.tsx index 0da7e3946..31fee1006 100644 --- a/web/components/views/form.tsx +++ b/web/components/views/form.tsx @@ -2,15 +2,15 @@ import { useEffect } from "react"; import { observer } from "mobx-react-lite"; import { Controller, useForm } from "react-hook-form"; // hooks +import { Button, Input, TextArea } from "@plane/ui"; +import { AppliedFiltersList, FilterSelection, FiltersDropdown } from "components/issues"; +import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; import { useLabel, useMember, useProjectState } from "hooks/store"; // components -import { AppliedFiltersList, FilterSelection, FiltersDropdown } from "components/issues"; // ui -import { Button, Input, TextArea } from "@plane/ui"; // types import { IProjectView, IIssueFilterOptions } from "@plane/types"; // constants -import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; type Props = { data?: IProjectView | null; @@ -212,8 +212,8 @@ export const ProjectViewForm: React.FC = observer((props) => { ? "Updating View..." : "Update View" : isSubmitting - ? "Creating View..." - : "Create View"} + ? "Creating View..." + : "Create View"}
diff --git a/web/components/views/modal.tsx b/web/components/views/modal.tsx index a1abef1a4..7e0c92f26 100644 --- a/web/components/views/modal.tsx +++ b/web/components/views/modal.tsx @@ -1,12 +1,12 @@ import { FC, Fragment } from "react"; import { observer } from "mobx-react-lite"; import { Dialog, Transition } from "@headlessui/react"; -// hooks -import { useProjectView } from "hooks/store"; // ui import { TOAST_TYPE, setToast } from "@plane/ui"; // components import { ProjectViewForm } from "components/views"; +// hooks +import { useProjectView } from "hooks/store"; // types import { IProjectView } from "@plane/types"; diff --git a/web/components/views/view-list-item.tsx b/web/components/views/view-list-item.tsx index 7ff1ee92e..29d5bac57 100644 --- a/web/components/views/view-list-item.tsx +++ b/web/components/views/view-list-item.tsx @@ -1,21 +1,21 @@ import React, { useState } from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import { LinkIcon, PencilIcon, StarIcon, TrashIcon } from "lucide-react"; -// hooks -import { useProjectView, useUser } from "hooks/store"; -// components -import { CreateUpdateProjectViewModal, DeleteProjectViewModal } from "components/views"; // ui import { CustomMenu, TOAST_TYPE, setToast } from "@plane/ui"; +// components +import { CreateUpdateProjectViewModal, DeleteProjectViewModal } from "components/views"; +// constants +import { EUserProjectRoles } from "constants/project"; // helpers import { calculateTotalFilters } from "helpers/filter.helper"; import { copyUrlToClipboard } from "helpers/string.helper"; +// hooks +import { useProjectView, useUser } from "hooks/store"; // types import { IProjectView } from "@plane/types"; -// constants -import { EUserProjectRoles } from "constants/project"; type Props = { view: IProjectView; diff --git a/web/components/views/views-list.tsx b/web/components/views/views-list.tsx index 4977ed3e7..9d8bf85e6 100644 --- a/web/components/views/views-list.tsx +++ b/web/components/views/views-list.tsx @@ -1,18 +1,18 @@ import { useState } from "react"; import { observer } from "mobx-react-lite"; -import { Search } from "lucide-react"; import { useTheme } from "next-themes"; +import { Search } from "lucide-react"; // hooks -import { useApplication, useProjectView, useUser } from "hooks/store"; // components -import { ProjectViewListItem } from "components/views"; +import { Input } from "@plane/ui"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Input } from "@plane/ui"; import { ViewListLoader } from "components/ui"; +import { ProjectViewListItem } from "components/views"; // constants -import { EUserProjectRoles } from "constants/project"; import { VIEW_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EUserProjectRoles } from "constants/project"; +import { useApplication, useProjectView, useUser } from "hooks/store"; export const ProjectViewsList = observer(() => { // states diff --git a/web/components/web-hooks/create-webhook-modal.tsx b/web/components/web-hooks/create-webhook-modal.tsx index ecbd4ccd3..b18beede8 100644 --- a/web/components/web-hooks/create-webhook-modal.tsx +++ b/web/components/web-hooks/create-webhook-modal.tsx @@ -1,18 +1,18 @@ import React, { useState } from "react"; import { useRouter } from "next/router"; +// ui import { Dialog, Transition } from "@headlessui/react"; +import { TOAST_TYPE, setToast } from "@plane/ui"; // components -import { WebhookForm } from "./form"; -import { GeneratedHookDetails } from "./generated-hook-details"; -// hooks // helpers import { csvDownload } from "helpers/download.helper"; +// types +import { IWebhook, IWorkspace, TWebhookEventTypes } from "@plane/types"; +import { WebhookForm } from "./form"; +import { GeneratedHookDetails } from "./generated-hook-details"; // utils import { getCurrentHookAsCSV } from "./utils"; // ui -import { TOAST_TYPE, setToast } from "@plane/ui"; -// types -import { IWebhook, IWorkspace, TWebhookEventTypes } from "@plane/types"; interface ICreateWebhookModal { currentWorkspace: IWorkspace | null; diff --git a/web/components/web-hooks/delete-webhook-modal.tsx b/web/components/web-hooks/delete-webhook-modal.tsx index 52c7a6595..22f8aca32 100644 --- a/web/components/web-hooks/delete-webhook-modal.tsx +++ b/web/components/web-hooks/delete-webhook-modal.tsx @@ -2,10 +2,10 @@ import React, { FC, useState } from "react"; import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; import { AlertTriangle } from "lucide-react"; -// hooks -import { useWebhook } from "hooks/store"; // ui import { Button, TOAST_TYPE, setToast } from "@plane/ui"; +// hooks +import { useWebhook } from "hooks/store"; interface IDeleteWebhook { isOpen: boolean; diff --git a/web/components/web-hooks/form/form.tsx b/web/components/web-hooks/form/form.tsx index c2dd940dc..1b1e1bf27 100644 --- a/web/components/web-hooks/form/form.tsx +++ b/web/components/web-hooks/form/form.tsx @@ -1,9 +1,8 @@ import React, { FC, useEffect, useState } from "react"; -import { Controller, useForm } from "react-hook-form"; import { observer } from "mobx-react-lite"; +import { Controller, useForm } from "react-hook-form"; // hooks -import { useWebhook } from "hooks/store"; -// components +import { Button } from "@plane/ui"; import { WebhookIndividualEventOptions, WebhookInput, @@ -11,8 +10,9 @@ import { WebhookSecretKey, WebhookToggle, } from "components/web-hooks"; +import { useWebhook } from "hooks/store"; +// components // ui -import { Button } from "@plane/ui"; // types import { IWebhook, TWebhookEventTypes } from "@plane/types"; @@ -36,7 +36,7 @@ export const WebhookForm: FC = observer((props) => { // states const [webhookEventType, setWebhookEventType] = useState("all"); // store hooks - const {webhookSecretKey } = useWebhook(); + const { webhookSecretKey } = useWebhook(); // use form const { handleSubmit, diff --git a/web/components/web-hooks/form/secret-key.tsx b/web/components/web-hooks/form/secret-key.tsx index 7e9d9deda..11129fb07 100644 --- a/web/components/web-hooks/form/secret-key.tsx +++ b/web/components/web-hooks/form/secret-key.tsx @@ -1,18 +1,19 @@ import { useState, FC } from "react"; -import { useRouter } from "next/router"; -import { Copy, Eye, EyeOff, RefreshCw } from "lucide-react"; import { observer } from "mobx-react-lite"; -// hooks -import { useWebhook, useWorkspace } from "hooks/store"; -// helpers -import { copyTextToClipboard } from "helpers/string.helper"; -import { csvDownload } from "helpers/download.helper"; -// utils -import { getCurrentHookAsCSV } from "../utils"; +import { useRouter } from "next/router"; +// icons +import { Copy, Eye, EyeOff, RefreshCw } from "lucide-react"; // ui import { Button, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +// helpers +import { csvDownload } from "helpers/download.helper"; +import { copyTextToClipboard } from "helpers/string.helper"; +// hooks +import { useWebhook, useWorkspace } from "hooks/store"; // types import { IWebhook } from "@plane/types"; +// utils +import { getCurrentHookAsCSV } from "../utils"; type Props = { data: Partial; diff --git a/web/components/web-hooks/generated-hook-details.tsx b/web/components/web-hooks/generated-hook-details.tsx index ce78fa5d5..2cd5ef986 100644 --- a/web/components/web-hooks/generated-hook-details.tsx +++ b/web/components/web-hooks/generated-hook-details.tsx @@ -1,9 +1,9 @@ // components -import { WebhookSecretKey } from "./form"; // ui import { Button } from "@plane/ui"; // types import { IWebhook } from "@plane/types"; +import { WebhookSecretKey } from "./form"; type Props = { handleClose: () => void; diff --git a/web/components/web-hooks/webhooks-list-item.tsx b/web/components/web-hooks/webhooks-list-item.tsx index fa676fccd..2f9ca52a5 100644 --- a/web/components/web-hooks/webhooks-list-item.tsx +++ b/web/components/web-hooks/webhooks-list-item.tsx @@ -2,9 +2,9 @@ import { FC } from "react"; import Link from "next/link"; import { useRouter } from "next/router"; // hooks +import { ToggleSwitch } from "@plane/ui"; import { useWebhook } from "hooks/store"; // ui -import { ToggleSwitch } from "@plane/ui"; // types import { IWebhook } from "@plane/types"; diff --git a/web/components/workspace/confirm-workspace-member-remove.tsx b/web/components/workspace/confirm-workspace-member-remove.tsx index 6c5ec4593..a11938472 100644 --- a/web/components/workspace/confirm-workspace-member-remove.tsx +++ b/web/components/workspace/confirm-workspace-member-remove.tsx @@ -3,9 +3,9 @@ import { observer } from "mobx-react-lite"; import { Dialog, Transition } from "@headlessui/react"; import { AlertTriangle } from "lucide-react"; // hooks +import { Button } from "@plane/ui"; import { useUser } from "hooks/store"; // ui -import { Button } from "@plane/ui"; type Props = { isOpen: boolean; @@ -102,8 +102,8 @@ export const ConfirmWorkspaceMemberRemove: React.FC = observer((props) => ? "Leaving" : "Leave" : isRemoving - ? "Removing" - : "Remove"} + ? "Removing" + : "Remove"}
diff --git a/web/components/workspace/create-workspace-form.tsx b/web/components/workspace/create-workspace-form.tsx index e8e40cf85..822ee1347 100644 --- a/web/components/workspace/create-workspace-form.tsx +++ b/web/components/workspace/create-workspace-form.tsx @@ -1,18 +1,17 @@ import { Dispatch, SetStateAction, useEffect, useState, FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; -// services -import { WorkspaceService } from "services/workspace.service"; +// ui +import { Button, CustomSelect, Input, TOAST_TYPE, setToast } from "@plane/ui"; +// constants +import { WORKSPACE_CREATED } from "constants/event-tracker"; +import { ORGANIZATION_SIZE, RESTRICTED_URLS } from "constants/workspace"; // hooks import { useEventTracker, useWorkspace } from "hooks/store"; // ui -import { Button, CustomSelect, Input, TOAST_TYPE, setToast } from "@plane/ui"; // types import { IWorkspace } from "@plane/types"; -// constants -import { ORGANIZATION_SIZE, RESTRICTED_URLS } from "constants/workspace"; -import { WORKSPACE_CREATED } from "constants/event-tracker"; type Props = { onSubmit?: (res: IWorkspace) => Promise; @@ -21,7 +20,7 @@ type Props = { slug: string; organization_size: string; }; - setDefaultValues: Dispatch>; + setDefaultValues: Dispatch>; secondaryButton?: React.ReactNode; primaryButtonText?: { loading: string; diff --git a/web/components/workspace/delete-workspace-modal.tsx b/web/components/workspace/delete-workspace-modal.tsx index dbb2ef4f0..0691fbbf0 100644 --- a/web/components/workspace/delete-workspace-modal.tsx +++ b/web/components/workspace/delete-workspace-modal.tsx @@ -1,17 +1,17 @@ import React from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; import { Dialog, Transition } from "@headlessui/react"; import { AlertTriangle } from "lucide-react"; -// hooks -import { useEventTracker, useWorkspace } from "hooks/store"; // ui import { Button, Input, TOAST_TYPE, setToast } from "@plane/ui"; -// types -import type { IWorkspace } from "@plane/types"; // constants import { WORKSPACE_DELETED } from "constants/event-tracker"; +// hooks +import { useEventTracker, useWorkspace } from "hooks/store"; +// types +import type { IWorkspace } from "@plane/types"; type Props = { isOpen: boolean; @@ -55,7 +55,7 @@ export const DeleteWorkspaceModal: React.FC = observer((props) => { if (!data || !canDelete) return; await deleteWorkspace(data.slug) - .then((res) => { + .then(() => { handleClose(); router.push("/"); captureWorkspaceEvent({ diff --git a/web/components/workspace/help-section.tsx b/web/components/workspace/help-section.tsx index 0bb77f9c7..210bbbd3a 100644 --- a/web/components/workspace/help-section.tsx +++ b/web/components/workspace/help-section.tsx @@ -1,17 +1,19 @@ import React, { useRef, useState } from "react"; -import Link from "next/link"; -import { Transition } from "@headlessui/react"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; +// headless ui +import { Transition } from "@headlessui/react"; +// icons +import { FileText, HelpCircle, MessagesSquare, MoveLeft, Zap } from "lucide-react"; +// ui +import { DiscordIcon, GithubIcon, Tooltip } from "@plane/ui"; // hooks import { useApplication } from "hooks/store"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; -// icons -import { FileText, HelpCircle, MessagesSquare, MoveLeft, Zap } from "lucide-react"; -import { DiscordIcon, GithubIcon, Tooltip } from "@plane/ui"; // assets import packageJson from "package.json"; -const helpOptions = [ +const HELP_OPTIONS = [ { name: "Documentation", href: "https://docs.plane.so/", @@ -27,12 +29,6 @@ const helpOptions = [ href: "https://github.com/makeplane/plane/issues/new/choose", Icon: GithubIcon, }, - { - name: "Chat with us", - href: null, - onClick: () => (window as any).$crisp.push(["do", "chat:show"]), - Icon: MessagesSquare, - }, ]; export interface WorkspaceHelpSectionProps { @@ -45,12 +41,17 @@ export const WorkspaceHelpSection: React.FC = observe theme: { sidebarCollapsed, toggleSidebar }, commandPalette: { toggleShortcutModal }, } = useApplication(); - // states const [isNeedHelpOpen, setIsNeedHelpOpen] = useState(false); // refs const helpOptionsRef = useRef(null); + const handleCrispWindowShow = () => { + if (window) { + window.$crisp.push(["do", "chat:show"]); + } + }; + useOutsideClickDetector(helpOptionsRef, () => setIsNeedHelpOpen(false)); const isCollapsed = sidebarCollapsed || false; @@ -129,33 +130,26 @@ export const WorkspaceHelpSection: React.FC = observe ref={helpOptionsRef} >
- {helpOptions.map(({ name, Icon, href, onClick }) => { - if (href) - return ( - - -
- -
- {name} -
- - ); - else - return ( - - ); - })} + {HELP_OPTIONS.map(({ name, Icon, href }) => ( + + +
+ +
+ {name} +
+ + ))} +
Version: v{packageJson.version}
diff --git a/web/components/workspace/send-workspace-invitation-modal.tsx b/web/components/workspace/send-workspace-invitation-modal.tsx index 25f4c3c72..55f64bfab 100644 --- a/web/components/workspace/send-workspace-invitation-modal.tsx +++ b/web/components/workspace/send-workspace-invitation-modal.tsx @@ -3,14 +3,14 @@ import { observer } from "mobx-react-lite"; import { Controller, useFieldArray, useForm } from "react-hook-form"; import { Dialog, Transition } from "@headlessui/react"; import { Plus, X } from "lucide-react"; -// hooks -import { useUser } from "hooks/store"; // ui import { Button, CustomSelect, Input } from "@plane/ui"; -// types -import { IWorkspaceBulkInviteFormData } from "@plane/types"; // constants import { EUserWorkspaceRoles, ROLE } from "constants/workspace"; +// hooks +import { useUser } from "hooks/store"; +// types +import { IWorkspaceBulkInviteFormData } from "@plane/types"; type Props = { isOpen: boolean; diff --git a/web/components/workspace/settings/invitations-list-item.tsx b/web/components/workspace/settings/invitations-list-item.tsx index 9a9df5cb1..8c6de24b2 100644 --- a/web/components/workspace/settings/invitations-list-item.tsx +++ b/web/components/workspace/settings/invitations-list-item.tsx @@ -1,15 +1,15 @@ import { useState, FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { ChevronDown, XCircle } from "lucide-react"; -// hooks -import { useMember, useUser } from "hooks/store"; -// components -import { ConfirmWorkspaceMemberRemove } from "components/workspace"; // ui import { CustomSelect, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +// components +import { ConfirmWorkspaceMemberRemove } from "components/workspace"; // constants import { EUserWorkspaceRoles, ROLE } from "constants/workspace"; +// hooks +import { useMember, useUser } from "hooks/store"; type Props = { invitationId: string; diff --git a/web/components/workspace/settings/members-list-item.tsx b/web/components/workspace/settings/members-list-item.tsx index c6c8d1d36..f40d78bb0 100644 --- a/web/components/workspace/settings/members-list-item.tsx +++ b/web/components/workspace/settings/members-list-item.tsx @@ -1,17 +1,18 @@ import { useState, FC } from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; +// lucide icons import { ChevronDown, Dot, XCircle } from "lucide-react"; -// hooks -import { useEventTracker, useMember, useUser } from "hooks/store"; -// components -import { ConfirmWorkspaceMemberRemove } from "components/workspace"; // ui import { CustomSelect, Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; +// components +import { ConfirmWorkspaceMemberRemove } from "components/workspace"; // constants -import { EUserWorkspaceRoles, ROLE } from "constants/workspace"; import { WORKSPACE_MEMBER_lEAVE } from "constants/event-tracker"; +import { EUserWorkspaceRoles, ROLE } from "constants/workspace"; +// hooks +import { useEventTracker, useMember, useUser } from "hooks/store"; type Props = { memberId: string; diff --git a/web/components/workspace/settings/members-list.tsx b/web/components/workspace/settings/members-list.tsx index 1dc02d508..216122525 100644 --- a/web/components/workspace/settings/members-list.tsx +++ b/web/components/workspace/settings/members-list.tsx @@ -1,13 +1,12 @@ import { FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; +// components +import { MembersSettingsLoader } from "components/ui"; +import { WorkspaceInvitationsListItem, WorkspaceMembersListItem } from "components/workspace"; // hooks import { useMember } from "hooks/store"; -// components -import { WorkspaceInvitationsListItem, WorkspaceMembersListItem } from "components/workspace"; -// ui -import { MembersSettingsLoader } from "components/ui"; export const WorkspaceMembersList: FC<{ searchQuery: string }> = observer((props) => { const { searchQuery } = props; diff --git a/web/components/workspace/settings/workspace-details.tsx b/web/components/workspace/settings/workspace-details.tsx index d491ca08e..bfd1473ea 100644 --- a/web/components/workspace/settings/workspace-details.tsx +++ b/web/components/workspace/settings/workspace-details.tsx @@ -3,22 +3,22 @@ import { observer } from "mobx-react-lite"; import { Controller, useForm } from "react-hook-form"; import { Disclosure, Transition } from "@headlessui/react"; import { ChevronDown, ChevronUp, Pencil } from "lucide-react"; -// services -import { FileService } from "services/file.service"; -// hooks -import { useEventTracker, useUser, useWorkspace } from "hooks/store"; -// components -import { DeleteWorkspaceModal } from "components/workspace"; -import { WorkspaceImageUploadModal } from "components/core"; // ui import { Button, CustomSelect, Input, Spinner, TOAST_TYPE, setToast } from "@plane/ui"; +// components +import { WorkspaceImageUploadModal } from "components/core"; +import { DeleteWorkspaceModal } from "components/workspace"; +// constants +import { WORKSPACE_UPDATED } from "constants/event-tracker"; +import { EUserWorkspaceRoles, ORGANIZATION_SIZE } from "constants/workspace"; // helpers import { copyUrlToClipboard } from "helpers/string.helper"; +// hooks +import { useEventTracker, useUser, useWorkspace } from "hooks/store"; +// services +import { FileService } from "services/file.service"; // types import { IWorkspace } from "@plane/types"; -// constants -import { EUserWorkspaceRoles, ORGANIZATION_SIZE } from "constants/workspace"; -import { WORKSPACE_UPDATED } from "constants/event-tracker"; const defaultValues: Partial = { name: "", diff --git a/web/components/workspace/sidebar-dropdown.tsx b/web/components/workspace/sidebar-dropdown.tsx index 98a133ee3..5d1695b33 100644 --- a/web/components/workspace/sidebar-dropdown.tsx +++ b/web/components/workspace/sidebar-dropdown.tsx @@ -1,16 +1,18 @@ import { Fragment, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; import Link from "next/link"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; -import { Menu, Transition } from "@headlessui/react"; -import { mutate } from "swr"; -import { Check, ChevronDown, CircleUserRound, LogOut, Mails, PlusSquare, Settings, UserCircle2 } from "lucide-react"; import { usePopper } from "react-popper"; +import { mutate } from "swr"; +// ui +import { Menu, Transition } from "@headlessui/react"; +// icons +import { Check, ChevronDown, CircleUserRound, LogOut, Mails, PlusSquare, Settings, UserCircle2 } from "lucide-react"; +// plane ui +import { Avatar, Loader, TOAST_TYPE, setToast } from "@plane/ui"; // hooks import { useApplication, useUser, useWorkspace } from "hooks/store"; -// ui -import { Avatar, Loader, TOAST_TYPE, setToast } from "@plane/ui"; // types import { IWorkspace } from "@plane/types"; // Static Data diff --git a/web/components/workspace/sidebar-menu.tsx b/web/components/workspace/sidebar-menu.tsx index 774a231db..2069d8f27 100644 --- a/web/components/workspace/sidebar-menu.tsx +++ b/web/components/workspace/sidebar-menu.tsx @@ -1,20 +1,20 @@ import React from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; -// hooks -import { useApplication, useEventTracker, useUser } from "hooks/store"; -// components -import { NotificationPopover } from "components/notifications"; +import { Crown } from "lucide-react"; // ui import { Tooltip } from "@plane/ui"; -import { Crown } from "lucide-react"; +// components +import { NotificationPopover } from "components/notifications"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; import { SIDEBAR_MENU_ITEMS } from "constants/dashboard"; import { SIDEBAR_CLICKED } from "constants/event-tracker"; +import { EUserWorkspaceRoles } from "constants/workspace"; // helper import { cn } from "helpers/common.helper"; +// hooks +import { useApplication, useEventTracker, useUser } from "hooks/store"; export const WorkspaceSidebarMenu = observer(() => { // store hooks diff --git a/web/components/workspace/sidebar-quick-action.tsx b/web/components/workspace/sidebar-quick-action.tsx index dd2dd5c68..d2ce2f5b3 100644 --- a/web/components/workspace/sidebar-quick-action.tsx +++ b/web/components/workspace/sidebar-quick-action.tsx @@ -1,14 +1,14 @@ import { useRef, useState } from "react"; import { observer } from "mobx-react-lite"; import { ChevronUp, PenSquare, Search } from "lucide-react"; -// hooks -import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; -import useLocalStorage from "hooks/use-local-storage"; // components import { CreateUpdateIssueModal } from "components/issues"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; import { EIssuesStoreType } from "constants/issue"; +import { EUserWorkspaceRoles } from "constants/workspace"; +// hooks +import { useApplication, useEventTracker, useProject, useUser } from "hooks/store"; +import useLocalStorage from "hooks/use-local-storage"; // types import { TIssue } from "@plane/types"; @@ -27,11 +27,12 @@ export const WorkspaceSidebarQuickAction = observer(() => { membership: { currentWorkspaceRole }, } = useUser(); - const { storedValue, setValue } = useLocalStorage>>("draftedIssue", {}); + const { storedValue } = useLocalStorage>>("draftedIssue", {}); //useState control for displaying draft issue button instead of group hover const [isDraftButtonOpen, setIsDraftButtonOpen] = useState(false); + // eslint-disable-next-line @typescript-eslint/no-explicit-any const timeoutRef = useRef(); const isSidebarCollapsed = themeStore.sidebarCollapsed; @@ -41,7 +42,7 @@ export const WorkspaceSidebarQuickAction = observer(() => { const disabled = joinedProjectIds.length === 0; const onMouseEnter = () => { - //if renet before timout clear the timeout + // if enter before time out clear the timeout timeoutRef?.current && clearTimeout(timeoutRef.current); setIsDraftButtonOpen(true); }; @@ -68,7 +69,7 @@ export const WorkspaceSidebarQuickAction = observer(() => { onClose={() => setIsDraftIssueModalOpen(false)} data={workspaceDraftIssue ?? {}} onSubmit={() => removeWorkspaceDraftIssue()} - isDraft={true} + isDraft />
) => Promise; @@ -200,8 +200,8 @@ export const WorkspaceViewForm: React.FC = observer((props) => { ? "Updating View..." : "Update View" : isSubmitting - ? "Creating View..." - : "Create View"} + ? "Creating View..." + : "Create View"}
diff --git a/web/components/workspace/views/header.tsx b/web/components/workspace/views/header.tsx index 223fda13c..97982e61e 100644 --- a/web/components/workspace/views/header.tsx +++ b/web/components/workspace/views/header.tsx @@ -1,15 +1,16 @@ import React, { useEffect, useRef, useState } from "react"; -import { useRouter } from "next/router"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; +import { useRouter } from "next/router"; +// icons import { Plus } from "lucide-react"; -// store hooks -import { useEventTracker, useGlobalView, useUser } from "hooks/store"; // components import { CreateUpdateWorkspaceViewModal } from "components/workspace"; // constants -import { DEFAULT_GLOBAL_VIEWS_LIST, EUserWorkspaceRoles } from "constants/workspace"; import { GLOBAL_VIEW_OPENED } from "constants/event-tracker"; +import { DEFAULT_GLOBAL_VIEWS_LIST, EUserWorkspaceRoles } from "constants/workspace"; +// store hooks +import { useEventTracker, useGlobalView, useUser } from "hooks/store"; const ViewTab = observer((props: { viewId: string }) => { const { viewId } = props; @@ -69,7 +70,7 @@ export const GlobalViewsHeader: React.FC = observer(() => { activeTabElement.scrollIntoView({ behavior: "smooth", inline: diff > 500 ? "center" : "nearest" }); } } - }, [globalViewId, currentWorkspaceViews, containerRef]); + }, [globalViewId, currentWorkspaceViews, containerRef, captureEvent]); const isAuthorizedUser = !!currentWorkspaceRole && currentWorkspaceRole >= EUserWorkspaceRoles.MEMBER; @@ -95,9 +96,7 @@ export const GlobalViewsHeader: React.FC = observer(() => { ))} - {currentWorkspaceViews?.map((viewId) => ( - - ))} + {currentWorkspaceViews?.map((viewId) => )}
{isAuthorizedUser && ( diff --git a/web/components/workspace/views/modal.tsx b/web/components/workspace/views/modal.tsx index 6543a8321..975018f16 100644 --- a/web/components/workspace/views/modal.tsx +++ b/web/components/workspace/views/modal.tsx @@ -1,17 +1,17 @@ import React from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Dialog, Transition } from "@headlessui/react"; -// store hooks -import { useEventTracker, useGlobalView } from "hooks/store"; // ui import { TOAST_TYPE, setToast } from "@plane/ui"; // components import { WorkspaceViewForm } from "components/workspace"; -// types -import { IWorkspaceView } from "@plane/types"; // constants import { GLOBAL_VIEW_CREATED, GLOBAL_VIEW_UPDATED } from "constants/event-tracker"; +// store hooks +import { useEventTracker, useGlobalView } from "hooks/store"; +// types +import { IWorkspaceView } from "@plane/types"; type Props = { data?: IWorkspaceView; diff --git a/web/components/workspace/views/view-list-item.tsx b/web/components/workspace/views/view-list-item.tsx index 28f25551c..4030dc181 100644 --- a/web/components/workspace/views/view-list-item.tsx +++ b/web/components/workspace/views/view-list-item.tsx @@ -1,17 +1,18 @@ import { useState } from "react"; -import { useRouter } from "next/router"; -import Link from "next/link"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; +import { useRouter } from "next/router"; +// icons import { Pencil, Trash2 } from "lucide-react"; -// store hooks -import { useEventTracker, useGlobalView } from "hooks/store"; -// components -import { CreateUpdateWorkspaceViewModal, DeleteGlobalViewModal } from "components/workspace"; // ui import { CustomMenu } from "@plane/ui"; +// components +import { CreateUpdateWorkspaceViewModal, DeleteGlobalViewModal } from "components/workspace"; // helpers -import { truncateText } from "helpers/string.helper"; import { calculateTotalFilters } from "helpers/filter.helper"; +import { truncateText } from "helpers/string.helper"; +// store hooks +import { useEventTracker, useGlobalView } from "hooks/store"; type Props = { viewId: string }; diff --git a/web/components/workspace/views/views-list.tsx b/web/components/workspace/views/views-list.tsx index 9a8758d2d..ef33fe16e 100644 --- a/web/components/workspace/views/views-list.tsx +++ b/web/components/workspace/views/views-list.tsx @@ -1,12 +1,11 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; +// components +import { ViewListLoader } from "components/ui"; +import { GlobalViewListItem } from "components/workspace"; // store hooks import { useGlobalView } from "hooks/store"; -// components -import { GlobalViewListItem } from "components/workspace"; -// ui -import { ViewListLoader } from "components/ui"; type Props = { searchQuery: string; @@ -29,11 +28,5 @@ export const GlobalViewsList: React.FC = observer((props) => { const filteredViewsList = getSearchedViews(searchQuery); - return ( - <> - {filteredViewsList?.map((viewId) => ( - - ))} - - ); + return <>{filteredViewsList?.map((viewId) => )}; }); diff --git a/web/components/workspace/workspace-active-cycles-upgrade.tsx b/web/components/workspace/workspace-active-cycles-upgrade.tsx index b5a61610b..23ab27acf 100644 --- a/web/components/workspace/workspace-active-cycles-upgrade.tsx +++ b/web/components/workspace/workspace-active-cycles-upgrade.tsx @@ -1,16 +1,16 @@ import React from "react"; -import Image from "next/image"; import { observer } from "mobx-react"; -// hooks -import { useUser } from "hooks/store"; -// ui -import { getButtonStyling } from "@plane/ui"; +import Image from "next/image"; // icons import { Crown } from "lucide-react"; -// helper -import { cn } from "helpers/common.helper"; +// ui +import { getButtonStyling } from "@plane/ui"; // constants import { WORKSPACE_ACTIVE_CYCLES_DETAILS } from "constants/cycle"; +// helper +import { cn } from "helpers/common.helper"; +// hooks +import { useUser } from "hooks/store"; export const WorkspaceActiveCyclesUpgrade = observer(() => { // store hooks @@ -75,7 +75,7 @@ export const WorkspaceActiveCyclesUpgrade = observer(() => {
{WORKSPACE_ACTIVE_CYCLES_DETAILS.map((item) => ( -
+

{item.title}

diff --git a/web/constants/cycle.ts b/web/constants/cycle.ts index 63900b6b7..8bb43d898 100644 --- a/web/constants/cycle.ts +++ b/web/constants/cycle.ts @@ -162,5 +162,3 @@ export const WORKSPACE_ACTIVE_CYCLES_DETAILS = [ icon: Microscope, }, ]; - - diff --git a/web/constants/dashboard.ts b/web/constants/dashboard.ts index 6ac4e7817..a3f5f7e00 100644 --- a/web/constants/dashboard.ts +++ b/web/constants/dashboard.ts @@ -1,19 +1,20 @@ import { linearGradientDef } from "@nivo/core"; // assets -import UpcomingIssuesDark from "public/empty-state/dashboard/dark/upcoming-issues.svg"; -import UpcomingIssuesLight from "public/empty-state/dashboard/light/upcoming-issues.svg"; -import OverdueIssuesDark from "public/empty-state/dashboard/dark/overdue-issues.svg"; -import OverdueIssuesLight from "public/empty-state/dashboard/light/overdue-issues.svg"; +import { BarChart2, Briefcase, CheckCircle, LayoutGrid } from "lucide-react"; +import { ContrastIcon } from "@plane/ui"; +import { Props } from "components/icons/types"; import CompletedIssuesDark from "public/empty-state/dashboard/dark/completed-issues.svg"; +import OverdueIssuesDark from "public/empty-state/dashboard/dark/overdue-issues.svg"; +import UpcomingIssuesDark from "public/empty-state/dashboard/dark/upcoming-issues.svg"; import CompletedIssuesLight from "public/empty-state/dashboard/light/completed-issues.svg"; +import OverdueIssuesLight from "public/empty-state/dashboard/light/overdue-issues.svg"; +import UpcomingIssuesLight from "public/empty-state/dashboard/light/upcoming-issues.svg"; // types import { EDurationFilters, TIssuesListTypes, TStateGroups } from "@plane/types"; import { Props } from "components/icons/types"; // constants import { EUserWorkspaceRoles } from "./workspace"; // icons -import { BarChart2, Briefcase, CheckCircle, LayoutGrid } from "lucide-react"; -import { ContrastIcon } from "@plane/ui"; // gradients for issues by priority widget graph bars export const PRIORITY_GRAPH_GRADIENTS = [ diff --git a/web/constants/event-tracker.ts b/web/constants/event-tracker.ts index 37a18a37d..7edfccba5 100644 --- a/web/constants/event-tracker.ts +++ b/web/constants/event-tracker.ts @@ -112,16 +112,16 @@ export const getIssueEventPayload = (props: IssueEventProps) => { updated_from: props.path?.includes("workspace-views") ? "All views" : props.path?.includes("cycles") - ? "Cycle" - : props.path?.includes("modules") - ? "Module" - : props.path?.includes("views") - ? "Project view" - : props.path?.includes("inbox") - ? "Inbox" - : props.path?.includes("draft") - ? "Draft" - : "Project", + ? "Cycle" + : props.path?.includes("modules") + ? "Module" + : props.path?.includes("views") + ? "Project view" + : props.path?.includes("inbox") + ? "Inbox" + : props.path?.includes("draft") + ? "Draft" + : "Project", }; } return eventPayload; diff --git a/web/constants/spreadsheet.ts b/web/constants/spreadsheet.ts index aa588d9e1..50d6c15df 100644 --- a/web/constants/spreadsheet.ts +++ b/web/constants/spreadsheet.ts @@ -1,8 +1,7 @@ -import { IIssueDisplayProperties, TIssue, TIssueOrderByOptions } from "@plane/types"; -import { LayersIcon, DoubleCircleIcon, UserGroupIcon, DiceIcon, ContrastIcon } from "@plane/ui"; -import { CalendarDays, Link2, Signal, Tag, Triangle, Paperclip, CalendarCheck2, CalendarClock } from "lucide-react"; import { FC } from "react"; import { ISvgIcons } from "@plane/ui/src/icons/type"; +import { CalendarDays, Link2, Signal, Tag, Triangle, Paperclip, CalendarCheck2, CalendarClock } from "lucide-react"; +import { LayersIcon, DoubleCircleIcon, UserGroupIcon, DiceIcon, ContrastIcon } from "@plane/ui"; import { SpreadsheetAssigneeColumn, SpreadsheetAttachmentColumn, @@ -19,6 +18,7 @@ import { SpreadsheetSubIssueColumn, SpreadsheetUpdatedOnColumn, } from "components/issues/issue-layouts/spreadsheet"; +import { IIssueDisplayProperties, TIssue, TIssueOrderByOptions } from "@plane/types"; export const SPREADSHEET_PROPERTY_DETAILS: { [key: string]: { diff --git a/web/constants/workspace.ts b/web/constants/workspace.ts index 1471de395..7ae89d5d6 100644 --- a/web/constants/workspace.ts +++ b/web/constants/workspace.ts @@ -1,14 +1,14 @@ // services images -import GithubLogo from "public/services/github.png"; -import JiraLogo from "public/services/jira.svg"; +import { SettingIcon } from "components/icons"; +import { Props } from "components/icons/types"; import CSVLogo from "public/services/csv.svg"; import ExcelLogo from "public/services/excel.svg"; +import GithubLogo from "public/services/github.png"; +import JiraLogo from "public/services/jira.svg"; import JSONLogo from "public/services/json.svg"; // types import { TStaticViewTypes } from "@plane/types"; -import { Props } from "components/icons/types"; // icons -import { SettingIcon } from "components/icons"; export enum EUserWorkspaceRoles { GUEST = 5, diff --git a/web/contexts/user-notification-context.tsx b/web/contexts/user-notification-context.tsx index b55a05771..ef3af2124 100644 --- a/web/contexts/user-notification-context.tsx +++ b/web/contexts/user-notification-context.tsx @@ -3,9 +3,9 @@ import { createContext, useCallback, useEffect, useReducer } from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; // services +import { UNREAD_NOTIFICATIONS_COUNT, USER_WORKSPACE_NOTIFICATIONS } from "constants/fetch-keys"; import { NotificationService } from "services/notification.service"; // fetch-keys -import { UNREAD_NOTIFICATIONS_COUNT, USER_WORKSPACE_NOTIFICATIONS } from "constants/fetch-keys"; // type import type { NotificationType, NotificationCount, IUserNotification } from "@plane/types"; diff --git a/web/helpers/analytics.helper.ts b/web/helpers/analytics.helper.ts index 58a456ed7..dfa98d7ea 100644 --- a/web/helpers/analytics.helper.ts +++ b/web/helpers/analytics.helper.ts @@ -1,13 +1,13 @@ // nivo import { BarDatum } from "@nivo/bar"; // helpers +import { DATE_KEYS } from "constants/analytics"; +import { MONTHS_LIST } from "constants/calendar"; +import { STATE_GROUPS } from "constants/state"; import { addSpaceIfCamelCase, capitalizeFirstLetter, generateRandomColor } from "helpers/string.helper"; // types import { IAnalyticsData, IAnalyticsParams, IAnalyticsResponse, TStateGroups } from "@plane/types"; // constants -import { STATE_GROUPS } from "constants/state"; -import { MONTHS_LIST } from "constants/calendar"; -import { DATE_KEYS } from "constants/analytics"; export const convertResponseToBarGraphData = ( response: IAnalyticsData | undefined, @@ -36,8 +36,8 @@ export const convertResponseToBarGraphData = ( name: DATE_KEYS.includes(params.x_axis) ? renderMonthAndYear(key) : params.x_axis === "priority" || params.x_axis === "state__group" - ? capitalizeFirstLetter(key) - : key, + ? capitalizeFirstLetter(key) + : key, ...segments, }); } else { @@ -49,8 +49,8 @@ export const convertResponseToBarGraphData = ( name: DATE_KEYS.includes(params.x_axis) ? renderMonthAndYear(item.dimension) : params.x_axis === "priority" || params.x_axis === "state__group" - ? capitalizeFirstLetter(item.dimension ?? "None") - : item.dimension ?? "None", + ? capitalizeFirstLetter(item.dimension ?? "None") + : item.dimension ?? "None", [yAxisKey]: item[yAxisKey] ?? 0, }); } @@ -84,12 +84,12 @@ export const generateBarColor = ( priority === "urgent" ? "#ef4444" : priority === "high" - ? "#f97316" - : priority === "medium" - ? "#eab308" - : priority === "low" - ? "#22c55e" - : "#ced4da"; + ? "#f97316" + : priority === "medium" + ? "#eab308" + : priority === "low" + ? "#22c55e" + : "#ced4da"; } return color ?? generateRandomColor(value); diff --git a/web/helpers/calendar.helper.ts b/web/helpers/calendar.helper.ts index e570a5c9a..6c648dd6b 100644 --- a/web/helpers/calendar.helper.ts +++ b/web/helpers/calendar.helper.ts @@ -1,7 +1,7 @@ // helpers +import { ICalendarDate, ICalendarPayload } from "components/issues"; import { getWeekNumberOfDate, renderFormattedPayloadDate } from "helpers/date-time.helper"; // types -import { ICalendarDate, ICalendarPayload } from "components/issues"; export const formatDate = (date: Date, format: string): string => { const day = date.getDate(); diff --git a/web/helpers/filter.helper.ts b/web/helpers/filter.helper.ts index 0b30f95e1..d31a25b3d 100644 --- a/web/helpers/filter.helper.ts +++ b/web/helpers/filter.helper.ts @@ -13,4 +13,3 @@ export const calculateTotalFilters = (filters: IIssueFilterOptions): number => ) .reduce((curr, prev) => curr + prev, 0) : 0; - diff --git a/web/helpers/issue.helper.ts b/web/helpers/issue.helper.ts index 831cb321e..08cb4abd7 100644 --- a/web/helpers/issue.helper.ts +++ b/web/helpers/issue.helper.ts @@ -1,8 +1,12 @@ -import { v4 as uuidv4 } from "uuid"; import differenceInCalendarDays from "date-fns/differenceInCalendarDays"; +import { v4 as uuidv4 } from "uuid"; // helpers -import { orderArrayBy } from "helpers/array.helper"; // types +import { IGanttBlock } from "components/gantt-chart"; +// constants +import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; +import { STATE_GROUPS } from "constants/state"; +import { orderArrayBy } from "helpers/array.helper"; import { TIssue, TIssueGroupByOptions, @@ -11,10 +15,6 @@ import { TIssueParams, TStateGroups, } from "@plane/types"; -import { IGanttBlock } from "components/gantt-chart"; -// constants -import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "constants/issue"; -import { STATE_GROUPS } from "constants/state"; type THandleIssuesMutation = ( formData: Partial, diff --git a/web/helpers/string.helper.ts b/web/helpers/string.helper.ts index d30b29b52..ad87c2e75 100644 --- a/web/helpers/string.helper.ts +++ b/web/helpers/string.helper.ts @@ -1,10 +1,10 @@ +import * as DOMPurify from "dompurify"; import { CYCLE_ISSUES_WITH_PARAMS, MODULE_ISSUES_WITH_PARAMS, PROJECT_ISSUES_LIST_WITH_PARAMS, VIEW_ISSUES, } from "constants/fetch-keys"; -import * as DOMPurify from 'dompurify'; export const addSpaceIfCamelCase = (str: string) => { if (str === undefined || str === null) return ""; @@ -172,10 +172,10 @@ export const getFetchKeysForIssueMutation = (options: { const ganttFetchKey = cycleId ? { ganttFetchKey: CYCLE_ISSUES_WITH_PARAMS(cycleId.toString(), ganttParams) } : moduleId - ? { ganttFetchKey: MODULE_ISSUES_WITH_PARAMS(moduleId.toString(), ganttParams) } - : viewId - ? { ganttFetchKey: VIEW_ISSUES(viewId.toString(), viewGanttParams) } - : { ganttFetchKey: PROJECT_ISSUES_LIST_WITH_PARAMS(projectId?.toString() ?? "", ganttParams) }; + ? { ganttFetchKey: MODULE_ISSUES_WITH_PARAMS(moduleId.toString(), ganttParams) } + : viewId + ? { ganttFetchKey: VIEW_ISSUES(viewId.toString(), viewGanttParams) } + : { ganttFetchKey: PROJECT_ISSUES_LIST_WITH_PARAMS(projectId?.toString() ?? "", ganttParams) }; return { ...ganttFetchKey, diff --git a/web/hooks/store/index.ts b/web/hooks/store/index.ts index 2349b1585..ff036a529 100644 --- a/web/hooks/store/index.ts +++ b/web/hooks/store/index.ts @@ -1,5 +1,5 @@ export * from "./use-application"; -export * from "./use-event-tracker" +export * from "./use-event-tracker"; export * from "./use-calendar-view"; export * from "./use-cycle"; export * from "./use-dashboard"; diff --git a/web/hooks/store/use-inbox-issues.ts b/web/hooks/store/use-inbox-issues.ts index 2b2941f84..1196eae90 100644 --- a/web/hooks/store/use-inbox-issues.ts +++ b/web/hooks/store/use-inbox-issues.ts @@ -2,8 +2,8 @@ import { useContext } from "react"; // mobx store import { StoreContext } from "contexts/store-context"; // types -import { IInboxIssue } from "store/inbox/inbox_issue.store"; import { IInboxFilter } from "store/inbox/inbox_filter.store"; +import { IInboxIssue } from "store/inbox/inbox_issue.store"; export const useInboxIssues = (): { issues: IInboxIssue; diff --git a/web/hooks/store/use-issues.ts b/web/hooks/store/use-issues.ts index f2da9d954..ed270c9ec 100644 --- a/web/hooks/store/use-issues.ts +++ b/web/hooks/store/use-issues.ts @@ -1,19 +1,19 @@ import { useContext } from "react"; import merge from "lodash/merge"; // mobx store +import { EIssuesStoreType } from "constants/issue"; import { StoreContext } from "contexts/store-context"; // types -import { IWorkspaceIssues, IWorkspaceIssuesFilter } from "store/issue/workspace"; +import { IArchivedIssues, IArchivedIssuesFilter } from "store/issue/archived"; +import { ICycleIssues, ICycleIssuesFilter } from "store/issue/cycle"; +import { IDraftIssues, IDraftIssuesFilter } from "store/issue/draft"; +import { IModuleIssues, IModuleIssuesFilter } from "store/issue/module"; import { IProfileIssues, IProfileIssuesFilter } from "store/issue/profile"; import { IProjectIssues, IProjectIssuesFilter } from "store/issue/project"; -import { ICycleIssues, ICycleIssuesFilter } from "store/issue/cycle"; -import { IModuleIssues, IModuleIssuesFilter } from "store/issue/module"; import { IProjectViewIssues, IProjectViewIssuesFilter } from "store/issue/project-views"; -import { IArchivedIssues, IArchivedIssuesFilter } from "store/issue/archived"; -import { IDraftIssues, IDraftIssuesFilter } from "store/issue/draft"; +import { IWorkspaceIssues, IWorkspaceIssuesFilter } from "store/issue/workspace"; import { TIssueMap } from "@plane/types"; // constants -import { EIssuesStoreType } from "constants/issue"; type defaultIssueStore = { issueMap: TIssueMap; diff --git a/web/hooks/use-comment-reaction.tsx b/web/hooks/use-comment-reaction.tsx index 2327fddcd..3750160b0 100644 --- a/web/hooks/use-comment-reaction.tsx +++ b/web/hooks/use-comment-reaction.tsx @@ -2,9 +2,9 @@ import useSWR from "swr"; // fetch keys import { COMMENT_REACTION_LIST } from "constants/fetch-keys"; // services +import { groupReactions } from "helpers/emoji.helper"; import { IssueReactionService } from "services/issue"; // helpers -import { groupReactions } from "helpers/emoji.helper"; import { useUser } from "./store"; // hooks diff --git a/web/hooks/use-draggable-portal.ts b/web/hooks/use-draggable-portal.ts index 383c277f3..325f8b268 100644 --- a/web/hooks/use-draggable-portal.ts +++ b/web/hooks/use-draggable-portal.ts @@ -1,6 +1,6 @@ -import { createPortal } from "react-dom"; import { useEffect, useRef } from "react"; import { DraggableProvided, DraggableStateSnapshot } from "@hello-pangea/dnd"; +import { createPortal } from "react-dom"; const useDraggableInPortal = () => { const self = useRef(); diff --git a/web/hooks/use-dropdown-key-down.tsx b/web/hooks/use-dropdown-key-down.tsx index 228e35575..174cfdd8a 100644 --- a/web/hooks/use-dropdown-key-down.tsx +++ b/web/hooks/use-dropdown-key-down.tsx @@ -1,9 +1,11 @@ import { useCallback } from "react"; type TUseDropdownKeyDown = { - (onEnterKeyDown: () => void, onEscKeyDown: () => void, stopPropagation?: boolean): ( - event: React.KeyboardEvent - ) => void; + ( + onEnterKeyDown: () => void, + onEscKeyDown: () => void, + stopPropagation?: boolean + ): (event: React.KeyboardEvent) => void; }; export const useDropdownKeyDown: TUseDropdownKeyDown = (onEnterKeyDown, onEscKeyDown, stopPropagation = true) => { diff --git a/web/hooks/use-user-notifications.tsx b/web/hooks/use-user-notifications.tsx index 3c2ec6332..41bb6cbfd 100644 --- a/web/hooks/use-user-notifications.tsx +++ b/web/hooks/use-user-notifications.tsx @@ -4,9 +4,9 @@ import { useRouter } from "next/router"; import useSWR from "swr"; import useSWRInfinite from "swr/infinite"; // services +import { UNREAD_NOTIFICATIONS_COUNT, getPaginatedNotificationKey } from "constants/fetch-keys"; import { NotificationService } from "services/notification.service"; // fetch-keys -import { UNREAD_NOTIFICATIONS_COUNT, getPaginatedNotificationKey } from "constants/fetch-keys"; // type import type { NotificationType, NotificationCount, IMarkAllAsReadPayload } from "@plane/types"; // ui diff --git a/web/hooks/use-user.tsx b/web/hooks/use-user.tsx index 357579026..ffe6c963b 100644 --- a/web/hooks/use-user.tsx +++ b/web/hooks/use-user.tsx @@ -2,9 +2,9 @@ import { useEffect } from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; // services +import { CURRENT_USER } from "constants/fetch-keys"; import { UserService } from "services/user.service"; // constants -import { CURRENT_USER } from "constants/fetch-keys"; // types import type { IUser } from "@plane/types"; diff --git a/web/layouts/admin-layout/header.tsx b/web/layouts/admin-layout/header.tsx index 2607fe91d..e12875d86 100644 --- a/web/layouts/admin-layout/header.tsx +++ b/web/layouts/admin-layout/header.tsx @@ -2,9 +2,9 @@ import { FC } from "react"; // mobx import { observer } from "mobx-react-lite"; // ui +import { Settings } from "lucide-react"; import { Breadcrumbs } from "@plane/ui"; // icons -import { Settings } from "lucide-react"; import { BreadcrumbLink } from "components/common"; export interface IInstanceAdminHeader { diff --git a/web/layouts/admin-layout/layout.tsx b/web/layouts/admin-layout/layout.tsx index 2dbcdf1f5..bd53fc060 100644 --- a/web/layouts/admin-layout/layout.tsx +++ b/web/layouts/admin-layout/layout.tsx @@ -1,13 +1,13 @@ import { FC, ReactNode } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { InstanceSetupView } from "components/instance"; import { useApplication } from "hooks/store"; // layouts import { AdminAuthWrapper, UserAuthWrapper } from "layouts/auth-layout"; // components -import { InstanceAdminSidebar } from "./sidebar"; import { InstanceAdminHeader } from "./header"; -import { InstanceSetupView } from "components/instance"; +import { InstanceAdminSidebar } from "./sidebar"; export interface IInstanceAdminLayout { children: ReactNode; diff --git a/web/layouts/admin-layout/sidebar.tsx b/web/layouts/admin-layout/sidebar.tsx index efd3cfc76..2af3f0982 100644 --- a/web/layouts/admin-layout/sidebar.tsx +++ b/web/layouts/admin-layout/sidebar.tsx @@ -1,9 +1,9 @@ import { FC } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { InstanceAdminSidebarMenu, InstanceHelpSection, InstanceSidebarDropdown } from "components/instance"; import { useApplication } from "hooks/store"; // components -import { InstanceAdminSidebarMenu, InstanceHelpSection, InstanceSidebarDropdown } from "components/instance"; export interface IInstanceAdminSidebar {} diff --git a/web/layouts/app-layout/layout.tsx b/web/layouts/app-layout/layout.tsx index 07ec9711d..dd1df164f 100644 --- a/web/layouts/app-layout/layout.tsx +++ b/web/layouts/app-layout/layout.tsx @@ -1,10 +1,13 @@ import { FC, ReactNode } from "react"; // layouts +import { observer } from "mobx-react-lite"; +import useSWR from "swr"; +import { CommandPalette } from "components/command-palette"; +import { EIssuesStoreType } from "constants/issue"; +import { useIssues } from "hooks/store/use-issues"; import { UserAuthWrapper, WorkspaceAuthWrapper, ProjectAuthWrapper } from "layouts/auth-layout"; // components -import { CommandPalette } from "components/command-palette"; import { AppSidebar } from "./sidebar"; -import { observer } from "mobx-react-lite"; export interface IAppLayout { children: ReactNode; diff --git a/web/layouts/app-layout/sidebar.tsx b/web/layouts/app-layout/sidebar.tsx index c3b47d021..6ff6f01d7 100644 --- a/web/layouts/app-layout/sidebar.tsx +++ b/web/layouts/app-layout/sidebar.tsx @@ -1,13 +1,13 @@ import { FC, useRef } from "react"; import { observer } from "mobx-react-lite"; // components +import { ProjectSidebarList } from "components/project"; import { WorkspaceHelpSection, WorkspaceSidebarDropdown, WorkspaceSidebarMenu, WorkspaceSidebarQuickAction, } from "components/workspace"; -import { ProjectSidebarList } from "components/project"; // hooks import { useApplication } from "hooks/store"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; diff --git a/web/layouts/auth-layout/admin-wrapper.tsx b/web/layouts/auth-layout/admin-wrapper.tsx index 236d1c440..6d44e6f14 100644 --- a/web/layouts/auth-layout/admin-wrapper.tsx +++ b/web/layouts/auth-layout/admin-wrapper.tsx @@ -1,9 +1,9 @@ import { FC, ReactNode } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { InstanceAdminRestriction } from "components/instance"; import { useApplication, useUser } from "hooks/store"; // components -import { InstanceAdminRestriction } from "components/instance"; export interface IAdminAuthWrapper { children: ReactNode; diff --git a/web/layouts/auth-layout/project-wrapper.tsx b/web/layouts/auth-layout/project-wrapper.tsx index bdd2da8b5..fc672c812 100644 --- a/web/layouts/auth-layout/project-wrapper.tsx +++ b/web/layouts/auth-layout/project-wrapper.tsx @@ -1,8 +1,12 @@ import { FC, ReactNode } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; // hooks +// components +import { Spinner } from "@plane/ui"; +import { JoinProject } from "components/auth-screens"; +import { EmptyState } from "components/common"; import { useApplication, useEventTracker, @@ -17,10 +21,6 @@ import { useUser, useInbox, } from "hooks/store"; -// components -import { Spinner } from "@plane/ui"; -import { JoinProject } from "components/auth-screens"; -import { EmptyState } from "components/common"; // images import emptyProject from "public/empty-state/project.svg"; diff --git a/web/layouts/auth-layout/user-wrapper.tsx b/web/layouts/auth-layout/user-wrapper.tsx index b48e20b10..2a9502a0b 100644 --- a/web/layouts/auth-layout/user-wrapper.tsx +++ b/web/layouts/auth-layout/user-wrapper.tsx @@ -1,12 +1,12 @@ import { FC, ReactNode } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; import useSWRImmutable from "swr/immutable"; // hooks +import { Spinner } from "@plane/ui"; import { useUser, useWorkspace } from "hooks/store"; // ui -import { Spinner } from "@plane/ui"; export interface IUserAuthWrapper { children: ReactNode; diff --git a/web/layouts/auth-layout/workspace-wrapper.tsx b/web/layouts/auth-layout/workspace-wrapper.tsx index ba6498301..199a7e5bc 100644 --- a/web/layouts/auth-layout/workspace-wrapper.tsx +++ b/web/layouts/auth-layout/workspace-wrapper.tsx @@ -1,12 +1,12 @@ import { FC, ReactNode } from "react"; -import { useRouter } from "next/router"; -import Link from "next/link"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import useSWR from "swr"; // hooks +import { Button, Spinner } from "@plane/ui"; import { useLabel, useMember, useProject, useUser } from "hooks/store"; // icons -import { Button, Spinner } from "@plane/ui"; export interface IWorkspaceAuthWrapper { children: ReactNode; diff --git a/web/layouts/instance-layout/index.tsx b/web/layouts/instance-layout/index.tsx index d5df476d9..7e22b7321 100644 --- a/web/layouts/instance-layout/index.tsx +++ b/web/layouts/instance-layout/index.tsx @@ -1,12 +1,12 @@ import { FC, ReactNode } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react-lite"; // hooks -import { useApplication } from "hooks/store"; -// components import { Spinner } from "@plane/ui"; import { InstanceNotReady } from "components/instance"; +import { useApplication } from "hooks/store"; +// components type Props = { children: ReactNode; diff --git a/web/layouts/settings-layout/profile/layout.tsx b/web/layouts/settings-layout/profile/layout.tsx index 5bf5f0eea..ed594c9f2 100644 --- a/web/layouts/settings-layout/profile/layout.tsx +++ b/web/layouts/settings-layout/profile/layout.tsx @@ -1,9 +1,9 @@ import { FC, ReactNode } from "react"; // layout +import { CommandPalette } from "components/command-palette"; import { UserAuthWrapper } from "layouts/auth-layout"; import { ProfileLayoutSidebar } from "layouts/settings-layout"; // components -import { CommandPalette } from "components/command-palette"; interface IProfileSettingsLayout { children: ReactNode; diff --git a/web/layouts/settings-layout/profile/preferences/index.ts b/web/layouts/settings-layout/profile/preferences/index.ts index 34e230258..c4bfd4db3 100644 --- a/web/layouts/settings-layout/profile/preferences/index.ts +++ b/web/layouts/settings-layout/profile/preferences/index.ts @@ -1,2 +1,2 @@ export * from "./layout"; -export * from "./sidebar"; \ No newline at end of file +export * from "./sidebar"; diff --git a/web/layouts/settings-layout/profile/preferences/layout.tsx b/web/layouts/settings-layout/profile/preferences/layout.tsx index 116813958..71a1fdd85 100644 --- a/web/layouts/settings-layout/profile/preferences/layout.tsx +++ b/web/layouts/settings-layout/profile/preferences/layout.tsx @@ -1,13 +1,13 @@ import { FC, ReactNode } from "react"; // layout -import { ProfileSettingsLayout } from "layouts/settings-layout"; -import { ProfilePreferenceSettingsSidebar } from "./sidebar"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { CustomMenu } from "@plane/ui"; -import { ChevronDown } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/router"; +import { ChevronDown } from "lucide-react"; +import { CustomMenu } from "@plane/ui"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { useApplication } from "hooks/store"; +import { ProfileSettingsLayout } from "layouts/settings-layout"; +import { ProfilePreferenceSettingsSidebar } from "./sidebar"; interface IProfilePreferenceSettingsLayout { children: ReactNode; diff --git a/web/layouts/settings-layout/profile/preferences/sidebar.tsx b/web/layouts/settings-layout/profile/preferences/sidebar.tsx index 7f43f3cad..27b28905b 100644 --- a/web/layouts/settings-layout/profile/preferences/sidebar.tsx +++ b/web/layouts/settings-layout/profile/preferences/sidebar.tsx @@ -1,6 +1,6 @@ import React from "react"; -import { useRouter } from "next/router"; import Link from "next/link"; +import { useRouter } from "next/router"; export const ProfilePreferenceSettingsSidebar = () => { const router = useRouter(); @@ -9,15 +9,15 @@ export const ProfilePreferenceSettingsSidebar = () => { label: string; href: string; }> = [ - { - label: "Theme", - href: `/profile/preferences/theme`, - }, - { - label: "Email", - href: `/profile/preferences/email`, - }, - ]; + { + label: "Theme", + href: `/profile/preferences/theme`, + }, + { + label: "Email", + href: `/profile/preferences/email`, + }, + ]; return (
@@ -26,10 +26,11 @@ export const ProfilePreferenceSettingsSidebar = () => { {profilePreferenceLinks.map((link) => (
{link.label}
diff --git a/web/layouts/settings-layout/profile/sidebar.tsx b/web/layouts/settings-layout/profile/sidebar.tsx index 4d78195f1..caa5cd56e 100644 --- a/web/layouts/settings-layout/profile/sidebar.tsx +++ b/web/layouts/settings-layout/profile/sidebar.tsx @@ -1,9 +1,9 @@ import { useEffect, useRef, useState } from "react"; -import { mutate } from "swr"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import { useRouter } from "next/router"; -import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; +import { mutate } from "swr"; import { ChevronLeft, LogOut, MoveLeft, Plus, UserPlus } from "lucide-react"; // hooks import { useApplication, useUser, useWorkspace } from "hooks/store"; @@ -11,7 +11,9 @@ import { useApplication, useUser, useWorkspace } from "hooks/store"; import { Tooltip, TOAST_TYPE, setToast } from "@plane/ui"; // constants import { PROFILE_ACTION_LINKS } from "constants/profile"; +import { useApplication, useUser, useWorkspace } from "hooks/store"; import useOutsideClickDetector from "hooks/use-outside-click-detector"; +import useToast from "hooks/use-toast"; const WORKSPACE_ACTION_LINKS = [ { diff --git a/web/layouts/settings-layout/project/layout.tsx b/web/layouts/settings-layout/project/layout.tsx index 38525e98c..1ea4c2322 100644 --- a/web/layouts/settings-layout/project/layout.tsx +++ b/web/layouts/settings-layout/project/layout.tsx @@ -1,16 +1,16 @@ import { FC, ReactNode } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; import Link from "next/link"; +import { useRouter } from "next/router"; // hooks -import { useUser } from "hooks/store"; // components -import { ProjectSettingsSidebar } from "./sidebar"; +import { Button, LayersIcon } from "@plane/ui"; import { NotAuthorizedView } from "components/auth-screens"; // ui -import { Button, LayersIcon } from "@plane/ui"; // constants import { EUserProjectRoles } from "constants/project"; +import { useUser } from "hooks/store"; +import { ProjectSettingsSidebar } from "./sidebar"; export interface IProjectSettingLayout { children: ReactNode; diff --git a/web/layouts/settings-layout/project/sidebar.tsx b/web/layouts/settings-layout/project/sidebar.tsx index 054add4ee..8cf2befc2 100644 --- a/web/layouts/settings-layout/project/sidebar.tsx +++ b/web/layouts/settings-layout/project/sidebar.tsx @@ -1,12 +1,12 @@ import React from "react"; -import { useRouter } from "next/router"; import Link from "next/link"; +import { useRouter } from "next/router"; // ui import { Loader } from "@plane/ui"; // hooks +import { EUserProjectRoles, PROJECT_SETTINGS_LINKS } from "constants/project"; import { useUser } from "hooks/store"; // constants -import { EUserProjectRoles, PROJECT_SETTINGS_LINKS } from "constants/project"; export const ProjectSettingsSidebar = () => { const router = useRouter(); diff --git a/web/layouts/settings-layout/workspace/sidebar.tsx b/web/layouts/settings-layout/workspace/sidebar.tsx index c8d4718c7..f5177139b 100644 --- a/web/layouts/settings-layout/workspace/sidebar.tsx +++ b/web/layouts/settings-layout/workspace/sidebar.tsx @@ -1,10 +1,10 @@ import React from "react"; -import { useRouter } from "next/router"; import Link from "next/link"; +import { useRouter } from "next/router"; // hooks +import { EUserWorkspaceRoles, WORKSPACE_SETTINGS_LINKS } from "constants/workspace"; import { useUser } from "hooks/store"; // constants -import { EUserWorkspaceRoles, WORKSPACE_SETTINGS_LINKS } from "constants/workspace"; export const WorkspaceSettingsSidebar = () => { // router diff --git a/web/layouts/user-profile-layout/layout.tsx b/web/layouts/user-profile-layout/layout.tsx index 52bfc6fbf..243eaed1a 100644 --- a/web/layouts/user-profile-layout/layout.tsx +++ b/web/layouts/user-profile-layout/layout.tsx @@ -1,6 +1,7 @@ -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks +import { ProfileNavbar, ProfileSidebar } from "components/profile"; import { useUser } from "hooks/store"; // components import { ProfileNavbar, ProfileSidebar } from "components/profile"; diff --git a/web/lib/app-provider.tsx b/web/lib/app-provider.tsx index a91793613..8fcb61744 100644 --- a/web/lib/app-provider.tsx +++ b/web/lib/app-provider.tsx @@ -1,26 +1,24 @@ import { FC, ReactNode } from "react"; +import { observer } from "mobx-react-lite"; import dynamic from "next/dynamic"; import Router from "next/router"; -import NProgress from "nprogress"; -import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; -// hooks -import { useApplication, useUser, useWorkspace } from "hooks/store"; +import NProgress from "nprogress"; +import { SWRConfig } from "swr"; // ui import { Toast } from "@plane/ui"; // constants import { SWR_CONFIG } from "constants/swr-config"; -// layouts -import InstanceLayout from "layouts/instance-layout"; -// contexts -import { SWRConfig } from "swr"; //helpers import { resolveGeneralTheme } from "helpers/theme.helper"; +// hooks +import { useApplication, useUser, useWorkspace } from "hooks/store"; +// layouts +import InstanceLayout from "layouts/instance-layout"; // dynamic imports const StoreWrapper = dynamic(() => import("lib/wrappers/store-wrapper"), { ssr: false }); const PostHogProvider = dynamic(() => import("lib/posthog-provider"), { ssr: false }); const CrispWrapper = dynamic(() => import("lib/wrappers/crisp-wrapper"), { ssr: false }); - // nprogress NProgress.configure({ showSpinner: false }); Router.events.on("routeChangeStart", NProgress.start); diff --git a/web/lib/local-storage.ts b/web/lib/local-storage.ts index e0d77dc51..ab84b358f 100644 --- a/web/lib/local-storage.ts +++ b/web/lib/local-storage.ts @@ -3,15 +3,15 @@ import isEmpty from "lodash/isEmpty"; export const storage = { set: (key: string, value: object | string | boolean): void => { if (typeof window === undefined || typeof window === "undefined" || !key || !value) return undefined; - const _value: string | undefined = value + const tempValue: string | undefined = value ? ["string", "boolean"].includes(typeof value) ? value.toString() : isEmpty(value) - ? undefined - : JSON.stringify(value) + ? undefined + : JSON.stringify(value) : undefined; - if (!_value) return undefined; - window.localStorage.setItem(key, _value); + if (!tempValue) return undefined; + window.localStorage.setItem(key, tempValue); }, get: (key: string): string | undefined => { diff --git a/web/lib/posthog-provider.tsx b/web/lib/posthog-provider.tsx index c5acd2957..80391ba95 100644 --- a/web/lib/posthog-provider.tsx +++ b/web/lib/posthog-provider.tsx @@ -2,12 +2,12 @@ import { FC, ReactNode, useEffect, useState } from "react"; import { useRouter } from "next/router"; import posthog from "posthog-js"; import { PostHogProvider as PHProvider } from "posthog-js/react"; -// mobx store provider -import { IUser } from "@plane/types"; -// helpers -import { getUserRole } from "helpers/user.helper"; // constants import { GROUP_WORKSPACE } from "constants/event-tracker"; +// helpers +import { getUserRole } from "helpers/user.helper"; +// types +import { IUser } from "@plane/types"; export interface IPosthogWrapper { children: ReactNode; @@ -59,7 +59,7 @@ const PostHogProvider: FC = (props) => { posthog?.identify(user.email); posthog?.group(GROUP_WORKSPACE, currentWorkspaceId); } - }, [currentWorkspaceId, user]); + }, [currentWorkspaceId, lastWorkspaceId, user]); useEffect(() => { // Track page views diff --git a/web/lib/types.d.ts b/web/lib/types.d.ts index 2b03f6975..8dac1ff82 100644 --- a/web/lib/types.d.ts +++ b/web/lib/types.d.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/ban-types export type NextPageWithLayout

= NextPage & { getLayout?: (page: ReactElement) => ReactNode; }; diff --git a/web/lib/wrappers/crisp-wrapper.tsx b/web/lib/wrappers/crisp-wrapper.tsx index beacf916b..d2771abd8 100644 --- a/web/lib/wrappers/crisp-wrapper.tsx +++ b/web/lib/wrappers/crisp-wrapper.tsx @@ -4,8 +4,8 @@ import { IUser } from "@plane/types"; declare global { interface Window { - $crisp: any; - CRISP_WEBSITE_ID: any; + $crisp: unknown[]; + CRISP_WEBSITE_ID: unknown; } } @@ -22,8 +22,8 @@ const CrispWrapper: FC = (props) => { window.$crisp = []; window.CRISP_WEBSITE_ID = process.env.NEXT_PUBLIC_CRISP_ID; (function () { - var d = document; - var s = d.createElement("script"); + const d = document; + const s = d.createElement("script"); s.src = "https://client.crisp.chat/l.js"; s.async = true; d.getElementsByTagName("head")[0].appendChild(s); diff --git a/web/lib/wrappers/store-wrapper.tsx b/web/lib/wrappers/store-wrapper.tsx index 83867f557..1890bba50 100644 --- a/web/lib/wrappers/store-wrapper.tsx +++ b/web/lib/wrappers/store-wrapper.tsx @@ -1,12 +1,12 @@ import { ReactNode, useEffect, useState, FC } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import useSWR from "swr"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; -// hooks -import { useApplication, useUser } from "hooks/store"; +import useSWR from "swr"; // helpers import { applyTheme, unsetCustomCssVariables } from "helpers/theme.helper"; +// hooks +import { useApplication, useUser } from "hooks/store"; interface IStoreWrapper { children: ReactNode; @@ -15,7 +15,7 @@ interface IStoreWrapper { const StoreWrapper: FC = observer((props) => { const { children } = props; // states - const [dom, setDom] = useState(); + const [dom, setDom] = useState(); // router const router = useRouter(); // store hooks diff --git a/web/package.json b/web/package.json index fbec571ef..99e351191 100644 --- a/web/package.json +++ b/web/package.json @@ -70,11 +70,7 @@ "@types/react-color": "^3.0.6", "@types/react-dom": "^18.2.17", "@types/uuid": "^8.3.4", - "@typescript-eslint/eslint-plugin": "^5.48.2", - "@typescript-eslint/parser": "^5.48.2", - "eslint": "^8.31.0", "eslint-config-custom": "*", - "eslint-config-next": "12.2.2", "prettier": "^2.8.7", "tailwind-config-custom": "*", "tsconfig": "*", diff --git a/web/pages/404.tsx b/web/pages/404.tsx index a73cd2074..639a77333 100644 --- a/web/pages/404.tsx +++ b/web/pages/404.tsx @@ -1,17 +1,17 @@ import React from "react"; -import Link from "next/link"; +import type { NextPage } from "next"; import Image from "next/image"; +import Link from "next/link"; // components +import { Button } from "@plane/ui"; import { PageHead } from "components/core"; // layouts import DefaultLayout from "layouts/default-layout"; // ui -import { Button } from "@plane/ui"; // images import Image404 from "public/404.svg"; // types -import type { NextPage } from "next"; const PageNotFound: NextPage = () => ( diff --git a/web/pages/[workspaceSlug]/active-cycles.tsx b/web/pages/[workspaceSlug]/active-cycles.tsx index f366ddbd6..b7e3b4100 100644 --- a/web/pages/[workspaceSlug]/active-cycles.tsx +++ b/web/pages/[workspaceSlug]/active-cycles.tsx @@ -5,11 +5,11 @@ import { PageHead } from "components/core"; import { WorkspaceActiveCycleHeader } from "components/headers"; import { WorkspaceActiveCyclesUpgrade } from "components/workspace"; // layouts +import { useWorkspace } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useWorkspace } from "hooks/store"; const WorkspaceActiveCyclesPage: NextPageWithLayout = observer(() => { const { currentWorkspace } = useWorkspace(); diff --git a/web/pages/[workspaceSlug]/analytics.tsx b/web/pages/[workspaceSlug]/analytics.tsx index 31c396b54..658f3e34c 100644 --- a/web/pages/[workspaceSlug]/analytics.tsx +++ b/web/pages/[workspaceSlug]/analytics.tsx @@ -1,21 +1,21 @@ import React, { Fragment, ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import { Tab } from "@headlessui/react"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import { Tab } from "@headlessui/react"; // hooks -import { useApplication, useEventTracker, useProject, useUser, useWorkspace } from "hooks/store"; // layouts -import { AppLayout } from "layouts/app-layout"; // components -import { PageHead } from "components/core"; import { CustomAnalytics, ScopeAndDemand } from "components/analytics"; -import { WorkspaceAnalyticsHeader } from "components/headers"; +import { PageHead } from "components/core"; import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { WorkspaceAnalyticsHeader } from "components/headers"; // constants import { ANALYTICS_TABS } from "constants/analytics"; -import { EUserWorkspaceRoles } from "constants/workspace"; import { WORKSPACE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EUserWorkspaceRoles } from "constants/workspace"; +import { useApplication, useEventTracker, useProject, useUser, useWorkspace } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; // type import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/[workspaceSlug]/index.tsx b/web/pages/[workspaceSlug]/index.tsx index 8a6782de8..0011e2619 100644 --- a/web/pages/[workspaceSlug]/index.tsx +++ b/web/pages/[workspaceSlug]/index.tsx @@ -1,15 +1,15 @@ import { ReactElement } from "react"; import { observer } from "mobx-react"; // layouts -import { AppLayout } from "layouts/app-layout"; // components import { PageHead } from "components/core"; -import { WorkspaceDashboardView } from "components/page-views"; import { WorkspaceDashboardHeader } from "components/headers/workspace-dashboard"; +import { WorkspaceDashboardView } from "components/page-views"; // types -import { NextPageWithLayout } from "lib/types"; // hooks import { useWorkspace } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; +import { NextPageWithLayout } from "lib/types"; const WorkspacePage: NextPageWithLayout = observer(() => { const { currentWorkspace } = useWorkspace(); diff --git a/web/pages/[workspaceSlug]/profile/[userId]/activity.tsx b/web/pages/[workspaceSlug]/profile/[userId]/activity.tsx index 09269676a..87029724e 100644 --- a/web/pages/[workspaceSlug]/profile/[userId]/activity.tsx +++ b/web/pages/[workspaceSlug]/profile/[userId]/activity.tsx @@ -1,20 +1,20 @@ import { ReactElement, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // hooks +import { Button } from "@plane/ui"; +import { UserProfileHeader } from "components/headers"; +import { DownloadActivityButton, WorkspaceActivityListPage } from "components/profile"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useUser } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { ProfileAuthWrapper } from "layouts/user-profile-layout"; // components -import { UserProfileHeader } from "components/headers"; -import { DownloadActivityButton, WorkspaceActivityListPage } from "components/profile"; // ui -import { Button } from "@plane/ui"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; const PER_PAGE = 100; diff --git a/web/pages/[workspaceSlug]/profile/[userId]/assigned.tsx b/web/pages/[workspaceSlug]/profile/[userId]/assigned.tsx index 1cef81e78..9d1dbf072 100644 --- a/web/pages/[workspaceSlug]/profile/[userId]/assigned.tsx +++ b/web/pages/[workspaceSlug]/profile/[userId]/assigned.tsx @@ -1,13 +1,13 @@ import React, { ReactElement } from "react"; // layouts +import { PageHead } from "components/core"; +import { UserProfileHeader } from "components/headers"; +import { ProfileIssuesPage } from "components/profile/profile-issues"; import { AppLayout } from "layouts/app-layout"; import { ProfileAuthWrapper } from "layouts/user-profile-layout"; // components -import { UserProfileHeader } from "components/headers"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; -import { ProfileIssuesPage } from "components/profile/profile-issues"; const ProfileAssignedIssuesPage: NextPageWithLayout = () => ( <> diff --git a/web/pages/[workspaceSlug]/profile/[userId]/created.tsx b/web/pages/[workspaceSlug]/profile/[userId]/created.tsx index 47a8445d7..105d9d309 100644 --- a/web/pages/[workspaceSlug]/profile/[userId]/created.tsx +++ b/web/pages/[workspaceSlug]/profile/[userId]/created.tsx @@ -2,14 +2,14 @@ import { ReactElement } from "react"; // store import { observer } from "mobx-react-lite"; // layouts +import { PageHead } from "components/core"; +import { UserProfileHeader } from "components/headers"; +import { ProfileIssuesPage } from "components/profile/profile-issues"; import { AppLayout } from "layouts/app-layout"; import { ProfileAuthWrapper } from "layouts/user-profile-layout"; // components -import { UserProfileHeader } from "components/headers"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; -import { ProfileIssuesPage } from "components/profile/profile-issues"; const ProfileCreatedIssuesPage: NextPageWithLayout = () => ( <> diff --git a/web/pages/[workspaceSlug]/profile/[userId]/index.tsx b/web/pages/[workspaceSlug]/profile/[userId]/index.tsx index 6e8a10b50..eb71989ed 100644 --- a/web/pages/[workspaceSlug]/profile/[userId]/index.tsx +++ b/web/pages/[workspaceSlug]/profile/[userId]/index.tsx @@ -2,13 +2,10 @@ import { ReactElement } from "react"; import { useRouter } from "next/router"; import useSWR from "swr"; // services -import { UserService } from "services/user.service"; // layouts -import { AppLayout } from "layouts/app-layout"; -import { ProfileAuthWrapper } from "layouts/user-profile-layout"; // components -import { UserProfileHeader } from "components/headers"; import { PageHead } from "components/core"; +import { UserProfileHeader } from "components/headers"; import { ProfileActivity, ProfilePriorityDistribution, @@ -17,11 +14,14 @@ import { ProfileWorkload, } from "components/profile"; // types -import { IUserStateDistribution, TStateGroups } from "@plane/types"; -import { NextPageWithLayout } from "lib/types"; // constants import { USER_PROFILE_DATA } from "constants/fetch-keys"; import { GROUP_CHOICES } from "constants/project"; +import { AppLayout } from "layouts/app-layout"; +import { ProfileAuthWrapper } from "layouts/user-profile-layout"; +import { NextPageWithLayout } from "lib/types"; +import { UserService } from "services/user.service"; +import { IUserStateDistribution, TStateGroups } from "@plane/types"; // services const userService = new UserService(); diff --git a/web/pages/[workspaceSlug]/profile/[userId]/subscribed.tsx b/web/pages/[workspaceSlug]/profile/[userId]/subscribed.tsx index c05c39302..c81ed6918 100644 --- a/web/pages/[workspaceSlug]/profile/[userId]/subscribed.tsx +++ b/web/pages/[workspaceSlug]/profile/[userId]/subscribed.tsx @@ -2,14 +2,14 @@ import { ReactElement } from "react"; // store import { observer } from "mobx-react-lite"; // layouts +import { PageHead } from "components/core"; +import { UserProfileHeader } from "components/headers"; +import { ProfileIssuesPage } from "components/profile/profile-issues"; import { AppLayout } from "layouts/app-layout"; import { ProfileAuthWrapper } from "layouts/user-profile-layout"; // components -import { UserProfileHeader } from "components/headers"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; -import { ProfileIssuesPage } from "components/profile/profile-issues"; const ProfileSubscribedIssuesPage: NextPageWithLayout = () => ( <> diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/archived-issues/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/archived-issues/index.tsx index 34019c026..353f0a8b6 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/archived-issues/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/archived-issues/index.tsx @@ -1,17 +1,17 @@ import { ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // layouts +import { PageHead } from "components/core"; +import { ProjectArchivedIssuesHeader } from "components/headers"; +import { ArchivedIssueLayoutRoot } from "components/issues"; +import { useProject } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; // contexts -import { ArchivedIssueLayoutRoot } from "components/issues"; // components -import { ProjectArchivedIssuesHeader } from "components/headers"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useProject } from "hooks/store"; const ProjectArchivedIssuesPage: NextPageWithLayout = observer(() => { // router diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx index 7b5ec8833..6eaef6c0f 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/[cycleId].tsx @@ -1,23 +1,23 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react"; // hooks +import { EmptyState } from "components/common"; +import { PageHead } from "components/core"; +import { CycleDetailsSidebar } from "components/cycles"; +import { CycleIssuesHeader } from "components/headers"; +import { CycleLayoutRoot } from "components/issues/issue-layouts"; import { useCycle, useProject } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; // layouts import { AppLayout } from "layouts/app-layout"; // components -import { PageHead } from "components/core"; -import { CycleIssuesHeader } from "components/headers"; -import { CycleDetailsSidebar } from "components/cycles"; -import { CycleLayoutRoot } from "components/issues/issue-layouts"; // ui -import { EmptyState } from "components/common"; // assets +import { NextPageWithLayout } from "lib/types"; import emptyCycle from "public/empty-state/cycle.svg"; // types -import { NextPageWithLayout } from "lib/types"; const CycleDetailPage: NextPageWithLayout = observer(() => { // router diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx index 0f86089aa..ac2b760ef 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/cycles/index.tsx @@ -1,28 +1,28 @@ import { Fragment, useCallback, useState, ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import { Tab } from "@headlessui/react"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import { Tab } from "@headlessui/react"; // hooks +import { Tooltip } from "@plane/ui"; +import { PageHead } from "components/core"; +import { CyclesView, ActiveCycleDetails, CycleCreateUpdateModal } from "components/cycles"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { CyclesHeader } from "components/headers"; +import { CycleModuleBoardLayout, CycleModuleListLayout, GanttLayoutLoader } from "components/ui"; +import { CYCLE_TAB_LIST, CYCLE_VIEW_LAYOUTS } from "constants/cycle"; +import { CYCLE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useEventTracker, useCycle, useUser, useProject } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; // layouts import { AppLayout } from "layouts/app-layout"; // components -import { PageHead } from "components/core"; -import { CyclesHeader } from "components/headers"; -import { CyclesView, ActiveCycleDetails, CycleCreateUpdateModal } from "components/cycles"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Tooltip } from "@plane/ui"; -import { CycleModuleBoardLayout, CycleModuleListLayout, GanttLayoutLoader } from "components/ui"; // types -import { TCycleView, TCycleLayout } from "@plane/types"; import { NextPageWithLayout } from "lib/types"; +import { TCycleView, TCycleLayout } from "@plane/types"; // constants -import { CYCLE_TAB_LIST, CYCLE_VIEW_LAYOUTS } from "constants/cycle"; -import { EUserWorkspaceRoles } from "constants/workspace"; -import { CYCLE_EMPTY_STATE_DETAILS } from "constants/empty-state"; const ProjectCyclesPage: NextPageWithLayout = observer(() => { const [createModal, setCreateModal] = useState(false); diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/draft-issues/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/draft-issues/index.tsx index bf11063c3..c506e55b0 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/draft-issues/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/draft-issues/index.tsx @@ -1,17 +1,17 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import { X, PenSquare } from "lucide-react"; // layouts -import { AppLayout } from "layouts/app-layout"; // components -import { DraftIssueLayoutRoot } from "components/issues/issue-layouts/roots/draft-issue-layout-root"; import { PageHead } from "components/core"; import { ProjectDraftIssueHeader } from "components/headers"; +import { DraftIssueLayoutRoot } from "components/issues/issue-layouts/roots/draft-issue-layout-root"; // types -import { NextPageWithLayout } from "lib/types"; // hooks import { useProject } from "hooks/store"; -import { observer } from "mobx-react"; +import { AppLayout } from "layouts/app-layout"; +import { NextPageWithLayout } from "lib/types"; const ProjectDraftIssuesPage: NextPageWithLayout = observer(() => { const router = useRouter(); diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx index de412c9d7..f8fb1aa47 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/inbox/[inboxId].tsx @@ -1,16 +1,16 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react"; // hooks +import { PageHead } from "components/core"; +import { ProjectInboxHeader } from "components/headers"; +import { InboxSidebarRoot, InboxContentRoot } from "components/inbox"; +import { InboxLayoutLoader } from "components/ui"; import { useProject, useInboxIssues } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; // components -import { InboxLayoutLoader } from "components/ui"; -import { PageHead } from "components/core"; -import { ProjectInboxHeader } from "components/headers"; -import { InboxSidebarRoot, InboxContentRoot } from "components/inbox"; // types import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/inbox/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/inbox/index.tsx index 1021ad102..c3d3f2e5a 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/inbox/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/inbox/index.tsx @@ -1,15 +1,15 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react"; // hooks +import { ProjectInboxHeader } from "components/headers"; +import { InboxLayoutLoader } from "components/ui"; import { useInbox, useProject } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; // ui -import { InboxLayoutLoader } from "components/ui"; // components -import { ProjectInboxHeader } from "components/headers"; // types import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx index 6ff7d5aa5..54994ab6d 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/issues/[issueId].tsx @@ -1,19 +1,19 @@ import React, { ReactElement, useEffect } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react-lite"; // layouts -import { AppLayout } from "layouts/app-layout"; -// components +import { Loader } from "@plane/ui"; import { PageHead } from "components/core"; +// components import { ProjectIssueDetailsHeader } from "components/headers"; import { IssueDetailRoot } from "components/issues"; // ui -import { Loader } from "@plane/ui"; // types -import { NextPageWithLayout } from "lib/types"; // store hooks import { useApplication, useIssueDetail, useProject } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; +import { NextPageWithLayout } from "lib/types"; const IssueDetailsPage: NextPageWithLayout = observer(() => { // router diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/issues/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/issues/index.tsx index 2aa9ab2e6..241af79c4 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/issues/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/issues/index.tsx @@ -1,17 +1,17 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import Head from "next/head"; import { useRouter } from "next/router"; -import { observer } from "mobx-react"; // components -import { ProjectLayoutRoot } from "components/issues"; +import { PageHead } from "components/core"; import { ProjectIssuesHeader } from "components/headers"; +import { ProjectLayoutRoot } from "components/issues"; // types +import { useProject } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; import { NextPageWithLayout } from "lib/types"; // layouts -import { AppLayout } from "layouts/app-layout"; // hooks -import { useProject } from "hooks/store"; -import { PageHead } from "components/core"; const ProjectIssuesPage: NextPageWithLayout = observer(() => { const router = useRouter(); diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx index afbd97b8e..e55eea170 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/modules/[moduleId].tsx @@ -1,22 +1,22 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react"; // hooks +import { EmptyState } from "components/common"; +import { PageHead } from "components/core"; +import { ModuleIssuesHeader } from "components/headers"; +import { ModuleLayoutRoot } from "components/issues"; +import { ModuleDetailsSidebar } from "components/modules"; import { useModule, useProject } from "hooks/store"; import useLocalStorage from "hooks/use-local-storage"; // layouts import { AppLayout } from "layouts/app-layout"; // components -import { ModuleDetailsSidebar } from "components/modules"; -import { ModuleLayoutRoot } from "components/issues"; -import { ModuleIssuesHeader } from "components/headers"; -import { PageHead } from "components/core"; -import { EmptyState } from "components/common"; // assets +import { NextPageWithLayout } from "lib/types"; import emptyModule from "public/empty-state/module.svg"; // types -import { NextPageWithLayout } from "lib/types"; const ModuleIssuesPage: NextPageWithLayout = observer(() => { // router diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx index 085f1e3c3..3648f5922 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/modules/index.tsx @@ -1,16 +1,16 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; // layouts -import { AppLayout } from "layouts/app-layout"; // components import { PageHead } from "components/core"; -import { ModulesListView } from "components/modules"; import { ModulesListHeader } from "components/headers"; +import { ModulesListView } from "components/modules"; // types -import { NextPageWithLayout } from "lib/types"; // hooks import { useProject } from "hooks/store"; -import { observer } from "mobx-react"; +import { AppLayout } from "layouts/app-layout"; +import { NextPageWithLayout } from "lib/types"; const ProjectModulesPage: NextPageWithLayout = observer(() => { const router = useRouter(); diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx index c44f6186e..3a133ee50 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/pages/[pageId].tsx @@ -1,33 +1,33 @@ -import { Sparkle } from "lucide-react"; -import { observer } from "mobx-react-lite"; -import useSWR from "swr"; -import { useRouter } from "next/router"; import { ReactElement, useEffect, useRef, useState } from "react"; +import { DocumentEditorWithRef, DocumentReadOnlyEditorWithRef } from "@plane/document-editor"; +import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; +import useSWR from "swr"; +import { Sparkle } from "lucide-react"; // hooks -import { useApplication, usePage, useUser, useWorkspace } from "hooks/store"; -import useReloadConfirmations from "hooks/use-reload-confirmation"; -// services -import { FileService } from "services/file.service"; -// layouts -import { AppLayout } from "layouts/app-layout"; -// components +import { Spinner, TOAST_TYPE, setToast } from "@plane/ui"; import { GptAssistantPopover, PageHead } from "components/core"; import { PageDetailsHeader } from "components/headers/page-details"; +import { IssuePeekOverview } from "components/issues"; +import { EUserProjectRoles } from "constants/project"; +import { useApplication, usePage, useUser, useWorkspace } from "hooks/store"; +import { useProjectPages } from "hooks/store/use-project-specific-pages"; +import useReloadConfirmations from "hooks/use-reload-confirmation"; +// services +import { AppLayout } from "layouts/app-layout"; +import { NextPageWithLayout } from "lib/types"; +import { FileService } from "services/file.service"; +// layouts +// components // ui -import { DocumentEditorWithRef, DocumentReadOnlyEditorWithRef } from "@plane/document-editor"; -import { Spinner, TOAST_TYPE, setToast } from "@plane/ui"; // assets // helpers // types import { IPage } from "@plane/types"; -import { NextPageWithLayout } from "lib/types"; // fetch-keys // constants -import { EUserProjectRoles } from "constants/project"; -import { useProjectPages } from "hooks/store/use-project-specific-pages"; -import { IssuePeekOverview } from "components/issues"; // services const fileService = new FileService(); @@ -311,7 +311,7 @@ const PageDetailsPage: NextPageWithLayout = observer(() => { updatePageTitle={updatePageTitle} onActionCompleteHandler={actionCompleteAlert} customClassName="tracking-tight self-center h-full w-full right-[0.675rem]" - onChange={(_description_json: Object, description_html: string) => { + onChange={(_description_json: any, description_html: string) => { setShowAlert(true); onChange(description_html); handleSubmit(updatePage)(); diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx index a8c85ef8d..45204541b 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/pages/index.tsx @@ -1,30 +1,30 @@ import { useState, Fragment, ReactElement } from "react"; -import { useRouter } from "next/router"; -import dynamic from "next/dynamic"; -import { Tab } from "@headlessui/react"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import dynamic from "next/dynamic"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import useSWR from "swr"; +import { Tab } from "@headlessui/react"; // hooks +import { PageHead } from "components/core"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { PagesHeader } from "components/headers"; +import { RecentPagesList, CreateUpdatePageModal } from "components/pages"; +import { PagesLoader } from "components/ui"; +import { PAGE_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { PAGE_TABS_LIST } from "constants/page"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useApplication, useEventTracker, useUser, useProject } from "hooks/store"; +import { useProjectPages } from "hooks/store/use-project-page"; import useLocalStorage from "hooks/use-local-storage"; import useUserAuth from "hooks/use-user-auth"; import useSize from "hooks/use-window-size"; // layouts import { AppLayout } from "layouts/app-layout"; // components -import { RecentPagesList, CreateUpdatePageModal } from "components/pages"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; -import { PagesHeader } from "components/headers"; -import { PagesLoader } from "components/ui"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { PAGE_TABS_LIST } from "constants/page"; -import { useProjectPages } from "hooks/store/use-project-page"; -import { EUserWorkspaceRoles } from "constants/workspace"; -import { PAGE_EMPTY_STATE_DETAILS } from "constants/empty-state"; -import { PageHead } from "components/core"; const AllPagesList = dynamic(() => import("components/pages").then((a) => a.AllPagesList), { ssr: false, diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx index 1cefb9418..d6724c789 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/automations.tsx @@ -1,22 +1,25 @@ import React, { ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; // hooks -import { useProject, useUser } from "hooks/store"; -// layouts -import { AppLayout } from "layouts/app-layout"; -import { ProjectSettingLayout } from "layouts/settings-layout"; -// ui import { TOAST_TYPE, setToast } from "@plane/ui"; -// components import { AutoArchiveAutomation, AutoCloseAutomation } from "components/automation"; +// layouts +// ui +// components import { PageHead } from "components/core"; import { ProjectSettingHeader } from "components/headers"; +import { EUserProjectRoles } from "constants/project"; +import { useProject, useUser } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; +// layouts +import { ProjectSettingLayout } from "layouts/settings-layout"; +// hooks +// components // types import { NextPageWithLayout } from "lib/types"; import { IProject } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; const AutomationSettingsPage: NextPageWithLayout = observer(() => { // router diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx index 70108f90a..c1aea645f 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/estimates.tsx @@ -1,18 +1,18 @@ import { ReactElement } from "react"; import { observer } from "mobx-react-lite"; // hooks +import { PageHead } from "components/core"; +import { EstimatesList } from "components/estimates"; +import { ProjectSettingHeader } from "components/headers"; +import { EUserProjectRoles } from "constants/project"; import { useUser, useProject } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { ProjectSettingLayout } from "layouts/settings-layout"; // components -import { PageHead } from "components/core"; -import { ProjectSettingHeader } from "components/headers"; -import { EstimatesList } from "components/estimates"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { EUserProjectRoles } from "constants/project"; const EstimatesSettingsPage: NextPageWithLayout = observer(() => { const { diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx index b618437ab..e36ebd9a8 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/features.tsx @@ -1,16 +1,16 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react"; // hooks +import { PageHead } from "components/core"; +import { ProjectSettingHeader } from "components/headers"; +import { ProjectFeaturesList } from "components/project"; import { useProject, useUser } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { ProjectSettingLayout } from "layouts/settings-layout"; // components -import { PageHead } from "components/core"; -import { ProjectSettingHeader } from "components/headers"; -import { ProjectFeaturesList } from "components/project"; // types import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx index 347d64f84..037e47434 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/index.tsx @@ -1,13 +1,8 @@ import { useState, ReactElement } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react-lite"; // hooks -import { useProject } from "hooks/store"; -// layouts -import { AppLayout } from "layouts/app-layout"; -import { ProjectSettingLayout } from "layouts/settings-layout"; -// components import { PageHead } from "components/core"; import { ProjectSettingHeader } from "components/headers"; import { @@ -16,6 +11,11 @@ import { ProjectDetailsForm, ProjectDetailsFormLoader, } from "components/project"; +import { useProject } from "hooks/store"; +// layouts +import { AppLayout } from "layouts/app-layout"; +import { ProjectSettingLayout } from "layouts/settings-layout"; +// components // types import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/integrations.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/integrations.tsx index 5c9faae7c..b227becf9 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/integrations.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/integrations.tsx @@ -1,29 +1,29 @@ import { ReactElement } from "react"; -import { useRouter } from "next/router"; -import useSWR from "swr"; -import { useTheme } from "next-themes"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; +import { useTheme } from "next-themes"; +import useSWR from "swr"; // hooks +import { PageHead } from "components/core"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { ProjectSettingHeader } from "components/headers"; +import { IntegrationCard } from "components/project"; +import { IntegrationsSettingsLoader } from "components/ui"; +import { PROJECT_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { PROJECT_DETAILS, WORKSPACE_INTEGRATIONS } from "constants/fetch-keys"; import { useUser } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { ProjectSettingLayout } from "layouts/settings-layout"; // services +import { NextPageWithLayout } from "lib/types"; import { IntegrationService } from "services/integrations"; import { ProjectService } from "services/project"; // components -import { PageHead } from "components/core"; -import { IntegrationCard } from "components/project"; -import { ProjectSettingHeader } from "components/headers"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { IntegrationsSettingsLoader } from "components/ui"; // types import { IProject } from "@plane/types"; -import { NextPageWithLayout } from "lib/types"; // fetch-keys -import { PROJECT_DETAILS, WORKSPACE_INTEGRATIONS } from "constants/fetch-keys"; -import { PROJECT_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; // services const integrationService = new IntegrationService(); diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx index d62ac1e66..8b3758829 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/labels.tsx @@ -1,16 +1,16 @@ import { ReactElement } from "react"; import { observer } from "mobx-react"; // layouts +import { PageHead } from "components/core"; +import { ProjectSettingHeader } from "components/headers"; +import { ProjectSettingsLabelList } from "components/labels"; +import { useProject } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; import { ProjectSettingLayout } from "layouts/settings-layout"; // components -import { PageHead } from "components/core"; -import { ProjectSettingsLabelList } from "components/labels"; -import { ProjectSettingHeader } from "components/headers"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useProject } from "hooks/store"; const LabelsSettingsPage: NextPageWithLayout = observer(() => { const { currentProjectDetails } = useProject(); diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx index f74d464d5..551dde0c2 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/members.tsx @@ -1,16 +1,16 @@ import { ReactElement } from "react"; import { observer } from "mobx-react"; // layouts -import { AppLayout } from "layouts/app-layout"; -import { ProjectSettingLayout } from "layouts/settings-layout"; // components import { PageHead } from "components/core"; import { ProjectSettingHeader } from "components/headers"; import { ProjectMemberList, ProjectSettingsMemberDefaults } from "components/project"; // types -import { NextPageWithLayout } from "lib/types"; // hooks import { useProject } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; +import { ProjectSettingLayout } from "layouts/settings-layout"; +import { NextPageWithLayout } from "lib/types"; const MembersSettingsPage: NextPageWithLayout = observer(() => { // store diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/settings/states.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/settings/states.tsx index 57451e699..4a5c290d8 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/settings/states.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/settings/states.tsx @@ -1,16 +1,16 @@ import { ReactElement } from "react"; import { observer } from "mobx-react"; // layout +import { PageHead } from "components/core"; +import { ProjectSettingHeader } from "components/headers"; +import { ProjectSettingStateList } from "components/states"; +import { useProject } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; import { ProjectSettingLayout } from "layouts/settings-layout"; // components -import { ProjectSettingStateList } from "components/states"; -import { ProjectSettingHeader } from "components/headers"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; // hook -import { useProject } from "hooks/store"; const StatesSettingsPage: NextPageWithLayout = observer(() => { // store diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx b/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx index 2ac6b2e00..17ba29394 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/views/[viewId].tsx @@ -1,21 +1,21 @@ import { ReactElement } from "react"; +import { observer } from "mobx-react"; import { useRouter } from "next/router"; import useSWR from "swr"; -import { observer } from "mobx-react"; // hooks +import { EmptyState } from "components/common"; +import { PageHead } from "components/core"; +import { ProjectViewIssuesHeader } from "components/headers"; +import { ProjectViewLayoutRoot } from "components/issues"; import { useProject, useProjectView } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; // components -import { ProjectViewLayoutRoot } from "components/issues"; -import { ProjectViewIssuesHeader } from "components/headers"; -import { PageHead } from "components/core"; // ui -import { EmptyState } from "components/common"; // assets +import { NextPageWithLayout } from "lib/types"; import emptyView from "public/empty-state/view.svg"; // types -import { NextPageWithLayout } from "lib/types"; const ProjectViewIssuesPage: NextPageWithLayout = observer(() => { // router diff --git a/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx b/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx index 33be5d102..9864ef391 100644 --- a/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx +++ b/web/pages/[workspaceSlug]/projects/[projectId]/views/index.tsx @@ -1,10 +1,10 @@ import { ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // components +import { PageHead } from "components/core"; import { ProjectViewsHeader } from "components/headers"; import { ProjectViewsList } from "components/views"; -import { PageHead } from "components/core"; // hooks import { useProject } from "hooks/store"; // layouts diff --git a/web/pages/[workspaceSlug]/projects/index.tsx b/web/pages/[workspaceSlug]/projects/index.tsx index 1a145a2d1..158e6577f 100644 --- a/web/pages/[workspaceSlug]/projects/index.tsx +++ b/web/pages/[workspaceSlug]/projects/index.tsx @@ -2,13 +2,13 @@ import { ReactElement } from "react"; import { observer } from "mobx-react"; // components import { PageHead } from "components/core"; -import { ProjectCardList } from "components/project"; import { ProjectsHeader } from "components/headers"; +import { ProjectCardList } from "components/project"; // layouts +import { useWorkspace } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; // type import { NextPageWithLayout } from "lib/types"; -import { useWorkspace } from "hooks/store"; const ProjectsPage: NextPageWithLayout = observer(() => { // store diff --git a/web/pages/[workspaceSlug]/settings/api-tokens.tsx b/web/pages/[workspaceSlug]/settings/api-tokens.tsx index 35366cb0a..75d46b63d 100644 --- a/web/pages/[workspaceSlug]/settings/api-tokens.tsx +++ b/web/pages/[workspaceSlug]/settings/api-tokens.tsx @@ -1,29 +1,29 @@ import React, { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import useSWR from "swr"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import useSWR from "swr"; // store hooks +import { Button } from "@plane/ui"; +import { ApiTokenListItem, CreateApiTokenModal } from "components/api-token"; +import { PageHead } from "components/core"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { WorkspaceSettingHeader } from "components/headers"; +import { APITokenSettingsLoader } from "components/ui"; +import { WORKSPACE_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; +import { API_TOKENS_LIST } from "constants/fetch-keys"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useUser, useWorkspace } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { WorkspaceSettingLayout } from "layouts/settings-layout"; // component -import { WorkspaceSettingHeader } from "components/headers"; -import { ApiTokenListItem, CreateApiTokenModal } from "components/api-token"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Button } from "@plane/ui"; -import { APITokenSettingsLoader } from "components/ui"; // services +import { NextPageWithLayout } from "lib/types"; import { APITokenService } from "services/api_token.service"; // types -import { NextPageWithLayout } from "lib/types"; // constants -import { API_TOKENS_LIST } from "constants/fetch-keys"; -import { EUserWorkspaceRoles } from "constants/workspace"; -import { WORKSPACE_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; -import { PageHead } from "components/core"; const apiTokenService = new APITokenService(); diff --git a/web/pages/[workspaceSlug]/settings/billing.tsx b/web/pages/[workspaceSlug]/settings/billing.tsx index f4f5d5397..bd1114f85 100644 --- a/web/pages/[workspaceSlug]/settings/billing.tsx +++ b/web/pages/[workspaceSlug]/settings/billing.tsx @@ -1,18 +1,18 @@ import { observer } from "mobx-react-lite"; // hooks +import { Button } from "@plane/ui"; +import { PageHead } from "components/core"; +import { WorkspaceSettingHeader } from "components/headers"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useUser, useWorkspace } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { WorkspaceSettingLayout } from "layouts/settings-layout"; // component -import { WorkspaceSettingHeader } from "components/headers"; -import { PageHead } from "components/core"; // ui -import { Button } from "@plane/ui"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; const BillingSettingsPage: NextPageWithLayout = observer(() => { // store hooks diff --git a/web/pages/[workspaceSlug]/settings/exports.tsx b/web/pages/[workspaceSlug]/settings/exports.tsx index c124a6423..a6f958472 100644 --- a/web/pages/[workspaceSlug]/settings/exports.tsx +++ b/web/pages/[workspaceSlug]/settings/exports.tsx @@ -1,17 +1,17 @@ import { observer } from "mobx-react-lite"; // hooks +import { PageHead } from "components/core"; +import ExportGuide from "components/exporter/guide"; +import { WorkspaceSettingHeader } from "components/headers"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useUser, useWorkspace } from "hooks/store"; // layout import { AppLayout } from "layouts/app-layout"; import { WorkspaceSettingLayout } from "layouts/settings-layout"; // components -import { WorkspaceSettingHeader } from "components/headers"; -import ExportGuide from "components/exporter/guide"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; const ExportsPage: NextPageWithLayout = observer(() => { // store hooks diff --git a/web/pages/[workspaceSlug]/settings/imports.tsx b/web/pages/[workspaceSlug]/settings/imports.tsx index 5178209d2..19eeeac66 100644 --- a/web/pages/[workspaceSlug]/settings/imports.tsx +++ b/web/pages/[workspaceSlug]/settings/imports.tsx @@ -1,17 +1,17 @@ import { observer } from "mobx-react-lite"; // hooks +import { PageHead } from "components/core"; +import { WorkspaceSettingHeader } from "components/headers"; +import IntegrationGuide from "components/integration/guide"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { useUser, useWorkspace } from "hooks/store"; // layouts -import { WorkspaceSettingLayout } from "layouts/settings-layout"; import { AppLayout } from "layouts/app-layout"; +import { WorkspaceSettingLayout } from "layouts/settings-layout"; // components -import IntegrationGuide from "components/integration/guide"; -import { WorkspaceSettingHeader } from "components/headers"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; const ImportsPage: NextPageWithLayout = observer(() => { // store hooks diff --git a/web/pages/[workspaceSlug]/settings/index.tsx b/web/pages/[workspaceSlug]/settings/index.tsx index 2924b13c4..37ce39335 100644 --- a/web/pages/[workspaceSlug]/settings/index.tsx +++ b/web/pages/[workspaceSlug]/settings/index.tsx @@ -1,14 +1,14 @@ import { ReactElement } from "react"; import { observer } from "mobx-react"; // layouts +import { PageHead } from "components/core"; +import { WorkspaceSettingHeader } from "components/headers"; +import { WorkspaceDetails } from "components/workspace"; +import { useWorkspace } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; import { WorkspaceSettingLayout } from "layouts/settings-layout"; // hooks -import { useWorkspace } from "hooks/store"; // components -import { WorkspaceSettingHeader } from "components/headers"; -import { WorkspaceDetails } from "components/workspace"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/[workspaceSlug]/settings/integrations.tsx b/web/pages/[workspaceSlug]/settings/integrations.tsx index 500533877..0aa54f60a 100644 --- a/web/pages/[workspaceSlug]/settings/integrations.tsx +++ b/web/pages/[workspaceSlug]/settings/integrations.tsx @@ -1,26 +1,26 @@ import { ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; // hooks -import { useUser, useWorkspace } from "hooks/store"; // services -import { IntegrationService } from "services/integrations"; // layouts -import { AppLayout } from "layouts/app-layout"; -import { WorkspaceSettingLayout } from "layouts/settings-layout"; // components -import { SingleIntegrationCard } from "components/integration"; -import { WorkspaceSettingHeader } from "components/headers"; import { PageHead } from "components/core"; +import { WorkspaceSettingHeader } from "components/headers"; +import { SingleIntegrationCard } from "components/integration"; // ui import { IntegrationAndImportExportBanner, IntegrationsSettingsLoader } from "components/ui"; // types -import { NextPageWithLayout } from "lib/types"; // fetch-keys import { APP_INTEGRATIONS } from "constants/fetch-keys"; // constants import { EUserWorkspaceRoles } from "constants/workspace"; +import { useUser, useWorkspace } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; +import { WorkspaceSettingLayout } from "layouts/settings-layout"; +import { NextPageWithLayout } from "lib/types"; +import { IntegrationService } from "services/integrations"; const integrationService = new IntegrationService(); diff --git a/web/pages/[workspaceSlug]/settings/members.tsx b/web/pages/[workspaceSlug]/settings/members.tsx index f635588c2..e1be1d889 100644 --- a/web/pages/[workspaceSlug]/settings/members.tsx +++ b/web/pages/[workspaceSlug]/settings/members.tsx @@ -1,26 +1,26 @@ import { useState, ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Search } from "lucide-react"; // hooks +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; +import { PageHead } from "components/core"; +import { WorkspaceSettingHeader } from "components/headers"; +import { SendWorkspaceInvitationModal, WorkspaceMembersList } from "components/workspace"; +import { MEMBER_INVITED } from "constants/event-tracker"; +import { EUserWorkspaceRoles } from "constants/workspace"; +import { getUserRole } from "helpers/user.helper"; import { useEventTracker, useMember, useUser, useWorkspace } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { WorkspaceSettingLayout } from "layouts/settings-layout"; // components -import { WorkspaceSettingHeader } from "components/headers"; -import { SendWorkspaceInvitationModal, WorkspaceMembersList } from "components/workspace"; -import { PageHead } from "components/core"; // ui -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // types import { NextPageWithLayout } from "lib/types"; import { IWorkspaceBulkInviteFormData } from "@plane/types"; // helpers -import { getUserRole } from "helpers/user.helper"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; -import { MEMBER_INVITED } from "constants/event-tracker"; const WorkspaceMembersSettingsPage: NextPageWithLayout = observer(() => { // states @@ -30,7 +30,7 @@ const WorkspaceMembersSettingsPage: NextPageWithLayout = observer(() => { const router = useRouter(); const { workspaceSlug } = router.query; // store hooks - const { captureEvent, setTrackElement } = useEventTracker(); + const { captureEvent } = useEventTracker(); const { membership: { currentWorkspaceRole }, } = useUser(); diff --git a/web/pages/[workspaceSlug]/settings/webhooks/[webhookId].tsx b/web/pages/[workspaceSlug]/settings/webhooks/[webhookId].tsx index bafaa3aaa..263f90963 100644 --- a/web/pages/[workspaceSlug]/settings/webhooks/[webhookId].tsx +++ b/web/pages/[workspaceSlug]/settings/webhooks/[webhookId].tsx @@ -1,18 +1,19 @@ import { useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import useSWR from "swr"; // hooks +import { Spinner, TOAST_TYPE, setToast } from "@plane/ui"; + +import { PageHead } from "components/core"; +import { WorkspaceSettingHeader } from "components/headers"; +import { DeleteWebhookModal, WebhookDeleteSection, WebhookForm } from "components/web-hooks"; import { useUser, useWebhook, useWorkspace } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { WorkspaceSettingLayout } from "layouts/settings-layout"; // components -import { WorkspaceSettingHeader } from "components/headers"; -import { DeleteWebhookModal, WebhookDeleteSection, WebhookForm } from "components/web-hooks"; -import { PageHead } from "components/core"; // ui -import { Spinner, TOAST_TYPE, setToast } from "@plane/ui"; // types import { NextPageWithLayout } from "lib/types"; import { IWebhook } from "@plane/types"; diff --git a/web/pages/[workspaceSlug]/settings/webhooks/index.tsx b/web/pages/[workspaceSlug]/settings/webhooks/index.tsx index 19f23913e..d5058e29f 100644 --- a/web/pages/[workspaceSlug]/settings/webhooks/index.tsx +++ b/web/pages/[workspaceSlug]/settings/webhooks/index.tsx @@ -1,25 +1,25 @@ import React, { useEffect, useState } from "react"; -import { useRouter } from "next/router"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { useTheme } from "next-themes"; +import useSWR from "swr"; // hooks +import { Button } from "@plane/ui"; +import { PageHead } from "components/core"; +import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; +import { WorkspaceSettingHeader } from "components/headers"; +import { WebhookSettingsLoader } from "components/ui"; +import { WebhooksList, CreateWebhookModal } from "components/web-hooks"; +import { WORKSPACE_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; import { useUser, useWebhook, useWorkspace } from "hooks/store"; // layouts import { AppLayout } from "layouts/app-layout"; import { WorkspaceSettingLayout } from "layouts/settings-layout"; // components -import { WorkspaceSettingHeader } from "components/headers"; -import { WebhooksList, CreateWebhookModal } from "components/web-hooks"; -import { EmptyState, getEmptyStateImagePath } from "components/empty-state"; // ui -import { Button } from "@plane/ui"; -import { WebhookSettingsLoader } from "components/ui"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { WORKSPACE_SETTINGS_EMPTY_STATE_DETAILS } from "constants/empty-state"; -import { PageHead } from "components/core"; const WebhooksListPage: NextPageWithLayout = observer(() => { // states diff --git a/web/pages/[workspaceSlug]/workspace-views/[globalViewId].tsx b/web/pages/[workspaceSlug]/workspace-views/[globalViewId].tsx index 85e907481..7d736e8f9 100644 --- a/web/pages/[workspaceSlug]/workspace-views/[globalViewId].tsx +++ b/web/pages/[workspaceSlug]/workspace-views/[globalViewId].tsx @@ -1,19 +1,19 @@ import { ReactElement } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react"; +import { useRouter } from "next/router"; // layouts +import { PageHead } from "components/core"; +import { GlobalIssuesHeader } from "components/headers"; +import { AllIssueLayoutRoot } from "components/issues"; +import { GlobalViewsHeader } from "components/workspace"; +import { DEFAULT_GLOBAL_VIEWS_LIST } from "constants/workspace"; +import { useGlobalView, useWorkspace } from "hooks/store"; import { AppLayout } from "layouts/app-layout"; // hooks -import { useGlobalView, useWorkspace } from "hooks/store"; // components -import { GlobalViewsHeader } from "components/workspace"; -import { AllIssueLayoutRoot } from "components/issues"; -import { GlobalIssuesHeader } from "components/headers"; -import { PageHead } from "components/core"; // types import { NextPageWithLayout } from "lib/types"; // constants -import { DEFAULT_GLOBAL_VIEWS_LIST } from "constants/workspace"; const GlobalViewIssuesPage: NextPageWithLayout = observer(() => { // router @@ -29,8 +29,8 @@ const GlobalViewIssuesPage: NextPageWithLayout = observer(() => { currentWorkspace?.name && defaultView?.label ? `${currentWorkspace?.name} - ${defaultView?.label}` : currentWorkspace?.name && globalViewDetails?.name - ? `${currentWorkspace?.name} - ${globalViewDetails?.name}` - : undefined; + ? `${currentWorkspace?.name} - ${globalViewDetails?.name}` + : undefined; return ( <> diff --git a/web/pages/[workspaceSlug]/workspace-views/index.tsx b/web/pages/[workspaceSlug]/workspace-views/index.tsx index 61fdcf058..ccd7ac485 100644 --- a/web/pages/[workspaceSlug]/workspace-views/index.tsx +++ b/web/pages/[workspaceSlug]/workspace-views/index.tsx @@ -1,21 +1,21 @@ import React, { useState, ReactElement } from "react"; import { observer } from "mobx-react"; // layouts -import { AppLayout } from "layouts/app-layout"; // components -import { PageHead } from "components/core"; -import { GlobalDefaultViewListItem, GlobalViewsList } from "components/workspace"; -import { GlobalIssuesHeader } from "components/headers"; // ui +import { Search } from "lucide-react"; import { Input } from "@plane/ui"; // icons -import { Search } from "lucide-react"; +import { PageHead } from "components/core"; +import { GlobalIssuesHeader } from "components/headers"; +import { GlobalDefaultViewListItem, GlobalViewsList } from "components/workspace"; // types -import { NextPageWithLayout } from "lib/types"; // constants import { DEFAULT_GLOBAL_VIEWS_LIST } from "constants/workspace"; // hooks import { useWorkspace } from "hooks/store"; +import { AppLayout } from "layouts/app-layout"; +import { NextPageWithLayout } from "lib/types"; const WorkspaceViewsPage: NextPageWithLayout = observer(() => { const [query, setQuery] = useState(""); diff --git a/web/pages/_document.tsx b/web/pages/_document.tsx index cc0411068..ccaa34a40 100644 --- a/web/pages/_document.tsx +++ b/web/pages/_document.tsx @@ -1,5 +1,6 @@ import Document, { Html, Head, Main, NextScript } from "next/document"; // constants +import Script from "next/script"; import { SITE_NAME, SITE_DESCRIPTION, @@ -8,7 +9,6 @@ import { SITE_KEYWORDS, SITE_TITLE, } from "constants/seo-variables"; -import Script from "next/script"; class MyDocument extends Document { render() { diff --git a/web/pages/_error.tsx b/web/pages/_error.tsx index 0a530cf9f..81e0daecd 100644 --- a/web/pages/_error.tsx +++ b/web/pages/_error.tsx @@ -3,11 +3,12 @@ import * as Sentry from "@sentry/nextjs"; import { useRouter } from "next/router"; // services +import { Button, TOAST_TYPE, setToast } from "@plane/ui"; + +import DefaultLayout from "layouts/default-layout"; import { AuthService } from "services/auth.service"; // layouts -import DefaultLayout from "layouts/default-layout"; // ui -import { Button, TOAST_TYPE, setToast } from "@plane/ui"; // services const authService = new AuthService(); diff --git a/web/pages/accounts/sign-up.tsx b/web/pages/accounts/sign-up.tsx index cba9c0166..c40a1660b 100644 --- a/web/pages/accounts/sign-up.tsx +++ b/web/pages/accounts/sign-up.tsx @@ -1,19 +1,19 @@ import React from "react"; -import Image from "next/image"; import { observer } from "mobx-react-lite"; +import Image from "next/image"; // hooks +import { Spinner } from "@plane/ui"; +import { SignUpRoot } from "components/account"; +import { PageHead } from "components/core"; import { useApplication, useUser } from "hooks/store"; // layouts import DefaultLayout from "layouts/default-layout"; // components -import { SignUpRoot } from "components/account"; -import { PageHead } from "components/core"; // ui -import { Spinner } from "@plane/ui"; // assets +import { NextPageWithLayout } from "lib/types"; import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text.png"; // types -import { NextPageWithLayout } from "lib/types"; const SignUpPage: NextPageWithLayout = observer(() => { // store hooks diff --git a/web/pages/create-workspace.tsx b/web/pages/create-workspace.tsx index 952ed0b68..629e4a379 100644 --- a/web/pages/create-workspace.tsx +++ b/web/pages/create-workspace.tsx @@ -1,23 +1,23 @@ import React, { useState, ReactElement } from "react"; -import { useRouter } from "next/router"; -import Image from "next/image"; -import { useTheme } from "next-themes"; import { observer } from "mobx-react-lite"; +import Image from "next/image"; import Link from "next/link"; +import { useRouter } from "next/router"; +import { useTheme } from "next-themes"; // hooks +import { PageHead } from "components/core"; +import { CreateWorkspaceForm } from "components/workspace"; import { useUser } from "hooks/store"; // layouts -import DefaultLayout from "layouts/default-layout"; import { UserAuthWrapper } from "layouts/auth-layout"; +import DefaultLayout from "layouts/default-layout"; // components -import { CreateWorkspaceForm } from "components/workspace"; -import { PageHead } from "components/core"; // images +import { NextPageWithLayout } from "lib/types"; import BlackHorizontalLogo from "public/plane-logos/black-horizontal-with-blue-logo.svg"; import WhiteHorizontalLogo from "public/plane-logos/white-horizontal-with-blue-logo.svg"; // types import { IWorkspace } from "@plane/types"; -import { NextPageWithLayout } from "lib/types"; const CreateWorkspacePage: NextPageWithLayout = observer(() => { // router diff --git a/web/pages/god-mode/ai.tsx b/web/pages/god-mode/ai.tsx index b84e98098..35b652d9b 100644 --- a/web/pages/god-mode/ai.tsx +++ b/web/pages/god-mode/ai.tsx @@ -1,19 +1,19 @@ import { ReactElement } from "react"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import useSWR from "swr"; // layouts +import { Lightbulb } from "lucide-react"; +import { Loader } from "@plane/ui"; +import { PageHead } from "components/core"; +import { InstanceAIForm } from "components/instance"; +import { useApplication } from "hooks/store"; import { InstanceAdminLayout } from "layouts/admin-layout"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useApplication } from "hooks/store"; // ui -import { Loader } from "@plane/ui"; // icons -import { Lightbulb } from "lucide-react"; // components -import { InstanceAIForm } from "components/instance"; -import { PageHead } from "components/core"; const InstanceAdminAIPage: NextPageWithLayout = observer(() => { // store diff --git a/web/pages/god-mode/authorization.tsx b/web/pages/god-mode/authorization.tsx index 6274fca20..f4eeefc65 100644 --- a/web/pages/god-mode/authorization.tsx +++ b/web/pages/god-mode/authorization.tsx @@ -1,18 +1,19 @@ import { ReactElement, useState } from "react"; +import { observer } from "mobx-react-lite"; import Link from "next/link"; import useSWR from "swr"; -import { observer } from "mobx-react-lite"; // layouts +import { Loader, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; + +import { PageHead } from "components/core"; +import { InstanceGithubConfigForm, InstanceGoogleConfigForm } from "components/instance"; +import { useApplication } from "hooks/store"; import { InstanceAdminLayout } from "layouts/admin-layout"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useApplication } from "hooks/store"; // ui -import { Loader, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui"; // components -import { InstanceGithubConfigForm, InstanceGoogleConfigForm } from "components/instance"; -import { PageHead } from "components/core"; const InstanceAdminAuthorizationPage: NextPageWithLayout = observer(() => { // store diff --git a/web/pages/god-mode/email.tsx b/web/pages/god-mode/email.tsx index 65889607f..0e4a594ce 100644 --- a/web/pages/god-mode/email.tsx +++ b/web/pages/god-mode/email.tsx @@ -1,17 +1,17 @@ import { ReactElement } from "react"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import useSWR from "swr"; // layouts +import { Loader } from "@plane/ui"; +import { PageHead } from "components/core"; +import { InstanceEmailForm } from "components/instance"; +import { useApplication } from "hooks/store"; import { InstanceAdminLayout } from "layouts/admin-layout"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useApplication } from "hooks/store"; // ui -import { Loader } from "@plane/ui"; // components -import { InstanceEmailForm } from "components/instance"; -import { PageHead } from "components/core"; const InstanceAdminEmailPage: NextPageWithLayout = observer(() => { // store diff --git a/web/pages/god-mode/image.tsx b/web/pages/god-mode/image.tsx index 349dccf4b..4c6abaa96 100644 --- a/web/pages/god-mode/image.tsx +++ b/web/pages/god-mode/image.tsx @@ -1,17 +1,17 @@ import { ReactElement } from "react"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import useSWR from "swr"; // layouts +import { Loader } from "@plane/ui"; +import { PageHead } from "components/core"; +import { InstanceImageConfigForm } from "components/instance"; +import { useApplication } from "hooks/store"; import { InstanceAdminLayout } from "layouts/admin-layout"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useApplication } from "hooks/store"; // ui -import { Loader } from "@plane/ui"; // components -import { InstanceImageConfigForm } from "components/instance"; -import { PageHead } from "components/core"; const InstanceAdminImagePage: NextPageWithLayout = observer(() => { // store diff --git a/web/pages/god-mode/index.tsx b/web/pages/god-mode/index.tsx index a93abad31..a7cb29c05 100644 --- a/web/pages/god-mode/index.tsx +++ b/web/pages/god-mode/index.tsx @@ -1,17 +1,17 @@ import { ReactElement } from "react"; -import useSWR from "swr"; import { observer } from "mobx-react-lite"; +import useSWR from "swr"; // layouts +import { Loader } from "@plane/ui"; +import { PageHead } from "components/core"; +import { InstanceGeneralForm } from "components/instance"; +import { useApplication } from "hooks/store"; import { InstanceAdminLayout } from "layouts/admin-layout"; // types import { NextPageWithLayout } from "lib/types"; // hooks -import { useApplication } from "hooks/store"; // ui -import { Loader } from "@plane/ui"; // components -import { InstanceGeneralForm } from "components/instance"; -import { PageHead } from "components/core"; const InstanceAdminPage: NextPageWithLayout = observer(() => { // store hooks diff --git a/web/pages/index.tsx b/web/pages/index.tsx index 2f8b32394..d9e99811f 100644 --- a/web/pages/index.tsx +++ b/web/pages/index.tsx @@ -1,8 +1,8 @@ import { ReactElement } from "react"; // layouts +import { SignInView } from "components/page-views"; import DefaultLayout from "layouts/default-layout"; // components -import { SignInView } from "components/page-views"; // type import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/installations/[provider]/index.tsx b/web/pages/installations/[provider]/index.tsx index 85bf21539..052782dc5 100644 --- a/web/pages/installations/[provider]/index.tsx +++ b/web/pages/installations/[provider]/index.tsx @@ -1,11 +1,11 @@ import React, { useEffect, ReactElement } from "react"; import { useRouter } from "next/router"; // services -import { AppInstallationService } from "services/app_installation.service"; // ui import { Spinner } from "@plane/ui"; // types import { NextPageWithLayout } from "lib/types"; +import { AppInstallationService } from "services/app_installation.service"; // services const appInstallationService = new AppInstallationService(); diff --git a/web/pages/invitations/index.tsx b/web/pages/invitations/index.tsx index 18441f0a0..7f976865b 100644 --- a/web/pages/invitations/index.tsx +++ b/web/pages/invitations/index.tsx @@ -77,7 +77,7 @@ const UserInvitationsPage: NextPageWithLayout = observer(() => { workspaceService .joinWorkspaces({ invitations: invitationsRespond }) - .then((res) => { + .then(() => { mutate("USER_WORKSPACES"); const firstInviteId = invitationsRespond[0]; const invitation = invitations?.find((i) => i.id === firstInviteId); @@ -85,6 +85,7 @@ const UserInvitationsPage: NextPageWithLayout = observer(() => { joinWorkspaceMetricGroup(redirectWorkspace?.id); captureEvent(MEMBER_ACCEPTED, { member_id: invitation?.id, + // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain role: getUserRole(invitation?.role!), project_id: undefined, accepted_from: "App", diff --git a/web/pages/onboarding/index.tsx b/web/pages/onboarding/index.tsx index 5b5b91280..2ebd61f3a 100644 --- a/web/pages/onboarding/index.tsx +++ b/web/pages/onboarding/index.tsx @@ -1,32 +1,32 @@ import { useEffect, useState, ReactElement } from "react"; -import Image from "next/image"; -import { useTheme } from "next-themes"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; -import useSWR from "swr"; -import { ChevronDown } from "lucide-react"; -import { Menu, Transition } from "@headlessui/react"; +import Image from "next/image"; +import { useRouter } from "next/router"; +import { useTheme } from "next-themes"; import { Controller, useForm } from "react-hook-form"; +import useSWR from "swr"; +import { Menu, Transition } from "@headlessui/react"; +import { ChevronDown } from "lucide-react"; // hooks +import { Avatar, Spinner } from "@plane/ui"; +import { PageHead } from "components/core"; +import { InviteMembers, JoinWorkspaces, UserDetails, SwitchOrDeleteAccountModal } from "components/onboarding"; +import { USER_ONBOARDING_COMPLETED } from "constants/event-tracker"; import { useEventTracker, useUser, useWorkspace } from "hooks/store"; import useUserAuth from "hooks/use-user-auth"; // services +import { UserAuthWrapper } from "layouts/auth-layout"; +import DefaultLayout from "layouts/default-layout"; +import { NextPageWithLayout } from "lib/types"; +import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text.png"; import { WorkspaceService } from "services/workspace.service"; // layouts -import DefaultLayout from "layouts/default-layout"; -import { UserAuthWrapper } from "layouts/auth-layout"; // components -import { InviteMembers, JoinWorkspaces, UserDetails, SwitchOrDeleteAccountModal } from "components/onboarding"; -import { PageHead } from "components/core"; // ui -import { Avatar, Spinner } from "@plane/ui"; // images -import BluePlaneLogoWithoutText from "public/plane-logos/blue-without-text.png"; // types import { IUser, TOnboardingSteps } from "@plane/types"; -import { NextPageWithLayout } from "lib/types"; // constants -import { USER_ONBOARDING_COMPLETED } from "constants/event-tracker"; // services const workspaceService = new WorkspaceService(); @@ -166,8 +166,8 @@ const OnboardingPage: NextPageWithLayout = observer(() => { currentUser?.first_name ? `${currentUser?.first_name} ${currentUser?.last_name ?? ""}` : value.length > 0 - ? value - : currentUser?.email + ? value + : currentUser?.email } src={currentUser?.avatar} size={35} @@ -182,8 +182,8 @@ const OnboardingPage: NextPageWithLayout = observer(() => { {currentUser?.first_name ? `${currentUser?.first_name} ${currentUser?.last_name ?? ""}` : value.length > 0 - ? value - : null} + ? value + : null}

)} diff --git a/web/pages/profile/activity.tsx b/web/pages/profile/activity.tsx index b0e8bb1a0..bda1295cf 100644 --- a/web/pages/profile/activity.tsx +++ b/web/pages/profile/activity.tsx @@ -1,15 +1,15 @@ import { ReactElement, useState } from "react"; import { observer } from "mobx-react"; //hooks +import { Button } from "@plane/ui"; +import { PageHead } from "components/core"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { ProfileActivityListPage } from "components/profile"; import { useApplication } from "hooks/store"; // layouts import { ProfileSettingsLayout } from "layouts/settings-layout"; // components -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; -import { ProfileActivityListPage } from "components/profile"; -import { PageHead } from "components/core"; // ui -import { Button } from "@plane/ui"; // type import { NextPageWithLayout } from "lib/types"; diff --git a/web/pages/profile/change-password.tsx b/web/pages/profile/change-password.tsx index f37a2b6a6..7e9344753 100644 --- a/web/pages/profile/change-password.tsx +++ b/web/pages/profile/change-password.tsx @@ -1,20 +1,20 @@ import { ReactElement, useEffect, useState } from "react"; -import { useRouter } from "next/router"; import { observer } from "mobx-react-lite"; +import { useRouter } from "next/router"; import { Controller, useForm } from "react-hook-form"; // hooks +import { Button, Input, Spinner, TOAST_TYPE, setPromiseToast, setToast } from "@plane/ui"; +import { PageHead } from "components/core"; +import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; import { useApplication, useUser } from "hooks/store"; // services -import { UserService } from "services/user.service"; // components -import { PageHead } from "components/core"; // layout import { ProfileSettingsLayout } from "layouts/settings-layout"; // ui -import { Button, Input, Spinner, TOAST_TYPE, setPromiseToast, setToast } from "@plane/ui"; // types import { NextPageWithLayout } from "lib/types"; -import { SidebarHamburgerToggle } from "components/core/sidebar/sidebar-menu-hamburger-toggle"; +import { UserService } from "services/user.service"; interface FormValues { old_password: string; @@ -85,8 +85,8 @@ const ChangePasswordPage: NextPageWithLayout = observer(() => { return ( <> -
-
+
+
themeStore.toggleSidebar()} />
= { avatar: "", @@ -143,8 +148,8 @@ const ProfileSettingsPage: NextPageWithLayout = observer(() => { return ( <> -
-
+
+
themeStore.toggleSidebar()} />
@@ -167,7 +172,7 @@ const ProfileSettingsPage: NextPageWithLayout = observer(() => { )} /> setDeactivateAccountModal(false)} /> -
+
@@ -303,7 +308,7 @@ const ProfileSettingsPage: NextPageWithLayout = observer(() => { ref={ref} hasError={Boolean(errors.email)} placeholder="Enter your email" - className={`w-full rounded-md cursor-not-allowed !bg-custom-background-80 ${ + className={`w-full cursor-not-allowed rounded-md !bg-custom-background-80 ${ errors.email ? "border-red-500" : "" }`} disabled diff --git a/web/pages/profile/preferences/email.tsx b/web/pages/profile/preferences/email.tsx index ddd23abdf..b34a493e5 100644 --- a/web/pages/profile/preferences/email.tsx +++ b/web/pages/profile/preferences/email.tsx @@ -1,16 +1,16 @@ import { ReactElement } from "react"; import useSWR from "swr"; // layouts +import { PageHead } from "components/core"; +import { EmailNotificationForm } from "components/profile/preferences"; +import { EmailSettingsLoader } from "components/ui"; import { ProfilePreferenceSettingsLayout } from "layouts/settings-layout/profile/preferences"; // ui -import { EmailSettingsLoader } from "components/ui"; // components -import { EmailNotificationForm } from "components/profile/preferences"; -import { PageHead } from "components/core"; // services +import { NextPageWithLayout } from "lib/types"; import { UserService } from "services/user.service"; // type -import { NextPageWithLayout } from "lib/types"; // services const userService = new UserService(); diff --git a/web/pages/profile/preferences/theme.tsx b/web/pages/profile/preferences/theme.tsx index 94540aeda..e23e94c66 100644 --- a/web/pages/profile/preferences/theme.tsx +++ b/web/pages/profile/preferences/theme.tsx @@ -1,16 +1,16 @@ import { useEffect, useState, ReactElement } from "react"; import { observer } from "mobx-react-lite"; import { useTheme } from "next-themes"; +// ui +import { Spinner, setPromiseToast } from "@plane/ui"; +// components +import { CustomThemeSelector, ThemeSwitch, PageHead } from "components/core"; +// constants +import { I_THEME_OPTION, THEME_OPTIONS } from "constants/themes"; // hooks import { useUser } from "hooks/store"; // layouts import { ProfilePreferenceSettingsLayout } from "layouts/settings-layout/profile/preferences"; -// components -import { CustomThemeSelector, ThemeSwitch, PageHead } from "components/core"; -// ui -import { Spinner, setPromiseToast } from "@plane/ui"; -// constants -import { I_THEME_OPTION, THEME_OPTIONS } from "constants/themes"; // type import { NextPageWithLayout } from "lib/types"; @@ -54,7 +54,7 @@ const ProfilePreferencesThemePage: NextPageWithLayout = observer(() => { <> {currentUser ? ( -
+

Preferences

diff --git a/web/pages/workspace-invitations/index.tsx b/web/pages/workspace-invitations/index.tsx index aa95d0a38..74c881125 100644 --- a/web/pages/workspace-invitations/index.tsx +++ b/web/pages/workspace-invitations/index.tsx @@ -1,22 +1,22 @@ import React, { ReactElement } from "react"; +import { observer } from "mobx-react-lite"; import { useRouter } from "next/router"; import useSWR from "swr"; import { Boxes, Check, Share2, Star, User2, X } from "lucide-react"; -import { observer } from "mobx-react-lite"; // hooks +import { Spinner } from "@plane/ui"; +import { EmptySpace, EmptySpaceItem } from "components/ui/empty-space"; +import { WORKSPACE_INVITATION } from "constants/fetch-keys"; import { useUser } from "hooks/store"; // services -import { WorkspaceService } from "services/workspace.service"; // layouts import DefaultLayout from "layouts/default-layout"; // ui -import { Spinner } from "@plane/ui"; // icons -import { EmptySpace, EmptySpaceItem } from "components/ui/empty-space"; // types import { NextPageWithLayout } from "lib/types"; +import { WorkspaceService } from "services/workspace.service"; // constants -import { WORKSPACE_INVITATION } from "constants/fetch-keys"; // services const workspaceService = new WorkspaceService(); diff --git a/web/services/ai.service.ts b/web/services/ai.service.ts index 11c489c1f..677f50e92 100644 --- a/web/services/ai.service.ts +++ b/web/services/ai.service.ts @@ -1,8 +1,8 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import { IGptResponse } from "@plane/types"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class AIService extends APIService { constructor() { diff --git a/web/services/analytics.service.ts b/web/services/analytics.service.ts index 5e3aac44b..972fe36ea 100644 --- a/web/services/analytics.service.ts +++ b/web/services/analytics.service.ts @@ -1,4 +1,5 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import { @@ -9,7 +10,6 @@ import { ISaveAnalyticsFormData, } from "@plane/types"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class AnalyticsService extends APIService { constructor() { diff --git a/web/services/api_token.service.ts b/web/services/api_token.service.ts index 76a24798f..3979f6e1f 100644 --- a/web/services/api_token.service.ts +++ b/web/services/api_token.service.ts @@ -1,6 +1,6 @@ import { API_BASE_URL } from "helpers/common.helper"; -import { APIService } from "./api.service"; import { IApiToken } from "@plane/types"; +import { APIService } from "./api.service"; export class APITokenService extends APIService { constructor() { diff --git a/web/services/app_config.service.ts b/web/services/app_config.service.ts index 4b45e0cc4..7c2d1e24e 100644 --- a/web/services/app_config.service.ts +++ b/web/services/app_config.service.ts @@ -1,7 +1,7 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helper -import { API_BASE_URL } from "helpers/common.helper"; // types import { IAppConfig } from "@plane/types"; diff --git a/web/services/app_installation.service.ts b/web/services/app_installation.service.ts index 179721036..055a4b091 100644 --- a/web/services/app_installation.service.ts +++ b/web/services/app_installation.service.ts @@ -1,7 +1,7 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class AppInstallationService extends APIService { constructor() { diff --git a/web/services/auth.service.ts b/web/services/auth.service.ts index f47a52824..f90fafc66 100644 --- a/web/services/auth.service.ts +++ b/web/services/auth.service.ts @@ -1,7 +1,7 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import { IEmailCheckData, diff --git a/web/services/cycle.service.ts b/web/services/cycle.service.ts index 5e13e3b8e..f7ee8a0ab 100644 --- a/web/services/cycle.service.ts +++ b/web/services/cycle.service.ts @@ -1,9 +1,9 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import type { CycleDateCheckData, ICycle, TIssue } from "@plane/types"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class CycleService extends APIService { constructor() { diff --git a/web/services/dashboard.service.ts b/web/services/dashboard.service.ts index e001f92a1..b1138899d 100644 --- a/web/services/dashboard.service.ts +++ b/web/services/dashboard.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import { THomeDashboardResponse, TWidget, TWidgetStatsResponse, TWidgetStatsRequestParams } from "@plane/types"; diff --git a/web/services/file.service.ts b/web/services/file.service.ts index d5e80dd53..0818bc992 100644 --- a/web/services/file.service.ts +++ b/web/services/file.service.ts @@ -1,8 +1,8 @@ // services +import axios from "axios"; +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; -import axios from "axios"; export interface UnSplashImage { id: string; diff --git a/web/services/inbox.service.ts b/web/services/inbox.service.ts index a36d356ce..45f0172fb 100644 --- a/web/services/inbox.service.ts +++ b/web/services/inbox.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import type { IInboxIssue, IInbox, TInboxStatus, IInboxQueryParams } from "@plane/types"; diff --git a/web/services/inbox/inbox-issue.service.ts b/web/services/inbox/inbox-issue.service.ts index 6b2099059..e6d52768c 100644 --- a/web/services/inbox/inbox-issue.service.ts +++ b/web/services/inbox/inbox-issue.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import type { TInboxIssueFilterOptions, TInboxIssueExtendedDetail, TIssue, TInboxDetailedStatus } from "@plane/types"; diff --git a/web/services/inbox/inbox.service.ts b/web/services/inbox/inbox.service.ts index 8ee6ee514..fc5fa5a99 100644 --- a/web/services/inbox/inbox.service.ts +++ b/web/services/inbox/inbox.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import type { TInbox } from "@plane/types"; diff --git a/web/services/instance.service.ts b/web/services/instance.service.ts index 1bc5ecdbc..f61370a91 100644 --- a/web/services/instance.service.ts +++ b/web/services/instance.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import type { IFormattedInstanceConfiguration, IInstance, IInstanceAdmin, IInstanceConfiguration } from "@plane/types"; diff --git a/web/services/integrations/github.service.ts b/web/services/integrations/github.service.ts index 6a0519565..5c4c95c09 100644 --- a/web/services/integrations/github.service.ts +++ b/web/services/integrations/github.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import { IGithubRepoInfo, IGithubServiceImportFormData } from "@plane/types"; diff --git a/web/services/integrations/integration.service.ts b/web/services/integrations/integration.service.ts index 460dc17d9..a1bb10078 100644 --- a/web/services/integrations/integration.service.ts +++ b/web/services/integrations/integration.service.ts @@ -1,8 +1,8 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import { IAppIntegration, IImporterService, IWorkspaceIntegration, IExportServiceResponse } from "@plane/types"; // helper -import { API_BASE_URL } from "helpers/common.helper"; export class IntegrationService extends APIService { constructor() { diff --git a/web/services/integrations/jira.service.ts b/web/services/integrations/jira.service.ts index 5641bb28b..8c254bbab 100644 --- a/web/services/integrations/jira.service.ts +++ b/web/services/integrations/jira.service.ts @@ -1,5 +1,5 @@ -import { APIService } from "services/api.service"; import { API_BASE_URL } from "helpers/common.helper"; +import { APIService } from "services/api.service"; // types import { IJiraMetadata, IJiraResponse, IJiraImporterForm } from "@plane/types"; diff --git a/web/services/issue/issue.service.ts b/web/services/issue/issue.service.ts index 316288278..d7f92f792 100644 --- a/web/services/issue/issue.service.ts +++ b/web/services/issue/issue.service.ts @@ -1,9 +1,9 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // type import type { TIssue, IIssueDisplayProperties, TIssueLink, TIssueSubIssues, TIssueActivity } from "@plane/types"; // helper -import { API_BASE_URL } from "helpers/common.helper"; export class IssueService extends APIService { constructor() { diff --git a/web/services/issue/issue_activity.service.ts b/web/services/issue/issue_activity.service.ts index 87c7a8f54..9028568ad 100644 --- a/web/services/issue/issue_activity.service.ts +++ b/web/services/issue/issue_activity.service.ts @@ -1,8 +1,8 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import { TIssueActivity } from "@plane/types"; // helper -import { API_BASE_URL } from "helpers/common.helper"; export class IssueActivityService extends APIService { constructor() { diff --git a/web/services/issue/issue_archive.service.ts b/web/services/issue/issue_archive.service.ts index e2a5132a5..e232e796f 100644 --- a/web/services/issue/issue_archive.service.ts +++ b/web/services/issue/issue_archive.service.ts @@ -1,8 +1,8 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import { TIssue } from "@plane/types"; // constants -import { API_BASE_URL } from "helpers/common.helper"; export class IssueArchiveService extends APIService { constructor() { diff --git a/web/services/issue/issue_attachment.service.ts b/web/services/issue/issue_attachment.service.ts index 16253218a..00673c963 100644 --- a/web/services/issue/issue_attachment.service.ts +++ b/web/services/issue/issue_attachment.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helper -import { API_BASE_URL } from "helpers/common.helper"; // types import { TIssueAttachment } from "@plane/types"; diff --git a/web/services/issue/issue_comment.service.ts b/web/services/issue/issue_comment.service.ts index 8001d644a..d7ef35df7 100644 --- a/web/services/issue/issue_comment.service.ts +++ b/web/services/issue/issue_comment.service.ts @@ -1,8 +1,8 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import { TIssueComment } from "@plane/types"; // helper -import { API_BASE_URL } from "helpers/common.helper"; export class IssueCommentService extends APIService { constructor() { diff --git a/web/services/issue/issue_draft.service.ts b/web/services/issue/issue_draft.service.ts index a93bda776..3ccd43f56 100644 --- a/web/services/issue/issue_draft.service.ts +++ b/web/services/issue/issue_draft.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; import { TIssue } from "@plane/types"; export class IssueDraftService extends APIService { diff --git a/web/services/issue_filter.service.ts b/web/services/issue_filter.service.ts index 5103a4bc8..664666a3b 100644 --- a/web/services/issue_filter.service.ts +++ b/web/services/issue_filter.service.ts @@ -1,8 +1,8 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import type { IIssueFiltersResponse } from "@plane/types"; -import { API_BASE_URL } from "helpers/common.helper"; export class IssueFiltersService extends APIService { constructor() { diff --git a/web/services/module.service.ts b/web/services/module.service.ts index 1efad8a23..9942f691c 100644 --- a/web/services/module.service.ts +++ b/web/services/module.service.ts @@ -1,8 +1,8 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import type { IModule, TIssue, ILinkDetails, ModuleLink } from "@plane/types"; -import { API_BASE_URL } from "helpers/common.helper"; export class ModuleService extends APIService { constructor() { diff --git a/web/services/notification.service.ts b/web/services/notification.service.ts index db9c6d6d1..d12656c09 100644 --- a/web/services/notification.service.ts +++ b/web/services/notification.service.ts @@ -1,4 +1,5 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import type { @@ -9,7 +10,6 @@ import type { IMarkAllAsReadPayload, } from "@plane/types"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class NotificationService extends APIService { constructor() { diff --git a/web/services/project/project-estimate.service.ts b/web/services/project/project-estimate.service.ts index 6d276c7b9..880c4dd8d 100644 --- a/web/services/project/project-estimate.service.ts +++ b/web/services/project/project-estimate.service.ts @@ -1,9 +1,9 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import type { IEstimate, IEstimateFormData, IEstimatePoint } from "@plane/types"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class ProjectEstimateService extends APIService { constructor() { diff --git a/web/services/project/project-export.service.ts b/web/services/project/project-export.service.ts index b5503a829..cc8cebe71 100644 --- a/web/services/project/project-export.service.ts +++ b/web/services/project/project-export.service.ts @@ -1,6 +1,6 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class ProjectExportService extends APIService { constructor() { diff --git a/web/services/project/project-state.service.ts b/web/services/project/project-state.service.ts index 9f846987e..4087ada30 100644 --- a/web/services/project/project-state.service.ts +++ b/web/services/project/project-state.service.ts @@ -1,7 +1,7 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import type { IState } from "@plane/types"; diff --git a/web/services/user.service.ts b/web/services/user.service.ts index 41111db98..691e6c028 100644 --- a/web/services/user.service.ts +++ b/web/services/user.service.ts @@ -1,4 +1,5 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import type { @@ -12,7 +13,6 @@ import type { IUserEmailNotificationSettings, } from "@plane/types"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class UserService extends APIService { constructor() { diff --git a/web/services/view.service.ts b/web/services/view.service.ts index 95ae7dd06..f09eea563 100644 --- a/web/services/view.service.ts +++ b/web/services/view.service.ts @@ -1,8 +1,8 @@ +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // types import { IProjectView } from "@plane/types"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; export class ViewService extends APIService { constructor() { diff --git a/web/services/webhook.service.ts b/web/services/webhook.service.ts index abfe7c46d..d021799fb 100644 --- a/web/services/webhook.service.ts +++ b/web/services/webhook.service.ts @@ -1,7 +1,7 @@ // api services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import { IWebhook } from "@plane/types"; diff --git a/web/services/workspace.service.ts b/web/services/workspace.service.ts index 2515853f5..bfeadad03 100644 --- a/web/services/workspace.service.ts +++ b/web/services/workspace.service.ts @@ -1,7 +1,7 @@ // services +import { API_BASE_URL } from "helpers/common.helper"; import { APIService } from "services/api.service"; // helpers -import { API_BASE_URL } from "helpers/common.helper"; // types import { IWorkspace, diff --git a/web/store/application/app-config.store.ts b/web/store/application/app-config.store.ts index 6faef8b69..aec22a4ce 100644 --- a/web/store/application/app-config.store.ts +++ b/web/store/application/app-config.store.ts @@ -1,8 +1,8 @@ import { observable, action, makeObservable, runInAction } from "mobx"; // types +import { AppConfigService } from "services/app_config.service"; import { IAppConfig } from "@plane/types"; // services -import { AppConfigService } from "services/app_config.service"; export interface IAppConfigStore { // observables diff --git a/web/store/application/command-palette.store.ts b/web/store/application/command-palette.store.ts index 22b395e34..dc10bba88 100644 --- a/web/store/application/command-palette.store.ts +++ b/web/store/application/command-palette.store.ts @@ -1,8 +1,8 @@ import { observable, action, makeObservable, computed } from "mobx"; // services -import { ProjectService } from "services/project"; -import { PageService } from "services/page.service"; import { EIssuesStoreType, TCreateModalStoreTypes } from "constants/issue"; +import { PageService } from "services/page.service"; +import { ProjectService } from "services/project"; export interface ModalData { store: EIssuesStoreType; diff --git a/web/store/application/index.ts b/web/store/application/index.ts index 30333535a..bad28d4c9 100644 --- a/web/store/application/index.ts +++ b/web/store/application/index.ts @@ -1,7 +1,7 @@ import { RootStore } from "store/root.store"; +import { EventTrackerStore, IEventTrackerStore } from "../event-tracker.store"; import { AppConfigStore, IAppConfigStore } from "./app-config.store"; import { CommandPaletteStore, ICommandPaletteStore } from "./command-palette.store"; -import { EventTrackerStore, IEventTrackerStore } from "../event-tracker.store"; // import { EventTrackerStore, IEventTrackerStore } from "./event-tracker.store"; import { InstanceStore, IInstanceStore } from "./instance.store"; import { RouterStore, IRouterStore } from "./router.store"; diff --git a/web/store/application/instance.store.ts b/web/store/application/instance.store.ts index 7c486ef8b..b4793fdfb 100644 --- a/web/store/application/instance.store.ts +++ b/web/store/application/instance.store.ts @@ -1,8 +1,8 @@ import { observable, action, computed, makeObservable, runInAction } from "mobx"; // types +import { InstanceService } from "services/instance.service"; import { IInstance, IInstanceConfiguration, IFormattedInstanceConfiguration, IInstanceAdmin } from "@plane/types"; // services -import { InstanceService } from "services/instance.service"; export interface IInstanceStore { // issues diff --git a/web/store/cycle.store.ts b/web/store/cycle.store.ts index ee4842539..aea87033e 100644 --- a/web/store/cycle.store.ts +++ b/web/store/cycle.store.ts @@ -1,16 +1,16 @@ -import { action, computed, observable, makeObservable, runInAction } from "mobx"; -import { computedFn } from "mobx-utils"; import { isFuture, isPast, isToday } from "date-fns"; import set from "lodash/set"; import sortBy from "lodash/sortBy"; +import { action, computed, observable, makeObservable, runInAction } from "mobx"; +import { computedFn } from "mobx-utils"; // types -import { ICycle, CycleDateCheckData } from "@plane/types"; // mobx -import { RootStore } from "store/root.store"; // services -import { ProjectService } from "services/project"; -import { IssueService } from "services/issue"; import { CycleService } from "services/cycle.service"; +import { IssueService } from "services/issue"; +import { ProjectService } from "services/project"; +import { RootStore } from "store/root.store"; +import { ICycle, CycleDateCheckData } from "@plane/types"; export interface ICycleStore { //Loaders diff --git a/web/store/dashboard.store.ts b/web/store/dashboard.store.ts index ad0960c7b..c8a07428e 100644 --- a/web/store/dashboard.store.ts +++ b/web/store/dashboard.store.ts @@ -1,6 +1,6 @@ +import set from "lodash/set"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; -import set from "lodash/set"; // services import { DashboardService } from "services/dashboard.service"; // types diff --git a/web/store/estimate.store.ts b/web/store/estimate.store.ts index beddd52ab..9c197ffaa 100644 --- a/web/store/estimate.store.ts +++ b/web/store/estimate.store.ts @@ -1,11 +1,11 @@ -import { observable, action, makeObservable, runInAction, computed } from "mobx"; import set from "lodash/set"; +import { observable, action, makeObservable, runInAction, computed } from "mobx"; // services +import { computedFn } from "mobx-utils"; import { ProjectEstimateService } from "services/project"; // types import { RootStore } from "store/root.store"; import { IEstimate, IEstimateFormData } from "@plane/types"; -import { computedFn } from "mobx-utils"; export interface IEstimateStore { //Loaders diff --git a/web/store/event-tracker.store.ts b/web/store/event-tracker.store.ts index 744ad44fb..f117e6cbc 100644 --- a/web/store/event-tracker.store.ts +++ b/web/store/event-tracker.store.ts @@ -1,7 +1,6 @@ import { action, computed, makeObservable, observable } from "mobx"; import posthog from "posthog-js"; // stores -import { RootStore } from "./root.store"; import { GROUP_WORKSPACE, WORKSPACE_CREATED, @@ -15,6 +14,7 @@ import { getWorkspaceEventPayload, getPageEventPayload, } from "constants/event-tracker"; +import { RootStore } from "./root.store"; export interface IEventTrackerStore { // properties diff --git a/web/store/global-view.store.ts b/web/store/global-view.store.ts index 65aedadb5..60d97f633 100644 --- a/web/store/global-view.store.ts +++ b/web/store/global-view.store.ts @@ -1,6 +1,6 @@ +import { set } from "lodash"; import { observable, action, makeObservable, runInAction, computed } from "mobx"; import { computedFn } from "mobx-utils"; -import { set } from "lodash"; // services import { WorkspaceService } from "services/workspace.service"; // types diff --git a/web/store/inbox/inbox.store.ts b/web/store/inbox/inbox.store.ts index 8d8f2bec5..803af3095 100644 --- a/web/store/inbox/inbox.store.ts +++ b/web/store/inbox/inbox.store.ts @@ -1,9 +1,9 @@ +import concat from "lodash/concat"; +import set from "lodash/set"; +import uniq from "lodash/uniq"; +import update from "lodash/update"; import { observable, action, makeObservable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; -import set from "lodash/set"; -import update from "lodash/update"; -import concat from "lodash/concat"; -import uniq from "lodash/uniq"; // services import { InboxService } from "services/inbox/inbox.service"; // types diff --git a/web/store/inbox/inbox_filter.store.ts b/web/store/inbox/inbox_filter.store.ts index c4566acbe..8bad22cdd 100644 --- a/web/store/inbox/inbox_filter.store.ts +++ b/web/store/inbox/inbox_filter.store.ts @@ -1,6 +1,6 @@ -import { observable, action, makeObservable, runInAction, computed } from "mobx"; -import set from "lodash/set"; import isEmpty from "lodash/isEmpty"; +import set from "lodash/set"; +import { observable, action, makeObservable, runInAction, computed } from "mobx"; // services import { InboxService } from "services/inbox.service"; // types diff --git a/web/store/inbox/inbox_issue.store.ts b/web/store/inbox/inbox_issue.store.ts index 4f980357f..2ecbedff0 100644 --- a/web/store/inbox/inbox_issue.store.ts +++ b/web/store/inbox/inbox_issue.store.ts @@ -1,10 +1,10 @@ +import concat from "lodash/concat"; +import pull from "lodash/pull"; +import set from "lodash/set"; +import uniq from "lodash/uniq"; +import update from "lodash/update"; import { observable, action, makeObservable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; -import set from "lodash/set"; -import update from "lodash/update"; -import concat from "lodash/concat"; -import uniq from "lodash/uniq"; -import pull from "lodash/pull"; // services import { InboxIssueService } from "services/inbox/inbox-issue.service"; // types diff --git a/web/store/inbox/root.store.ts b/web/store/inbox/root.store.ts index b0706cca7..982de47bc 100644 --- a/web/store/inbox/root.store.ts +++ b/web/store/inbox/root.store.ts @@ -1,8 +1,8 @@ // types import { RootStore } from "store/root.store"; import { IInbox, Inbox } from "./inbox.store"; -import { IInboxIssue, InboxIssue } from "./inbox_issue.store"; import { IInboxFilter, InboxFilter } from "./inbox_filter.store"; +import { IInboxIssue, InboxIssue } from "./inbox_issue.store"; export interface IInboxRootStore { rootStore: RootStore; diff --git a/web/store/issue/archived/filter.store.ts b/web/store/issue/archived/filter.store.ts index 032928cda..12d541bea 100644 --- a/web/store/issue/archived/filter.store.ts +++ b/web/store/issue/archived/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { IssueFiltersService } from "services/issue_filter.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -17,10 +15,12 @@ import { IIssueFilters, TIssueParams, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { IssueFiltersService } from "services/issue_filter.service"; export interface IArchivedIssuesFilter { // observables diff --git a/web/store/issue/archived/issue.store.ts b/web/store/issue/archived/issue.store.ts index a0b26eb8b..06aa9d29a 100644 --- a/web/store/issue/archived/issue.store.ts +++ b/web/store/issue/archived/issue.store.ts @@ -1,13 +1,13 @@ -import { action, observable, makeObservable, computed, runInAction } from "mobx"; -import set from "lodash/set"; import pull from "lodash/pull"; +import set from "lodash/set"; +import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class +import { IssueArchiveService } from "services/issue"; +import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; import { IssueHelperStore } from "../helpers/issue-helper.store"; // services -import { IssueArchiveService } from "services/issue"; // types import { IIssueRootStore } from "../root.store"; -import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; export interface IArchivedIssues { // observable diff --git a/web/store/issue/cycle/filter.store.ts b/web/store/issue/cycle/filter.store.ts index 5d8c2a6b8..c4a345c47 100644 --- a/web/store/issue/cycle/filter.store.ts +++ b/web/store/issue/cycle/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { IssueFiltersService } from "services/issue_filter.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -17,10 +15,12 @@ import { IIssueFilters, TIssueParams, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { IssueFiltersService } from "services/issue_filter.service"; export interface ICycleIssuesFilter { // observables diff --git a/web/store/issue/cycle/issue.store.ts b/web/store/issue/cycle/issue.store.ts index 61b280da9..ef6e1872d 100644 --- a/web/store/issue/cycle/issue.store.ts +++ b/web/store/issue/cycle/issue.store.ts @@ -1,17 +1,17 @@ -import { action, observable, makeObservable, computed, runInAction } from "mobx"; -import set from "lodash/set"; -import update from "lodash/update"; import concat from "lodash/concat"; import pull from "lodash/pull"; +import set from "lodash/set"; import uniq from "lodash/uniq"; +import update from "lodash/update"; +import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class -import { IssueHelperStore } from "../helpers/issue-helper.store"; // services -import { IssueService } from "services/issue"; import { CycleService } from "services/cycle.service"; +import { IssueService } from "services/issue"; // types -import { IIssueRootStore } from "../root.store"; import { TIssue, TSubGroupedIssues, TGroupedIssues, TLoader, TUnGroupedIssues, ViewFlags } from "@plane/types"; +import { IssueHelperStore } from "../helpers/issue-helper.store"; +import { IIssueRootStore } from "../root.store"; export const ACTIVE_CYCLE_ISSUES = "ACTIVE_CYCLE_ISSUES"; diff --git a/web/store/issue/draft/filter.store.ts b/web/store/issue/draft/filter.store.ts index cc58a7755..51b8d9bc7 100644 --- a/web/store/issue/draft/filter.store.ts +++ b/web/store/issue/draft/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { IssueFiltersService } from "services/issue_filter.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -17,10 +15,12 @@ import { IIssueFilters, TIssueParams, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { IssueFiltersService } from "services/issue_filter.service"; export interface IDraftIssuesFilter { // observables diff --git a/web/store/issue/draft/issue.store.ts b/web/store/issue/draft/issue.store.ts index a06213eb0..67dcf2729 100644 --- a/web/store/issue/draft/issue.store.ts +++ b/web/store/issue/draft/issue.store.ts @@ -1,16 +1,16 @@ -import { action, observable, makeObservable, computed, runInAction } from "mobx"; -import set from "lodash/set"; -import update from "lodash/update"; -import uniq from "lodash/uniq"; import concat from "lodash/concat"; import pull from "lodash/pull"; +import set from "lodash/set"; +import uniq from "lodash/uniq"; +import update from "lodash/update"; +import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class -import { IssueHelperStore } from "../helpers/issue-helper.store"; // services import { IssueDraftService } from "services/issue/issue_draft.service"; // types -import { IIssueRootStore } from "../root.store"; import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; +import { IssueHelperStore } from "../helpers/issue-helper.store"; +import { IIssueRootStore } from "../root.store"; export interface IDraftIssues { // observable diff --git a/web/store/issue/helpers/issue-filter-helper.store.ts b/web/store/issue/helpers/issue-filter-helper.store.ts index baac4a2ad..2921e9ca8 100644 --- a/web/store/issue/helpers/issue-filter-helper.store.ts +++ b/web/store/issue/helpers/issue-filter-helper.store.ts @@ -1,5 +1,9 @@ import isEmpty from "lodash/isEmpty"; // types +// constants +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; +// lib +import { storage } from "lib/local-storage"; import { IIssueDisplayFilterOptions, IIssueDisplayProperties, @@ -10,10 +14,6 @@ import { TIssueParams, TStaticViewTypes, } from "@plane/types"; -// constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; -// lib -import { storage } from "lib/local-storage"; interface ILocalStoreIssueFilters { key: EIssuesStoreType; diff --git a/web/store/issue/helpers/issue-helper.store.ts b/web/store/issue/helpers/issue-helper.store.ts index a267ac9c8..235f65e7c 100644 --- a/web/store/issue/helpers/issue-helper.store.ts +++ b/web/store/issue/helpers/issue-helper.store.ts @@ -1,16 +1,16 @@ -import orderBy from "lodash/orderBy"; import get from "lodash/get"; import indexOf from "lodash/indexOf"; import isEmpty from "lodash/isEmpty"; +import orderBy from "lodash/orderBy"; import values from "lodash/values"; // types -import { TIssue, TIssueMap, TIssueGroupByOptions, TIssueOrderByOptions } from "@plane/types"; -import { IIssueRootStore } from "../root.store"; // constants import { ISSUE_PRIORITIES } from "constants/issue"; import { STATE_GROUPS } from "constants/state"; // helpers import { renderFormattedPayloadDate } from "helpers/date-time.helper"; +import { TIssue, TIssueMap, TIssueGroupByOptions, TIssueOrderByOptions } from "@plane/types"; +import { IIssueRootStore } from "../root.store"; export type TIssueDisplayFilterOptions = Exclude | "target_date"; diff --git a/web/store/issue/issue-details/activity.store.ts b/web/store/issue/issue-details/activity.store.ts index efa181c95..5afb6d8e4 100644 --- a/web/store/issue/issue-details/activity.store.ts +++ b/web/store/issue/issue-details/activity.store.ts @@ -1,14 +1,14 @@ -import { action, makeObservable, observable, runInAction } from "mobx"; +import concat from "lodash/concat"; import set from "lodash/set"; import sortBy from "lodash/sortBy"; -import update from "lodash/update"; -import concat from "lodash/concat"; import uniq from "lodash/uniq"; +import update from "lodash/update"; +import { action, makeObservable, observable, runInAction } from "mobx"; // services import { IssueActivityService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; import { TIssueActivityComment, TIssueActivity, TIssueActivityMap, TIssueActivityIdMap } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export type TActivityLoader = "fetch" | "mutate" | undefined; diff --git a/web/store/issue/issue-details/attachment.store.ts b/web/store/issue/issue-details/attachment.store.ts index 5341058c1..47e95b437 100644 --- a/web/store/issue/issue-details/attachment.store.ts +++ b/web/store/issue/issue-details/attachment.store.ts @@ -1,14 +1,14 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import set from "lodash/set"; -import update from "lodash/update"; import concat from "lodash/concat"; -import uniq from "lodash/uniq"; import pull from "lodash/pull"; +import set from "lodash/set"; +import uniq from "lodash/uniq"; +import update from "lodash/update"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // services import { IssueAttachmentService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; import { TIssueAttachment, TIssueAttachmentMap, TIssueAttachmentIdMap } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export interface IIssueAttachmentStoreActions { addAttachments: (issueId: string, attachments: TIssueAttachment[]) => void; diff --git a/web/store/issue/issue-details/comment.store.ts b/web/store/issue/issue-details/comment.store.ts index 4336971de..434be2778 100644 --- a/web/store/issue/issue-details/comment.store.ts +++ b/web/store/issue/issue-details/comment.store.ts @@ -1,14 +1,14 @@ -import { action, makeObservable, observable, runInAction } from "mobx"; -import set from "lodash/set"; -import update from "lodash/update"; import concat from "lodash/concat"; -import uniq from "lodash/uniq"; import pull from "lodash/pull"; +import set from "lodash/set"; +import uniq from "lodash/uniq"; +import update from "lodash/update"; +import { action, makeObservable, observable, runInAction } from "mobx"; // services import { IssueCommentService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; import { TIssueComment, TIssueCommentMap, TIssueCommentIdMap } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export type TCommentLoader = "fetch" | "create" | "update" | "delete" | "mutate" | undefined; diff --git a/web/store/issue/issue-details/comment_reaction.store.ts b/web/store/issue/issue-details/comment_reaction.store.ts index 59adeef62..832f798d9 100644 --- a/web/store/issue/issue-details/comment_reaction.store.ts +++ b/web/store/issue/issue-details/comment_reaction.store.ts @@ -1,16 +1,16 @@ -import { action, makeObservable, observable, runInAction } from "mobx"; -import set from "lodash/set"; -import update from "lodash/update"; import concat from "lodash/concat"; import find from "lodash/find"; import pull from "lodash/pull"; +import set from "lodash/set"; +import update from "lodash/update"; +import { action, makeObservable, observable, runInAction } from "mobx"; // services -import { IssueReactionService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; -import { TIssueCommentReaction, TIssueCommentReactionIdMap, TIssueCommentReactionMap } from "@plane/types"; // helpers import { groupReactions } from "helpers/emoji.helper"; +import { IssueReactionService } from "services/issue"; +import { TIssueCommentReaction, TIssueCommentReactionIdMap, TIssueCommentReactionMap } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export interface IIssueCommentReactionStoreActions { // actions diff --git a/web/store/issue/issue-details/issue.store.ts b/web/store/issue/issue-details/issue.store.ts index f42c13376..ba1d9b752 100644 --- a/web/store/issue/issue-details/issue.store.ts +++ b/web/store/issue/issue-details/issue.store.ts @@ -1,9 +1,9 @@ import { makeObservable } from "mobx"; // services +import { computedFn } from "mobx-utils"; import { IssueArchiveService, IssueDraftService, IssueService } from "services/issue"; // types import { TIssue } from "@plane/types"; -import { computedFn } from "mobx-utils"; import { IIssueDetail } from "./root.store"; export interface IIssueStoreActions { diff --git a/web/store/issue/issue-details/link.store.ts b/web/store/issue/issue-details/link.store.ts index 81d13438c..1cfd47c3f 100644 --- a/web/store/issue/issue-details/link.store.ts +++ b/web/store/issue/issue-details/link.store.ts @@ -1,10 +1,10 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // services import { IssueService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; import { TIssueLink, TIssueLinkMap, TIssueLinkIdMap } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export interface IIssueLinkStoreActions { addLinks: (issueId: string, links: TIssueLink[]) => void; diff --git a/web/store/issue/issue-details/reaction.store.ts b/web/store/issue/issue-details/reaction.store.ts index 6282ac40e..a32ba6eca 100644 --- a/web/store/issue/issue-details/reaction.store.ts +++ b/web/store/issue/issue-details/reaction.store.ts @@ -1,16 +1,16 @@ -import { action, makeObservable, observable, runInAction } from "mobx"; -import set from "lodash/set"; -import update from "lodash/update"; import concat from "lodash/concat"; import find from "lodash/find"; import pull from "lodash/pull"; +import set from "lodash/set"; +import update from "lodash/update"; +import { action, makeObservable, observable, runInAction } from "mobx"; // services -import { IssueReactionService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; -import { TIssueReaction, TIssueReactionMap, TIssueReactionIdMap } from "@plane/types"; // helpers import { groupReactions } from "helpers/emoji.helper"; +import { IssueReactionService } from "services/issue"; +import { TIssueReaction, TIssueReactionMap, TIssueReactionIdMap } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export interface IIssueReactionStoreActions { // actions diff --git a/web/store/issue/issue-details/relation.store.ts b/web/store/issue/issue-details/relation.store.ts index da729540e..fafa4ad4d 100644 --- a/web/store/issue/issue-details/relation.store.ts +++ b/web/store/issue/issue-details/relation.store.ts @@ -1,10 +1,10 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // services import { IssueRelationService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; import { TIssueRelationIdMap, TIssueRelationMap, TIssueRelationTypes, TIssueRelation, TIssue } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export interface IIssueRelationStoreActions { // actions diff --git a/web/store/issue/issue-details/root.store.ts b/web/store/issue/issue-details/root.store.ts index db5dab307..be77efcd1 100644 --- a/web/store/issue/issue-details/root.store.ts +++ b/web/store/issue/issue-details/root.store.ts @@ -1,20 +1,5 @@ import { action, computed, makeObservable, observable } from "mobx"; // types -import { IIssueRootStore } from "../root.store"; -import { IIssueStore, IssueStore, IIssueStoreActions } from "./issue.store"; -import { IIssueReactionStore, IssueReactionStore, IIssueReactionStoreActions } from "./reaction.store"; -import { IIssueLinkStore, IssueLinkStore, IIssueLinkStoreActions } from "./link.store"; -import { IIssueSubscriptionStore, IssueSubscriptionStore, IIssueSubscriptionStoreActions } from "./subscription.store"; -import { IIssueAttachmentStore, IssueAttachmentStore, IIssueAttachmentStoreActions } from "./attachment.store"; -import { IIssueSubIssuesStore, IssueSubIssuesStore, IIssueSubIssuesStoreActions } from "./sub_issues.store"; -import { IIssueRelationStore, IssueRelationStore, IIssueRelationStoreActions } from "./relation.store"; -import { IIssueActivityStore, IssueActivityStore, IIssueActivityStoreActions, TActivityLoader } from "./activity.store"; -import { IIssueCommentStore, IssueCommentStore, IIssueCommentStoreActions, TCommentLoader } from "./comment.store"; -import { - IIssueCommentReactionStore, - IssueCommentReactionStore, - IIssueCommentReactionStoreActions, -} from "./comment_reaction.store"; import { TIssue, TIssueAttachment, @@ -24,6 +9,21 @@ import { TIssueReaction, TIssueRelationTypes, } from "@plane/types"; +import { IIssueRootStore } from "../root.store"; +import { IIssueActivityStore, IssueActivityStore, IIssueActivityStoreActions, TActivityLoader } from "./activity.store"; +import { IIssueAttachmentStore, IssueAttachmentStore, IIssueAttachmentStoreActions } from "./attachment.store"; +import { IIssueCommentStore, IssueCommentStore, IIssueCommentStoreActions, TCommentLoader } from "./comment.store"; +import { + IIssueCommentReactionStore, + IssueCommentReactionStore, + IIssueCommentReactionStoreActions, +} from "./comment_reaction.store"; +import { IIssueStore, IssueStore, IIssueStoreActions } from "./issue.store"; +import { IIssueLinkStore, IssueLinkStore, IIssueLinkStoreActions } from "./link.store"; +import { IIssueReactionStore, IssueReactionStore, IIssueReactionStoreActions } from "./reaction.store"; +import { IIssueRelationStore, IssueRelationStore, IIssueRelationStoreActions } from "./relation.store"; +import { IIssueSubIssuesStore, IssueSubIssuesStore, IIssueSubIssuesStoreActions } from "./sub_issues.store"; +import { IIssueSubscriptionStore, IssueSubscriptionStore, IIssueSubscriptionStoreActions } from "./subscription.store"; export type TPeekIssue = { workspaceSlug: string; diff --git a/web/store/issue/issue-details/sub_issues.store.ts b/web/store/issue/issue-details/sub_issues.store.ts index cfa1be12e..87ec58930 100644 --- a/web/store/issue/issue-details/sub_issues.store.ts +++ b/web/store/issue/issue-details/sub_issues.store.ts @@ -1,12 +1,11 @@ -import { action, makeObservable, observable, runInAction } from "mobx"; -import set from "lodash/set"; import concat from "lodash/concat"; -import update from "lodash/update"; import pull from "lodash/pull"; +import set from "lodash/set"; +import update from "lodash/update"; +import { action, makeObservable, observable, runInAction } from "mobx"; // services import { IssueService } from "services/issue"; // types -import { IIssueDetail } from "./root.store"; import { TIssue, TIssueSubIssues, @@ -14,6 +13,7 @@ import { TIssueSubIssuesIdMap, TSubIssuesStateDistribution, } from "@plane/types"; +import { IIssueDetail } from "./root.store"; export interface IIssueSubIssuesStoreActions { fetchSubIssues: (workspaceSlug: string, projectId: string, parentIssueId: string) => Promise; diff --git a/web/store/issue/issue-details/subscription.store.ts b/web/store/issue/issue-details/subscription.store.ts index 276c952f4..48b353e72 100644 --- a/web/store/issue/issue-details/subscription.store.ts +++ b/web/store/issue/issue-details/subscription.store.ts @@ -1,5 +1,5 @@ -import { action, makeObservable, observable, runInAction } from "mobx"; import set from "lodash/set"; +import { action, makeObservable, observable, runInAction } from "mobx"; // services import { NotificationService } from "services/notification.service"; // types diff --git a/web/store/issue/issue.store.ts b/web/store/issue/issue.store.ts index cbda505ff..635c75b24 100644 --- a/web/store/issue/issue.store.ts +++ b/web/store/issue/issue.store.ts @@ -1,12 +1,12 @@ -import set from "lodash/set"; import isEmpty from "lodash/isEmpty"; +import set from "lodash/set"; // store import { action, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; // types +import { IssueService } from "services/issue"; import { TIssue } from "@plane/types"; //services -import { IssueService } from "services/issue"; export type IIssueStore = { // observables diff --git a/web/store/issue/issue_calendar_view.store.ts b/web/store/issue/issue_calendar_view.store.ts index ac4a60809..98181d730 100644 --- a/web/store/issue/issue_calendar_view.store.ts +++ b/web/store/issue/issue_calendar_view.store.ts @@ -1,9 +1,9 @@ import { observable, action, makeObservable, runInAction, computed } from "mobx"; // helpers +import { ICalendarPayload, ICalendarWeek } from "components/issues"; import { generateCalendarData } from "helpers/calendar.helper"; // types -import { ICalendarPayload, ICalendarWeek } from "components/issues"; import { getWeekNumberOfDate } from "helpers/date-time.helper"; export interface ICalendarStore { diff --git a/web/store/issue/issue_gantt_view.store.ts b/web/store/issue/issue_gantt_view.store.ts index b087554dd..e478e8649 100644 --- a/web/store/issue/issue_gantt_view.store.ts +++ b/web/store/issue/issue_gantt_view.store.ts @@ -1,9 +1,9 @@ import { action, makeObservable, observable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; // helpers +import { ChartDataType, TGanttViews } from "components/gantt-chart"; import { currentViewDataWithView } from "components/gantt-chart/data"; // types -import { ChartDataType, TGanttViews } from "components/gantt-chart"; export interface IGanttStore { // observables diff --git a/web/store/issue/module/filter.store.ts b/web/store/issue/module/filter.store.ts index c353059ef..c34a31b23 100644 --- a/web/store/issue/module/filter.store.ts +++ b/web/store/issue/module/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { IssueFiltersService } from "services/issue_filter.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -17,10 +15,12 @@ import { IIssueFilters, TIssueParams, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { IssueFiltersService } from "services/issue_filter.service"; export interface IModuleIssuesFilter { // observables diff --git a/web/store/issue/module/issue.store.ts b/web/store/issue/module/issue.store.ts index 9e6ad3f49..668473195 100644 --- a/web/store/issue/module/issue.store.ts +++ b/web/store/issue/module/issue.store.ts @@ -1,17 +1,17 @@ -import { action, observable, makeObservable, computed, runInAction } from "mobx"; -import set from "lodash/set"; -import update from "lodash/update"; import concat from "lodash/concat"; import pull from "lodash/pull"; +import set from "lodash/set"; import uniq from "lodash/uniq"; +import update from "lodash/update"; +import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class -import { IssueHelperStore } from "../helpers/issue-helper.store"; // services import { IssueService } from "services/issue"; import { ModuleService } from "services/module.service"; // types -import { IIssueRootStore } from "../root.store"; import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; +import { IssueHelperStore } from "../helpers/issue-helper.store"; +import { IIssueRootStore } from "../root.store"; export interface IModuleIssues { // observable diff --git a/web/store/issue/profile/filter.store.ts b/web/store/issue/profile/filter.store.ts index 658980082..c7ebc378a 100644 --- a/web/store/issue/profile/filter.store.ts +++ b/web/store/issue/profile/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { IssueFiltersService } from "services/issue_filter.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -17,10 +15,12 @@ import { IIssueFilters, TIssueParams, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { IssueFiltersService } from "services/issue_filter.service"; export interface IProfileIssuesFilter { // observables diff --git a/web/store/issue/profile/issue.store.ts b/web/store/issue/profile/issue.store.ts index c39b33a80..39a37a2cf 100644 --- a/web/store/issue/profile/issue.store.ts +++ b/web/store/issue/profile/issue.store.ts @@ -1,13 +1,13 @@ -import { action, observable, makeObservable, computed, runInAction } from "mobx"; -import set from "lodash/set"; import pull from "lodash/pull"; +import set from "lodash/set"; +import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class +import { UserService } from "services/user.service"; +import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; import { IssueHelperStore } from "../helpers/issue-helper.store"; // services -import { UserService } from "services/user.service"; // types import { IIssueRootStore } from "../root.store"; -import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; interface IProfileIssueTabTypes { [key: string]: string[]; diff --git a/web/store/issue/project-views/filter.store.ts b/web/store/issue/project-views/filter.store.ts index c7c8988b1..27c980360 100644 --- a/web/store/issue/project-views/filter.store.ts +++ b/web/store/issue/project-views/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { ViewService } from "services/view.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -17,10 +15,12 @@ import { IIssueFilters, TIssueParams, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { ViewService } from "services/view.service"; export interface IProjectViewIssuesFilter { // observables diff --git a/web/store/issue/project-views/issue.store.ts b/web/store/issue/project-views/issue.store.ts index b85465ec8..012d6ebe8 100644 --- a/web/store/issue/project-views/issue.store.ts +++ b/web/store/issue/project-views/issue.store.ts @@ -1,13 +1,13 @@ -import { action, observable, makeObservable, computed, runInAction } from "mobx"; -import set from "lodash/set"; import pull from "lodash/pull"; +import set from "lodash/set"; +import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class +import { IssueService } from "services/issue/issue.service"; +import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; import { IssueHelperStore } from "../helpers/issue-helper.store"; // services -import { IssueService } from "services/issue/issue.service"; // types import { IIssueRootStore } from "../root.store"; -import { TIssue, TLoader, TGroupedIssues, TSubGroupedIssues, TUnGroupedIssues, ViewFlags } from "@plane/types"; export interface IProjectViewIssues { // observable diff --git a/web/store/issue/project/filter.store.ts b/web/store/issue/project/filter.store.ts index f18654cde..d5c353487 100644 --- a/web/store/issue/project/filter.store.ts +++ b/web/store/issue/project/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { IssueFiltersService } from "services/issue_filter.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -17,10 +15,12 @@ import { IIssueFilters, TIssueParams, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { IssueFiltersService } from "services/issue_filter.service"; export interface IProjectIssuesFilter { // observables @@ -189,7 +189,6 @@ export class ProjectIssuesFilter extends IssueFilterHelperStore implements IProj updatedDisplayFilters.group_by = "state"; } - runInAction(() => { Object.keys(updatedDisplayFilters).forEach((_key) => { set( diff --git a/web/store/issue/project/issue.store.ts b/web/store/issue/project/issue.store.ts index f3ee94783..080b8cee6 100644 --- a/web/store/issue/project/issue.store.ts +++ b/web/store/issue/project/issue.store.ts @@ -1,15 +1,15 @@ -import { action, makeObservable, observable, runInAction, computed } from "mobx"; +import concat from "lodash/concat"; +import pull from "lodash/pull"; import set from "lodash/set"; import update from "lodash/update"; -import pull from "lodash/pull"; -import concat from "lodash/concat"; +import { action, makeObservable, observable, runInAction, computed } from "mobx"; // base class +import { IssueService, IssueArchiveService } from "services/issue"; +import { TIssue, TGroupedIssues, TSubGroupedIssues, TLoader, TUnGroupedIssues, ViewFlags } from "@plane/types"; import { IssueHelperStore } from "../helpers/issue-helper.store"; // services -import { IssueService, IssueArchiveService } from "services/issue"; // types import { IIssueRootStore } from "../root.store"; -import { TIssue, TGroupedIssues, TSubGroupedIssues, TLoader, TUnGroupedIssues, ViewFlags } from "@plane/types"; export interface IProjectIssues { // observable diff --git a/web/store/issue/root.store.ts b/web/store/issue/root.store.ts index def91d200..a9dde82ae 100644 --- a/web/store/issue/root.store.ts +++ b/web/store/issue/root.store.ts @@ -1,28 +1,28 @@ -import { autorun, makeObservable, observable } from "mobx"; import isEmpty from "lodash/isEmpty"; +import { autorun, makeObservable, observable } from "mobx"; // root store +import { IWorkspaceMembership } from "store/member/workspace-member.store"; +import { ICycle, IIssueLabel, IModule, IProject, IState, IUserLite } from "@plane/types"; import { RootStore } from "../root.store"; import { IStateStore, StateStore } from "../state.store"; // issues data store -import { ICycle, IIssueLabel, IModule, IProject, IState, IUserLite } from "@plane/types"; -import { IIssueStore, IssueStore } from "./issue.store"; +import { IArchivedIssuesFilter, ArchivedIssuesFilter, IArchivedIssues, ArchivedIssues } from "./archived"; +import { ICycleIssuesFilter, CycleIssuesFilter, ICycleIssues, CycleIssues } from "./cycle"; +import { IDraftIssuesFilter, DraftIssuesFilter, IDraftIssues, DraftIssues } from "./draft"; import { IIssueDetail, IssueDetail } from "./issue-details/root.store"; -import { IWorkspaceIssuesFilter, WorkspaceIssuesFilter, IWorkspaceIssues, WorkspaceIssues } from "./workspace"; +import { IIssueStore, IssueStore } from "./issue.store"; +import { ICalendarStore, CalendarStore } from "./issue_calendar_view.store"; +import { IIssueKanBanViewStore, IssueKanBanViewStore } from "./issue_kanban_view.store"; +import { IModuleIssuesFilter, ModuleIssuesFilter, IModuleIssues, ModuleIssues } from "./module"; import { IProfileIssuesFilter, ProfileIssuesFilter, IProfileIssues, ProfileIssues } from "./profile"; import { IProjectIssuesFilter, ProjectIssuesFilter, IProjectIssues, ProjectIssues } from "./project"; -import { ICycleIssuesFilter, CycleIssuesFilter, ICycleIssues, CycleIssues } from "./cycle"; -import { IModuleIssuesFilter, ModuleIssuesFilter, IModuleIssues, ModuleIssues } from "./module"; import { IProjectViewIssuesFilter, ProjectViewIssuesFilter, IProjectViewIssues, ProjectViewIssues, } from "./project-views"; -import { IArchivedIssuesFilter, ArchivedIssuesFilter, IArchivedIssues, ArchivedIssues } from "./archived"; -import { IDraftIssuesFilter, DraftIssuesFilter, IDraftIssues, DraftIssues } from "./draft"; -import { IIssueKanBanViewStore, IssueKanBanViewStore } from "./issue_kanban_view.store"; -import { ICalendarStore, CalendarStore } from "./issue_calendar_view.store"; -import { IWorkspaceMembership } from "store/member/workspace-member.store"; +import { IWorkspaceIssuesFilter, WorkspaceIssuesFilter, IWorkspaceIssues, WorkspaceIssues } from "./workspace"; export interface IIssueRootStore { currentUserId: string | undefined; diff --git a/web/store/issue/workspace/filter.store.ts b/web/store/issue/workspace/filter.store.ts index 76b861f4b..d6f1aba74 100644 --- a/web/store/issue/workspace/filter.store.ts +++ b/web/store/issue/workspace/filter.store.ts @@ -1,14 +1,12 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import isEmpty from "lodash/isEmpty"; -import set from "lodash/set"; -import pickBy from "lodash/pickBy"; import isArray from "lodash/isArray"; +import isEmpty from "lodash/isEmpty"; +import pickBy from "lodash/pickBy"; +import set from "lodash/set"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; // base class -import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; -// helpers +import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; import { handleIssueQueryParamsByLayout } from "helpers/issue.helper"; -// types -import { IIssueRootStore } from "../root.store"; +import { WorkspaceService } from "services/workspace.service"; import { IIssueFilterOptions, IIssueDisplayFilterOptions, @@ -18,10 +16,12 @@ import { TIssueParams, TStaticViewTypes, } from "@plane/types"; +import { IssueFilterHelperStore } from "../helpers/issue-filter-helper.store"; +// helpers +// types +import { IIssueRootStore } from "../root.store"; // constants -import { EIssueFilterType, EIssuesStoreType } from "constants/issue"; // services -import { WorkspaceService } from "services/workspace.service"; type TWorkspaceFilters = "all-issues" | "assigned" | "created" | "subscribed" | string; export interface IWorkspaceIssuesFilter { diff --git a/web/store/issue/workspace/issue.store.ts b/web/store/issue/workspace/issue.store.ts index b7fe43b30..cc859755f 100644 --- a/web/store/issue/workspace/issue.store.ts +++ b/web/store/issue/workspace/issue.store.ts @@ -1,14 +1,14 @@ -import { action, observable, makeObservable, computed, runInAction } from "mobx"; -import set from "lodash/set"; import pull from "lodash/pull"; +import set from "lodash/set"; +import { action, observable, makeObservable, computed, runInAction } from "mobx"; // base class +import { IssueService, IssueArchiveService } from "services/issue"; +import { WorkspaceService } from "services/workspace.service"; +import { TIssue, TLoader, TUnGroupedIssues, ViewFlags } from "@plane/types"; import { IssueHelperStore } from "../helpers/issue-helper.store"; // services -import { WorkspaceService } from "services/workspace.service"; -import { IssueService, IssueArchiveService } from "services/issue"; // types import { IIssueRootStore } from "../root.store"; -import { TIssue, TLoader, TUnGroupedIssues, ViewFlags } from "@plane/types"; export interface IWorkspaceIssues { // observable diff --git a/web/store/label.store.ts b/web/store/label.store.ts index 769ef16a9..386676dfe 100644 --- a/web/store/label.store.ts +++ b/web/store/label.store.ts @@ -1,11 +1,11 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import { computedFn } from "mobx-utils"; import set from "lodash/set"; import sortBy from "lodash/sortBy"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; +import { computedFn } from "mobx-utils"; // services +import { buildTree } from "helpers/array.helper"; import { IssueLabelService } from "services/issue"; // helpers -import { buildTree } from "helpers/array.helper"; // types import { RootStore } from "store/root.store"; import { IIssueLabel, IIssueLabelTree } from "@plane/types"; diff --git a/web/store/member/index.ts b/web/store/member/index.ts index a7eba3971..d43398d0b 100644 --- a/web/store/member/index.ts +++ b/web/store/member/index.ts @@ -2,8 +2,8 @@ import { action, makeObservable, observable } from "mobx"; // types import { RootStore } from "store/root.store"; import { IUserLite } from "@plane/types"; -import { IWorkspaceMemberStore, WorkspaceMemberStore } from "./workspace-member.store"; import { IProjectMemberStore, ProjectMemberStore } from "./project-member.store"; +import { IWorkspaceMemberStore, WorkspaceMemberStore } from "./workspace-member.store"; export interface IMemberRootStore { // observables diff --git a/web/store/member/project-member.store.ts b/web/store/member/project-member.store.ts index 71e2e2dcd..6cb39e2ef 100644 --- a/web/store/member/project-member.store.ts +++ b/web/store/member/project-member.store.ts @@ -1,17 +1,17 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import { computedFn } from "mobx-utils"; import set from "lodash/set"; import sortBy from "lodash/sortBy"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; +import { computedFn } from "mobx-utils"; // services +import { EUserProjectRoles } from "constants/project"; import { ProjectMemberService } from "services/project"; // types +import { IRouterStore } from "store/application/router.store"; import { RootStore } from "store/root.store"; +import { IUserRootStore } from "store/user"; import { IProjectBulkAddFormData, IProjectMember, IProjectMembership, IUserLite } from "@plane/types"; // constants -import { EUserProjectRoles } from "constants/project"; import { IMemberRootStore } from "."; -import { IRouterStore } from "store/application/router.store"; -import { IUserRootStore } from "store/user"; interface IProjectMemberDetails { id: string; diff --git a/web/store/member/workspace-member.store.ts b/web/store/member/workspace-member.store.ts index 4a696bfd2..a901dccc1 100644 --- a/web/store/member/workspace-member.store.ts +++ b/web/store/member/workspace-member.store.ts @@ -1,17 +1,17 @@ -import { action, computed, makeObservable, observable, runInAction } from "mobx"; -import { computedFn } from "mobx-utils"; import set from "lodash/set"; import sortBy from "lodash/sortBy"; +import { action, computed, makeObservable, observable, runInAction } from "mobx"; +import { computedFn } from "mobx-utils"; // services +import { EUserWorkspaceRoles } from "constants/workspace"; import { WorkspaceService } from "services/workspace.service"; // types +import { IRouterStore } from "store/application/router.store"; import { RootStore } from "store/root.store"; +import { IUserRootStore } from "store/user"; import { IWorkspaceBulkInviteFormData, IWorkspaceMember, IWorkspaceMemberInvitation } from "@plane/types"; // constants -import { EUserWorkspaceRoles } from "constants/workspace"; -import { IRouterStore } from "store/application/router.store"; import { IMemberRootStore } from "."; -import { IUserRootStore } from "store/user"; export interface IWorkspaceMembership { id: string; diff --git a/web/store/mention.store.ts b/web/store/mention.store.ts index 872efeb41..5cfa0478a 100644 --- a/web/store/mention.store.ts +++ b/web/store/mention.store.ts @@ -1,6 +1,6 @@ +import { IMentionHighlight, IMentionSuggestion } from "@plane/lite-text-editor"; import { computed, makeObservable } from "mobx"; // editor -import { IMentionHighlight, IMentionSuggestion } from "@plane/lite-text-editor"; // types import { RootStore } from "store/root.store"; diff --git a/web/store/module.store.ts b/web/store/module.store.ts index 2b4522cd0..c7dcba79c 100644 --- a/web/store/module.store.ts +++ b/web/store/module.store.ts @@ -1,13 +1,13 @@ -import { action, computed, observable, makeObservable, runInAction } from "mobx"; -import { computedFn } from "mobx-utils"; import set from "lodash/set"; import sortBy from "lodash/sortBy"; +import { action, computed, observable, makeObservable, runInAction } from "mobx"; +import { computedFn } from "mobx-utils"; // services -import { ProjectService } from "services/project"; import { ModuleService } from "services/module.service"; +import { ProjectService } from "services/project"; // types -import { IModule, ILinkDetails } from "@plane/types"; import { RootStore } from "store/root.store"; +import { IModule, ILinkDetails } from "@plane/types"; export interface IModuleStore { //Loaders diff --git a/web/store/page.store.ts b/web/store/page.store.ts index fa5970e49..ae416237f 100644 --- a/web/store/page.store.ts +++ b/web/store/page.store.ts @@ -1,7 +1,7 @@ import { action, makeObservable, observable, reaction, runInAction } from "mobx"; -import { IIssueLabel, IPage } from "@plane/types"; import { PageService } from "services/page.service"; +import { IIssueLabel, IPage } from "@plane/types"; import { RootStore } from "./root.store"; diff --git a/web/store/project-page.store.ts b/web/store/project-page.store.ts index 072605bc3..c16e8ab08 100644 --- a/web/store/project-page.store.ts +++ b/web/store/project-page.store.ts @@ -1,5 +1,6 @@ -import { makeObservable, observable, runInAction, action, computed } from "mobx"; +import { isThisWeek, isToday, isYesterday } from "date-fns"; import { set } from "lodash"; +import { makeObservable, observable, runInAction, action, computed } from "mobx"; // services import { PageService } from "services/page.service"; // store @@ -7,7 +8,6 @@ import { PageStore, IPageStore } from "store/page.store"; // types import { IPage, IRecentPages } from "@plane/types"; import { RootStore } from "./root.store"; -import { isThisWeek, isToday, isYesterday } from "date-fns"; export interface IProjectPageStore { loader: boolean; diff --git a/web/store/project/index.ts b/web/store/project/index.ts index 696b3c802..dff0db175 100644 --- a/web/store/project/index.ts +++ b/web/store/project/index.ts @@ -1,6 +1,6 @@ -import { IProjectStore, ProjectStore } from "./project.store"; -import { IProjectPublishStore, ProjectPublishStore } from "./project-publish.store"; import { RootStore } from "store/root.store"; +import { IProjectPublishStore, ProjectPublishStore } from "./project-publish.store"; +import { IProjectStore, ProjectStore } from "./project.store"; export interface IProjectRootStore { project: IProjectStore; diff --git a/web/store/project/project-publish.store.ts b/web/store/project/project-publish.store.ts index 3a94b8611..9be1cb48c 100644 --- a/web/store/project/project-publish.store.ts +++ b/web/store/project/project-publish.store.ts @@ -1,9 +1,9 @@ -import { observable, action, makeObservable, runInAction } from "mobx"; import set from "lodash/set"; +import { observable, action, makeObservable, runInAction } from "mobx"; // types +import { ProjectPublishService } from "services/project"; import { ProjectRootStore } from "./"; // services -import { ProjectPublishService } from "services/project"; export type TProjectPublishViews = "list" | "gantt" | "kanban" | "calendar" | "spreadsheet"; diff --git a/web/store/project/project.store.ts b/web/store/project/project.store.ts index 176c3a364..1b9220a2d 100644 --- a/web/store/project/project.store.ts +++ b/web/store/project/project.store.ts @@ -1,14 +1,14 @@ -import { observable, action, computed, makeObservable, runInAction } from "mobx"; -import { computedFn } from "mobx-utils"; +import { cloneDeep, update } from "lodash"; import set from "lodash/set"; import sortBy from "lodash/sortBy"; +import { observable, action, computed, makeObservable, runInAction } from "mobx"; +import { computedFn } from "mobx-utils"; // types -import { RootStore } from "../root.store"; -import { IProject } from "@plane/types"; -// services import { IssueLabelService, IssueService } from "services/issue"; import { ProjectService, ProjectStateService } from "services/project"; -import { cloneDeep, update } from "lodash"; +import { IProject } from "@plane/types"; +import { RootStore } from "../root.store"; +// services export interface IProjectStore { // observables searchQuery: string; diff --git a/web/store/root.store.ts b/web/store/root.store.ts index 3e0733249..298cd532e 100644 --- a/web/store/root.store.ts +++ b/web/store/root.store.ts @@ -1,23 +1,23 @@ import { enableStaticRendering } from "mobx-react-lite"; // root stores import { AppRootStore, IAppRootStore } from "./application"; -import { EventTrackerStore, IEventTrackerStore } from "./event-tracker.store"; -import { IProjectRootStore, ProjectRootStore } from "./project"; import { CycleStore, ICycleStore } from "./cycle.store"; -import { IProjectViewStore, ProjectViewStore } from "./project-view.store"; +import { DashboardStore, IDashboardStore } from "./dashboard.store"; +import { IEstimateStore, EstimateStore } from "./estimate.store"; +import { EventTrackerStore, IEventTrackerStore } from "./event-tracker.store"; +import { GlobalViewStore, IGlobalViewStore } from "./global-view.store"; +import { IInboxRootStore, InboxRootStore } from "./inbox/root.store"; +import { IssueRootStore, IIssueRootStore } from "./issue/root.store"; +import { ILabelStore, LabelStore } from "./label.store"; +import { IMemberRootStore, MemberRootStore } from "./member"; +import { IMentionStore, MentionStore } from "./mention.store"; import { IModuleStore, ModulesStore } from "./module.store"; +import { IProjectRootStore, ProjectRootStore } from "./project"; +import { IProjectViewStore, ProjectViewStore } from "./project-view.store"; +import { IStateStore, StateStore } from "./state.store"; import { IUserRootStore, UserRootStore } from "./user"; import { IWorkspaceRootStore, WorkspaceRootStore } from "./workspace"; -import { IssueRootStore, IIssueRootStore } from "./issue/root.store"; -import { IInboxRootStore, InboxRootStore } from "./inbox/root.store"; -import { IStateStore, StateStore } from "./state.store"; -import { IMemberRootStore, MemberRootStore } from "./member"; -import { IEstimateStore, EstimateStore } from "./estimate.store"; -import { GlobalViewStore, IGlobalViewStore } from "./global-view.store"; -import { IMentionStore, MentionStore } from "./mention.store"; -import { DashboardStore, IDashboardStore } from "./dashboard.store"; import { IProjectPageStore, ProjectPageStore } from "./project-page.store"; -import { ILabelStore, LabelStore } from "./label.store"; enableStaticRendering(typeof window === "undefined"); diff --git a/web/store/state.store.ts b/web/store/state.store.ts index 783a82ee2..df3496f39 100644 --- a/web/store/state.store.ts +++ b/web/store/state.store.ts @@ -1,15 +1,15 @@ -import { makeObservable, observable, computed, action, runInAction } from "mobx"; -import { computedFn } from "mobx-utils"; import groupBy from "lodash/groupBy"; import set from "lodash/set"; +import { makeObservable, observable, computed, action, runInAction } from "mobx"; +import { computedFn } from "mobx-utils"; // store +import { sortStates } from "helpers/state.helper"; +import { ProjectStateService } from "services/project"; +import { IState } from "@plane/types"; import { RootStore } from "./root.store"; // types -import { IState } from "@plane/types"; // services -import { ProjectStateService } from "services/project"; // helpers -import { sortStates } from "helpers/state.helper"; export interface IStateStore { //Loaders diff --git a/web/store/user/index.ts b/web/store/user/index.ts index ada2e6be7..1a94e16b3 100644 --- a/web/store/user/index.ts +++ b/web/store/user/index.ts @@ -1,7 +1,7 @@ import { action, observable, runInAction, makeObservable } from "mobx"; // services -import { UserService } from "services/user.service"; import { AuthService } from "services/auth.service"; +import { UserService } from "services/user.service"; // interfaces import { IUser, IUserSettings } from "@plane/types"; // store diff --git a/web/store/user/user-membership.store.ts b/web/store/user/user-membership.store.ts index b8bdbfac5..a1f5c1b81 100644 --- a/web/store/user/user-membership.store.ts +++ b/web/store/user/user-membership.store.ts @@ -1,6 +1,8 @@ -import { action, observable, runInAction, makeObservable, computed } from "mobx"; import { set } from "lodash"; +import { action, observable, runInAction, makeObservable, computed } from "mobx"; // services +import { EUserProjectRoles } from "constants/project"; +import { EUserWorkspaceRoles } from "constants/workspace"; import { ProjectMemberService } from "services/project"; import { UserService } from "services/user.service"; import { WorkspaceService } from "services/workspace.service"; @@ -8,8 +10,6 @@ import { WorkspaceService } from "services/workspace.service"; import { IWorkspaceMemberMe, IProjectMember, IUserProjectsRole } from "@plane/types"; import { RootStore } from "../root.store"; // constants -import { EUserProjectRoles } from "constants/project"; -import { EUserWorkspaceRoles } from "constants/workspace"; export interface IUserMembershipStore { // observables diff --git a/web/store/workspace/api-token.store.ts b/web/store/workspace/api-token.store.ts index f0772933d..351ead561 100644 --- a/web/store/workspace/api-token.store.ts +++ b/web/store/workspace/api-token.store.ts @@ -2,9 +2,9 @@ import { action, observable, makeObservable, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; import { APITokenService } from "services/api_token.service"; +import { IApiToken } from "@plane/types"; import { RootStore } from "../root.store"; // types -import { IApiToken } from "@plane/types"; export interface IApiTokenStore { // observables diff --git a/web/store/workspace/index.ts b/web/store/workspace/index.ts index 4020aaef7..863982e1a 100644 --- a/web/store/workspace/index.ts +++ b/web/store/workspace/index.ts @@ -1,13 +1,13 @@ -import { action, computed, observable, makeObservable, runInAction } from "mobx"; -import { RootStore } from "../root.store"; import set from "lodash/set"; -// types -import { IWorkspace } from "@plane/types"; -// services +import { action, computed, observable, makeObservable, runInAction } from "mobx"; import { WorkspaceService } from "services/workspace.service"; +import { IWorkspace } from "@plane/types"; +import { RootStore } from "../root.store"; +// types +// services // sub-stores -import { IWebhookStore, WebhookStore } from "./webhook.store"; import { ApiTokenStore, IApiTokenStore } from "./api-token.store"; +import { IWebhookStore, WebhookStore } from "./webhook.store"; export interface IWorkspaceRootStore { // observables diff --git a/web/store/workspace/webhook.store.ts b/web/store/workspace/webhook.store.ts index 5657f341e..256b41e38 100644 --- a/web/store/workspace/webhook.store.ts +++ b/web/store/workspace/webhook.store.ts @@ -1,8 +1,8 @@ // mobx import { action, observable, makeObservable, computed, runInAction } from "mobx"; import { computedFn } from "mobx-utils"; -import { IWebhook } from "@plane/types"; import { WebhookService } from "services/webhook.service"; +import { IWebhook } from "@plane/types"; import { RootStore } from "../root.store"; export interface IWebhookStore { diff --git a/yarn.lock b/yarn.lock index 0a21fcee2..9518afff6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,13 +29,6 @@ jsonpointer "^5.0.0" leven "^3.1.0" -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": version "7.23.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" @@ -269,7 +262,7 @@ "@babel/traverse" "^7.23.6" "@babel/types" "^7.23.6" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4": +"@babel/highlight@^7.23.4": version "7.23.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== @@ -1288,37 +1281,7 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@eslint/eslintrc@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.4.1.tgz#af58772019a2d271b7e2d4c23ff4ddcba3ccfb3e" - integrity sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.4.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/eslintrc@^2.0.1", "@eslint/eslintrc@^2.1.4": +"@eslint/eslintrc@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== @@ -1333,15 +1296,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.36.0": - version "8.36.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.36.0.tgz#9837f768c03a1e4a30bd304a64fb8844f0e72efe" - integrity sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg== - -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@floating-ui/core@^1.4.2": version "1.5.2" @@ -1399,38 +1357,24 @@ redux "^4.2.1" use-memo-one "^1.1.3" -"@humanwhocodes/config-array@^0.11.13", "@humanwhocodes/config-array@^0.11.8": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@hypnosphi/create-react-context@^0.3.1": version "0.3.1" @@ -1591,33 +1535,12 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.0.4.tgz#d5cda0c4a862d70ae760e58c0cd96a8899a2e49a" integrity sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ== -"@next/eslint-plugin-next@12.2.2": - version "12.2.2" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.2.tgz#b4a22c06b6454068b54cc44502168d90fbb29a6d" - integrity sha512-XOi0WzJhGH3Lk51SkSu9eZxF+IY1ZZhWcJTIGBycAbWU877IQa6+6KxMATWCOs7c+bmp6Sd8KywXJaDRxzu0JA== +"@next/eslint-plugin-next@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.0.tgz#29b041233fac7417e22eefa4146432d5cd910820" + integrity sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q== dependencies: - glob "7.1.7" - -"@next/eslint-plugin-next@13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.0.0.tgz#cf3d799b21671554c1f5889c01d2513afb9973cd" - integrity sha512-z+gnX4Zizatqatc6f4CQrcC9oN8Us3Vrq/OLyc98h7K/eWctrnV91zFZodmJHUjx0cITY8uYM7LXD7IdYkg3kg== - dependencies: - glob "7.1.7" - -"@next/eslint-plugin-next@13.2.1": - version "13.2.1" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.1.tgz#58dea4d53c0adfc59c10195f51eb8d3575fce414" - integrity sha512-r0i5rcO6SMAZtqiGarUVMr3k256X0R0j6pEkKg4PxqUW+hG0qgMxRVAJsuoRG5OBFkCOlSfWZJ0mP9fQdCcyNg== - dependencies: - glob "7.1.7" - -"@next/eslint-plugin-next@13.2.4": - version "13.2.4" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-13.2.4.tgz#3e124cd10ce24dab5d3448ce04104b4f1f4c6ca7" - integrity sha512-ck1lI+7r1mMJpqLNa3LJ5pxCfOB1lfJncKmRJeJxcJqcngaFwylreLP7da6Rrjr6u2gVRTfmnkSkjc80IiQCwQ== - dependencies: - glob "7.1.7" + glob "10.3.10" "@next/swc-darwin-arm64@14.0.4": version "14.0.4" @@ -2199,10 +2122,10 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz#d146db7a5949e10837b323ce933ed882ac878262" integrity sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA== -"@rushstack/eslint-patch@^1.1.3": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz#9ab8f811930d7af3e3d549183a50884f9eb83f36" - integrity sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw== +"@rushstack/eslint-patch@^1.3.3": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz#2d4260033e199b3032a08b41348ac10de21c47e9" + integrity sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA== "@scena/dragscroll@^1.4.0": version "1.4.0" @@ -2799,7 +2722,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.2.42", "@types/react@^18.2.42": +"@types/react@*", "@types/react@^18.2.42": version "18.2.42" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.42.tgz#6f6b11a904f6d96dda3c2920328a97011a00aba7" integrity sha512-c1zEr96MjakLYus/wPnuWDo1/zErfdU9rNsIGmE+NV71nx88FG9Ttgo5dqorXTu/LImX2f63WBP986gJkMPNbA== @@ -2883,16 +2806,16 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^6.13.2": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.16.0.tgz#cc29fbd208ea976de3db7feb07755bba0ce8d8bc" - integrity sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ== +"@typescript-eslint/eslint-plugin@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz#dd71fc5c7ecec745ca26ece506d84d203a205c0e" + integrity sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.16.0" - "@typescript-eslint/type-utils" "6.16.0" - "@typescript-eslint/utils" "6.16.0" - "@typescript-eslint/visitor-keys" "6.16.0" + "@typescript-eslint/scope-manager" "7.1.1" + "@typescript-eslint/type-utils" "7.1.1" + "@typescript-eslint/utils" "7.1.1" + "@typescript-eslint/visitor-keys" "7.1.1" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -2900,14 +2823,26 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/parser@^5.21.0", "@typescript-eslint/parser@^5.42.0", "@typescript-eslint/parser@^5.48.2": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== +"@typescript-eslint/parser@^5.4.2 || ^6.0.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" + integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/scope-manager" "6.21.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/typescript-estree" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + +"@typescript-eslint/parser@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.1.1.tgz#6a9d0a5c9ccdf5dbd3cb8c949728c64e24e07d1f" + integrity sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ== + dependencies: + "@typescript-eslint/scope-manager" "7.1.1" + "@typescript-eslint/types" "7.1.1" + "@typescript-eslint/typescript-estree" "7.1.1" + "@typescript-eslint/visitor-keys" "7.1.1" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -2918,13 +2853,21 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@6.16.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.16.0.tgz#f3e9a00fbc1d0701356359cd56489c54d9e37168" - integrity sha512-0N7Y9DSPdaBQ3sqSCwlrm9zJwkpOuc6HYm7LpzLAPqBL7dmzAUimr4M29dMkOP/tEwvOCC/Cxo//yOfJD3HUiw== +"@typescript-eslint/scope-manager@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" + integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== dependencies: - "@typescript-eslint/types" "6.16.0" - "@typescript-eslint/visitor-keys" "6.16.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + +"@typescript-eslint/scope-manager@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz#9e301803ff8e21a74f50c6f89a4baccad9a48f93" + integrity sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA== + dependencies: + "@typescript-eslint/types" "7.1.1" + "@typescript-eslint/visitor-keys" "7.1.1" "@typescript-eslint/type-utils@5.62.0": version "5.62.0" @@ -2936,13 +2879,13 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/type-utils@6.16.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.16.0.tgz#5f21c3e49e540ad132dc87fc99af463c184d5ed1" - integrity sha512-ThmrEOcARmOnoyQfYkHw/DX2SEYBalVECmoldVuH6qagKROp/jMnfXpAU/pAIWub9c4YTxga+XwgAkoA0pxfmg== +"@typescript-eslint/type-utils@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz#aee820d5bedd39b83c18585a526cc520ddb7a226" + integrity sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g== dependencies: - "@typescript-eslint/typescript-estree" "6.16.0" - "@typescript-eslint/utils" "6.16.0" + "@typescript-eslint/typescript-estree" "7.1.1" + "@typescript-eslint/utils" "7.1.1" debug "^4.3.4" ts-api-utils "^1.0.1" @@ -2951,10 +2894,15 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@6.16.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.16.0.tgz#a3abe0045737d44d8234708d5ed8fef5d59dc91e" - integrity sha512-hvDFpLEvTJoHutVl87+MG/c5C8I6LOgEx05zExTSJDEVU7hhR3jhV8M5zuggbdFCw98+HhZWPHZeKS97kS3JoQ== +"@typescript-eslint/types@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" + integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== + +"@typescript-eslint/types@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.1.1.tgz#ca33ba7cf58224fb46a84fea62593c2c53cd795f" + integrity sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -2969,13 +2917,27 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@6.16.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.16.0.tgz#d6e0578e4f593045f0df06c4b3a22bd6f13f2d03" - integrity sha512-VTWZuixh/vr7nih6CfrdpmFNLEnoVBF1skfjdyGnNwXOH1SLeHItGdZDHhhAIzd3ACazyY2Fg76zuzOVTaknGA== +"@typescript-eslint/typescript-estree@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" + integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== dependencies: - "@typescript-eslint/types" "6.16.0" - "@typescript-eslint/visitor-keys" "6.16.0" + "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/visitor-keys" "6.21.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/typescript-estree@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz#09c54af0151a1b05d0875c0fc7fe2ec7a2476ece" + integrity sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw== + dependencies: + "@typescript-eslint/types" "7.1.1" + "@typescript-eslint/visitor-keys" "7.1.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -2997,17 +2959,17 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/utils@6.16.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.16.0.tgz#1c291492d34670f9210d2b7fcf6b402bea3134ae" - integrity sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A== +"@typescript-eslint/utils@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.1.1.tgz#bdeeb789eee4af5d3fb5400a69566d4dbf97ff3b" + integrity sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.16.0" - "@typescript-eslint/types" "6.16.0" - "@typescript-eslint/typescript-estree" "6.16.0" + "@typescript-eslint/scope-manager" "7.1.1" + "@typescript-eslint/types" "7.1.1" + "@typescript-eslint/typescript-estree" "7.1.1" semver "^7.5.4" "@typescript-eslint/visitor-keys@5.62.0": @@ -3018,12 +2980,20 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@6.16.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.16.0.tgz#d50da18a05d91318ed3e7e8889bda0edc35f3a10" - integrity sha512-QSFQLruk7fhs91a/Ep/LqRdbJCZ1Rq03rqBdKT5Ky17Sz8zRLUksqIe9DW0pKtg/Z35/ztbLQ6qpOCN6rOC11A== +"@typescript-eslint/visitor-keys@6.21.0": + version "6.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" + integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== dependencies: - "@typescript-eslint/types" "6.16.0" + "@typescript-eslint/types" "6.21.0" + eslint-visitor-keys "^3.4.1" + +"@typescript-eslint/visitor-keys@7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz#e6538a58c9b157f03bcbb29e3b6a92fe39a6ab0d" + integrity sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ== + dependencies: + "@typescript-eslint/types" "7.1.1" eslint-visitor-keys "^3.4.1" "@ungap/structured-clone@^1.2.0": @@ -3031,16 +3001,11 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -acorn-jsx@^5.3.1, acorn-jsx@^5.3.2: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - acorn@^8.8.2, acorn@^8.9.0: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" @@ -3058,7 +3023,7 @@ ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3068,7 +3033,7 @@ ajv@^6.10.0, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1, ajv@^8.6.0: +ajv@^8.6.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -3078,11 +3043,6 @@ ajv@^8.0.1, ajv@^8.6.0: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -3130,13 +3090,6 @@ arg@^5.0.2: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -3164,7 +3117,7 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-includes@^3.1.5, array-includes@^3.1.6, array-includes@^3.1.7: +array-includes@^3.1.6, array-includes@^3.1.7: version "3.1.7" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== @@ -3213,7 +3166,7 @@ array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.0, array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: +array.prototype.flatmap@^1.3.1, array.prototype.flatmap@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== @@ -3252,11 +3205,6 @@ ast-types-flow@^0.0.8: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - async@^3.2.3: version "3.2.5" resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" @@ -3909,7 +3857,7 @@ date-fns@^2.30.0: dependencies: "@babel/runtime" "^7.21.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4146,14 +4094,6 @@ enhanced-resolve@^5.12.0: graceful-fs "^4.2.4" tapable "^2.2.0" -enquirer@^2.3.5: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -4432,77 +4372,32 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@12.2.2: - version "12.2.2" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.2.2.tgz#4bb996026e118071849bc4011283a160ad5bde46" - integrity sha512-oJhWBLC4wDYYUFv/5APbjHUFd0QRFCojMdj/QnMoOEktmeTvwnnoA8F8uaXs0fQgsaTK0tbUxBRv9/Y4/rpxOA== +eslint-config-next@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.0.tgz#7e309d426b8afacaba3b32fdbb02ba220b6d0a97" + integrity sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg== dependencies: - "@next/eslint-plugin-next" "12.2.2" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.21.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^2.7.1" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.29.4" - eslint-plugin-react-hooks "^4.5.0" - -eslint-config-next@13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.0.0.tgz#d533ee1dbd6576fd3759ba4db4d5a6c4e039c242" - integrity sha512-y2nqWS2tycWySdVhb+rhp6CuDmDazGySqkzzQZf3UTyfHyC7og1m5m/AtMFwCo5mtvDqvw1BENin52kV9733lg== - dependencies: - "@next/eslint-plugin-next" "13.0.0" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.21.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^2.7.1" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" - -eslint-config-next@13.2.1: - version "13.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.2.1.tgz#644fb3496b832bc1e32f2c57cce1ec3eeb7bb7a1" - integrity sha512-2GAx7EjSiCzJN6H2L/v1kbYrNiwQxzkyjy6eWSjuhAKt+P6d3nVNHGy9mON8ZcYd72w/M8kyMjm4UB9cvijgrw== - dependencies: - "@next/eslint-plugin-next" "13.2.1" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.42.0" + "@next/eslint-plugin-next" "14.1.0" + "@rushstack/eslint-patch" "^1.3.3" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" + eslint-plugin-import "^2.28.1" + eslint-plugin-jsx-a11y "^6.7.1" + eslint-plugin-react "^7.33.2" + eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" -eslint-config-next@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-13.2.4.tgz#8aa4d42da3a575a814634ba9c88c8d25266c5fdd" - integrity sha512-lunIBhsoeqw6/Lfkd6zPt25w1bn0znLA/JCL+au1HoEpSb4/PpsOYsYtgV/q+YPsoKIOzFyU5xnb04iZnXjUvg== +eslint-config-prettier@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" + integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== + +eslint-config-turbo@^1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/eslint-config-turbo/-/eslint-config-turbo-1.12.4.tgz#b911aced2228e98176dbebe0f1ebef345a253400" + integrity sha512-5hqEaV6PNmAYLL4RTmq74OcCt8pgzOLnfDVPG/7PUXpQ0Mpz0gr926oCSFukywKKXjdum3VHD84S7Z9A/DqTAw== dependencies: - "@next/eslint-plugin-next" "13.2.4" - "@rushstack/eslint-patch" "^1.1.3" - "@typescript-eslint/parser" "^5.42.0" - eslint-import-resolver-node "^0.3.6" - eslint-import-resolver-typescript "^3.5.2" - eslint-plugin-import "^2.26.0" - eslint-plugin-jsx-a11y "^6.5.1" - eslint-plugin-react "^7.31.7" - eslint-plugin-react-hooks "^4.5.0" - -eslint-config-prettier@^8.3.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz#3a06a662130807e2502fc3ff8b4143d8a0658e11" - integrity sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg== - -eslint-config-turbo@latest: - version "1.11.2" - resolved "https://registry.yarnpkg.com/eslint-config-turbo/-/eslint-config-turbo-1.11.2.tgz#8e6c456f58e88ecc9adface9c5e03fa782e8bba5" - integrity sha512-vqbyCH6kCHFoIAWUmGL61c0BfUQNz0XAl2RzAnEkSQ+PLXvEvuV2HsvL51UOzyyElfJlzZuh9T4BvUqb5KR9Eg== - dependencies: - eslint-plugin-turbo "1.11.2" + eslint-plugin-turbo "1.12.4" eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: version "0.3.9" @@ -4513,17 +4408,6 @@ eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-import-resolver-typescript@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751" - integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== - dependencies: - debug "^4.3.4" - glob "^7.2.0" - is-glob "^4.0.3" - resolve "^1.22.0" - tsconfig-paths "^3.14.1" - eslint-import-resolver-typescript@^3.5.2: version "3.6.1" resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" @@ -4544,7 +4428,7 @@ eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: dependencies: debug "^3.2.7" -eslint-plugin-import@^2.26.0: +eslint-plugin-import@^2.28.1, eslint-plugin-import@^2.29.1: version "2.29.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== @@ -4567,7 +4451,7 @@ eslint-plugin-import@^2.26.0: semver "^6.3.1" tsconfig-paths "^3.15.0" -eslint-plugin-jsx-a11y@^6.5.1: +eslint-plugin-jsx-a11y@^6.7.1: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== @@ -4589,32 +4473,12 @@ eslint-plugin-jsx-a11y@^6.5.1: object.entries "^1.1.7" object.fromentries "^2.0.7" -eslint-plugin-react-hooks@^4.5.0: +"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@7.31.8: - version "7.31.8" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz#3a4f80c10be1bcbc8197be9e8b641b2a3ef219bf" - integrity sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw== - dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" - doctrine "^2.1.0" - estraverse "^5.3.0" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" - prop-types "^15.8.1" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.7" - -eslint-plugin-react@^7.29.4, eslint-plugin-react@^7.31.7: +eslint-plugin-react@^7.33.2: version "7.33.2" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz#69ee09443ffc583927eafe86ffebb470ee737608" integrity sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw== @@ -4636,10 +4500,10 @@ eslint-plugin-react@^7.29.4, eslint-plugin-react@^7.31.7: semver "^6.3.1" string.prototype.matchall "^4.0.8" -eslint-plugin-turbo@1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-turbo/-/eslint-plugin-turbo-1.11.2.tgz#7bb450cced51d35369a678114c2ee9882937adc5" - integrity sha512-U6DX+WvgGFiwEAqtOjm4Ejd9O4jsw8jlFNkQi0ywxbMnbiTie+exF4Z0F/B1ajtjjeZkBkgRnlU+UkoraBN+bw== +eslint-plugin-turbo@1.12.4: + version "1.12.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-turbo/-/eslint-plugin-turbo-1.12.4.tgz#f29ddd89cb853db5dd4332db39ec2d85c713041e" + integrity sha512-3AGmXvH7E4i/XTWqBrcgu+G7YKZJV/8FrEn79kTd50ilNsv+U3nS2IlcCrQB6Xm2m9avGD9cadLzKDR1/UF2+g== dependencies: dotenv "16.0.3" @@ -4651,7 +4515,7 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.1.1, eslint-scope@^7.2.2: +eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== @@ -4659,182 +4523,21 @@ eslint-scope@^7.1.1, eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@8.34.0: - version "8.34.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.34.0.tgz#fe0ab0ef478104c1f9ebc5537e303d25a8fb22d6" - integrity sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg== - dependencies: - "@eslint/eslintrc" "^1.4.1" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.4.0" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -eslint@8.36.0: - version "8.36.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.36.0.tgz#1bd72202200a5492f91803b113fb8a83b11285cf" - integrity sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.1" - "@eslint/js" "8.36.0" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-visitor-keys "^3.3.0" - espree "^9.5.0" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-sdsl "^4.1.4" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -eslint@^7.23.0, eslint@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -eslint@^8.31.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== +eslint@^8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -4869,16 +4572,7 @@ eslint@^8.31.0: strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -espree@^9.4.0, espree@^9.5.0, espree@^9.6.0, espree@^9.6.1: +espree@^9.6.0, espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== @@ -4887,12 +4581,7 @@ espree@^9.4.0, espree@^9.5.0, espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0, esquery@^1.4.2: +esquery@^1.4.2: version "1.5.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== @@ -5162,11 +4851,6 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - functions-have-names@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" @@ -5249,19 +4933,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^10.3.10: +glob@10.3.10, glob@^10.3.10: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -5272,7 +4944,7 @@ glob@^10.3.10: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^7.0.3, glob@^7.1.3, glob@^7.1.6, glob@^7.2.0: +glob@^7.0.3, glob@^7.1.3, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5300,7 +4972,7 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.19.0, globals@^13.6.0, globals@^13.9.0: +globals@^13.19.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== @@ -5349,11 +5021,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" @@ -5463,11 +5130,6 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - ignore@^5.2.0, ignore@^5.2.4: version "5.3.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" @@ -5478,7 +5140,7 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -5877,24 +5539,11 @@ js-cookie@^3.0.1: resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -6143,11 +5792,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -6577,7 +6221,7 @@ minimatch@9.0.3, minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -6819,7 +6463,7 @@ object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.5, object.entries@^1.1.6, object.entries@^1.1.7: +object.entries@^1.1.6, object.entries@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== @@ -6828,7 +6472,7 @@ object.entries@^1.1.5, object.entries@^1.1.6, object.entries@^1.1.7: define-properties "^1.2.0" es-abstract "^1.22.1" -object.fromentries@^2.0.5, object.fromentries@^2.0.6, object.fromentries@^2.0.7: +object.fromentries@^2.0.6, object.fromentries@^2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== @@ -6847,7 +6491,7 @@ object.groupby@^1.0.1: es-abstract "^1.22.1" get-intrinsic "^1.2.1" -object.hasown@^1.1.1, object.hasown@^1.1.2: +object.hasown@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.3.tgz#6a5f2897bb4d3668b8e79364f98ccf971bda55ae" integrity sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA== @@ -6869,7 +6513,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.5, object.values@^1.1.6, object.values@^1.1.7: +object.values@^1.1.6, object.values@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== @@ -6892,7 +6536,7 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -optionator@^0.9.1, optionator@^0.9.3: +optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== @@ -7221,7 +6865,7 @@ pretty-bytes@^5.3.0, pretty-bytes@^5.4.1: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -7724,11 +7368,6 @@ regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: define-properties "^1.2.0" set-function-name "^2.0.0" -regexpp@^3.1.0, regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" @@ -7787,7 +7426,7 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@1.22.8, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.0, resolve@^1.22.2, resolve@^1.22.4: +resolve@1.22.8, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -7796,7 +7435,7 @@ resolve@1.22.8, resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.22. path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.3, resolve@^2.0.0-next.4: +resolve@^2.0.0-next.4: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== @@ -7952,12 +7591,12 @@ selecto@~1.26.3: keycon "^1.2.0" overlap-area "^1.1.0" -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: +semver@^6.0.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: +semver@^7.3.5, semver@^7.3.7, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -8077,15 +7716,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - snake-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" @@ -8144,11 +7774,6 @@ space-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - stacktrace-parser@^0.1.10: version "0.1.10" resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" @@ -8169,7 +7794,8 @@ streamx@^2.15.0: fast-fifo "^1.1.0" queue-tick "^1.0.1" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -8187,7 +7813,7 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.7, string.prototype.matchall@^4.0.8: +string.prototype.matchall@^4.0.6, string.prototype.matchall@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== @@ -8246,6 +7872,7 @@ stringify-object@^3.3.0: is-regexp "^1.0.0" "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + name strip-ansi-cjs version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -8274,7 +7901,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -8355,17 +7982,6 @@ tabbable@^6.0.1: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== -table@^6.0.9: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - tailwind-merge@^1.14.0: version "1.14.0" resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.14.0.tgz#e677f55d864edc6794562c63f5001f45093cdb8b" @@ -8591,7 +8207,7 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tsconfig-paths@^3.14.1, tsconfig-paths@^3.15.0: +tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== @@ -8788,11 +8404,16 @@ typescript@4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== -typescript@4.9.5, typescript@^4.7.4: +typescript@4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" @@ -8993,11 +8614,6 @@ uvu@^0.5.0: kleur "^4.0.3" sade "^1.7.3" -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - vfile-message@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea"