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 148568d76f..f40c1a244b 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 bfc3001962..df05683efd 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 52ccda474f..6834199ffe 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 88ea66c4c8..08bc35b28f 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 fcb6b57bbb..198b21b0f6 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 bd1f2d90fe..870d5edd9e 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 97231ea966..be70067a20 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 6ad7cad835..41056c6ad2 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 c6fde14ae0..e12f2823ae 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 a1d600a60b..7018cd2416 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 c8df607506..eb05b2af8d 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 41d1fd7ca4..34129cebec 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 bbb73b855d..1671b94fcf 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 8fc7935cde..5555d00164 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 7d51b0cf55..f42398850e 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 62f63caea6..835e018dc1 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 25ee4c462b..6929ef0feb 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 b65ca95bf5..22dba892fa 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 651f2815ff..93f7742485 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 5207a50243..7fab81fbe1 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 8eeb5e99f9..455112e9ed 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 51705ea678..28581aed46 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 0c3ec89250..1159689c6c 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 ec7c401950..b90e9994fc 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 51b4089c4f..0e70fd8984 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 7781e78696..e13b9cdd1d 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 31acb84718..7ce2f31ef7 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 3c08e15747..61c3acb09a 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 055665d9ee..de94eac622 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 74ee99a770..9daecaaa0e 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 9f66c6b545..92e4fd2e53 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 334e9160f1..9a0eec2275 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 6a7b3c7b9d..fb9ab90fa3 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 aab7f874f2..7a7c523775 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 3d0fbb9ee1..7f41b82254 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 eec62b9190..9c1a8363bf 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 24ae19fe79..f0e9f59b4a 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 6b987e3083..3e068e4f07 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 0212e49802..880cf81463 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 12c387f471..157fd2c791 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 19cd519cbf..03ac06eae6 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 fdb7a64834..b9e94a2d2c 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 bcd847a280..428e6930ba 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 bc22cb8ab1..d9309d4b52 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 3ca5caeb20..7d935c3477 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 624334ec47..942b5832b9 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 fbfb46b50b..b7e778c101 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 72af8409df..2eecb1ae90 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 1a90692675..00c98e57cb 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 9ab2e3de8e..9bf1866ffc 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 173a7f4b7c..99cf1f2b1f 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 a321be0b59..745ca1bd36 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 239fe6a663..fd7b1f356a 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 799d804382..4e2f55ef98 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 5d82c94a86..e9fdd50de0 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 646333aad9..521273c512 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 1d60f1dc4f..2d1640ec90 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 f01c840f1f..06db83e0d6 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 2e2f9ef88b..ab96ef90f6 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 bb7f82f341..32236e233c 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 407ac9ddf2..3833d319c1 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 23e7bee277..61a1181e9c 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 fbdac4f00e..3cf22c350e 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 f60d8efe60..0cfad7dc91 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 fe93d4404a..2c59342fca 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 716a3afc18..a5279f715b 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 16b2b95d9e..c429f35999 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 d18f08f275..d5fcea6971 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 3e9823fe4e..a8a8f64e8c 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 b301d30f3f..6ffeda0c48 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 141bb55336..ae4038b38d 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 5a105cc155..bfea5bf406 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 0000000000..438f87c458 --- /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 48c4480753..cfe7dd5caa 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 d3f8578243..a27534bbf6 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 5f611b4624..d65b15db7a 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 2c05d9ddf0..8c08cd67de 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 d3ef691b9b..421ab41e64 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 570ea45da7..049bf22502 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 663ca67cec..bc977d1ce6 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 067d609c5d..0f841b9e19 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 0513ec6271..0e9e36e216 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 46a0b9cbad..d91c6e0b16 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 5e0a3977f5..8826047129 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 e7d205b126..8f6a664688 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 e0677c8437..2409971f34 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 f6fb9205e8..05b455e5e8 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 9fa2f38c84..f34ef576cc 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 9c45e53568..b9211a718e 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 607d74a917..0bf546a2f0 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 4a5aeca029..9d77a81d0c 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 1ca39c84ab..3be83e3190 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 ac51d23127..f8bc2a65b7 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 37932a0acc..c63c4b2085 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 711f713a67..8e447d6ac5 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 f38550b3a2..16f8d46401 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 ed6a392207..381b168bd4 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 34e41fc358..4fdcb4a15e 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 1e0882aeec..3305c9846e 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 d98524ecc4..8eb1d87725 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 1d8a19f1a6..752645f668 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 b7497013fb..d12c9f20e2 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 c2b4dc6191..54590c3725 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 f1374c7531..6e780c4799 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 11f67a099f..e47b2304ef 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 03a17a65b0..92fc32664a 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 323938eec9..e82e40f5dd 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 4b2e472263..41647644f7 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 dee83fa79a..a4bcbd5ec1 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 a7e7c5e35a..92a677b192 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 14c0aad15e..6ace4bcc48 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 0801b7bb18..e8da6801cc 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 94b614286a..4bd295ce35 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 0801b7bb18..e8da6801cc 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 13d054da1a..1e7e6d8781 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 ed25974a3a..9d45a43a13 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 a65eb70b95..bd4ae383d6 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 82d397e97c..69ff9dae89 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 0d4bf37b5f..9dfe568917 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 7cdc231331..18d0543c01 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 496fabecd4..a0ab19ec72 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 3c40cbbffd..effe60fe42 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 b84504ee21..ca3a84e3b7 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 9ad34678a7..b942b7b136 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 e2a427db78..0eed721787 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 1984971d6e..b5ce74fc5b 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 24c69f0935..5c419f05b9 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 9d4596f835..8752e73963 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 d1da1c8597..8ade61aae3 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 139ec02579..3fd0cb3993 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 b5260edd7e..b89fbaaacb 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 3732f2598a..2f6349e613 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 43030c5c2d..8e8807fdbf 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 b70a4614f5..87b2e507e0 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 175534a79e..eea2114316 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 bb070a22f5..3b4d7fb203 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 f6dd7fd3ca..3810860aa6 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 30bc5b2a96..09b764cdca 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 195b894715..a33161de94 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 a6ad67f05e..2bede32bad 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 6b85577f67..e7ae3c726e 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 5ced552048..faf1a45d14 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 b23f56eaba..36ea67b3de 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 15debf5f22..ae9e5f1a94 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 26f58131e7..7cc19bec3f 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 4d4cfa0cca..661bc2d724 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 0d345a6191..8ff2b9305c 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 bf197980aa..27dc572a90 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 2129a4f61b..0f834c1a49 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 65e82df5fc..4f1f5c0567 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 4da762a9db..8744857c1e 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 9b0e961c0b..144198085d 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 592791a85b..bf9e833cee 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 575e8d8414..af32660679 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 8336e516f2..ec3c777fc6 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 e453875356..0eeb7ecacc 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 e01b94e1b3..a8c309bd58 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 e209b4bbf2..0097b65b6f 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 e86b1fb57e..49f813ec64 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 c8089d2330..0108c56b33 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 e68a7c3737..5ef67cf52f 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 95b3cda80e..0e3a80b347 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 7cc47c2c8a..7575193887 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 a4b40ec310..947b2e6e6d 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 af44463d5a..092633b06e 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 4dbc36f6ba..b00dd2a130 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 4e2775c4ae..0696fa1294 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 60792b01c6..69c0e08e95 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 fd714e002b..fdf94be28b 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 c31e1bc612..de0bcca908 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 fc9eb3838f..689968f07c 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 f1b003b99b..4504329f03 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 368bddb917..1120c3a5c6 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 719129d98f..b65560953d 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 f0fe06a2e3..f157ede86d 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 2268540bfc..97c63a017c 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 a9bc264f39..6f5610634c 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 0782e7e15e..655fd91051 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 2603774064..0fd0902c67 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 cb474d25ec..fd0153fe89 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 d42a8c5d21..f8933a2271 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 0110aea2bc..b50efd6c73 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 5a640a5669..2ce742fe85 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 0c8fb377a9..96887ed606 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 b23b1998e1..7b86c16a5a 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 c496cc5fe2..77b1123b61 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 bf898aec48..b24c4d5d6a 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 7a5c6f57f2..c52d17af54 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 c7185934c2..e44dd56268 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 2da9a826ff..fd98011fa5 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 6299bebd7d..76f36e8158 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 891fd6ddde..fdaed4b9bf 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 03b0c5138e..10ad265f36 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 790383f61a..e34af84348 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 be3240b551..aad394d8aa 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 4c5affe8d4..24e8fd3384 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 227dc025bc..35651d8701 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 daa194c9d5..57e28240b3 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 e9024afeb7..a075d59d2e 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 c03e865047..a431652f14 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 055c32d206..d2c9ba7ed3 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 7a6c393360..91eeef423c 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 68b5e6727c..c0b67043a7 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 0768064ec7..278e19d650 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 620a8f7813..b4a6baa530 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 59a873162e..fc216afadd 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 b8988580aa..02d1b2f04d 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 f97140185e..871bf8ff5f 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 0feb1d8919..6de3c940d5 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 a4478e8345..10dfa8c7c4 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 59c83a2003..9cdcf953b8 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 e417c650ec..afcd0ba1b5 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 198148a840..98dcb7b95d 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 168e31bc0f..b26b688afc 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 7bde26ab9f..45e3309a9b 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 47b3b05068..396addde68 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 ae7ded8b2d..257aa19773 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 b226f42b3d..42e9555357 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 a6af9833a4..4d2839b2c8 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 49e00f84d4..812cf939f2 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 61b7d50c1e..3bdde6623f 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 2cb7151588..87def7e29f 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 ea90971463..06c1aae9f4 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 c13a69b0a9..5dde1d2798 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 b168af668e..9e0ce18a7a 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 33b86ada1f..0d00c36750 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 c7c8e8b037..3311b6c6ad 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 18fd3ecef0..1f9e560d3f 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 1ed02c2c96..cda2a1e53b 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 10b73ab355..94a6243e54 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 3951e7032d..775382f59c 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 3746111e59..ff1c928739 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 3cbab589f1..ece578058f 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 ea94647802..b0859a70d2 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 a05fb17911..9d7053216a 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 20f0cd8e0d..71a0e661c4 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 9152dbfe57..5017341342 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 07ad7eb83c..96cfaceda8 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 c6c0416544..99d703a722 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 efd86bc8e9..432663a02d 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 8dd33b7284..77689e563c 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 d60e3b6186..75cb830c6a 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 ffe9de6614..8a3d87e403 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 90fee10cc7..a2148634c5 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 d3c8d14061..23c364b675 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 c6f82c2be9..db1bcb06a0 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 404107af4a..7edf89bf1a 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 3c71293b42..7bae7ecff1 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 6e70d00d02..2f3807beb2 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 5c15ebe602..46ee7f32ec 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 e11971874a..10b75b115f 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 95c62d34cd..aca528a6a6 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 fa4a05bbcb..dc0c68cd81 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 9e1b5830b7..8a0935979b 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 5ecfd6da28..82ca03d427 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 238d2e7445..8b3e2e6733 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 0c1091d39d..a57c60d6f9 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 a30db3a829..dae88a3874 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 2b4a5fa05c..89beda00c9 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 cf090385df..26eb6997cf 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 7afbd24210..33b73f88cf 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 3b098c8a10..84101542fa 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 7db9a1e3b7..ae8ca400ac 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 759495284b..5f308fbd17 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 02b666ceb8..1a1602ad1b 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 14505c65aa..0c6ba3b66a 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 cae73610ef..a57d73b2c7 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 fa942b7f60..dbd6c5f96a 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 2f09b55d60..5a522a527e 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 88fbf10546..658e9c79be 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 e261797af8..adc4a971b1 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 f7a472b49f..8143be2146 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 ac06525dff..6c59c22af0 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 60e429c9fc..1e6ae197af 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 c688c6e1d2..67c72d2a83 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 b8801559c5..714134d0c0 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 c635ca85e8..85e294641b 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 3ce70868de..01be9fe994 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 abf6c3a014..161aa07aec 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 af8abc8015..c52b40527d 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 4ce54cff5a..cc570fd81b 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 d8b7571e58..dd134e070c 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 4401eb839a..346846defe 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 98666d7901..ea0e0f1c2c 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 e7b2bcee60..f71634ab84 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 ce49d774db..6dd462fd13 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 b4dae211d7..785ccb0bbc 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 7fcb6cffa6..527ebd0e18 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 b97eafc064..f5b804e74f 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 8d8ec00df3..b47551bc63 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 7f540874c7..59b1c16090 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 2f5a02c11e..8ae021b867 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 b28cc5de60..3eae8d3e87 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 f94901c454..aa7bd395fd 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 a748e986e9..5d7d197308 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 ad09938cb2..cb1d66461a 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 03c9d8902d..f737b57e77 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 da49200dd0..ed46a40f55 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 2db4eb4b5f..bb412b795b 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 b6a3f63e87..ee09887416 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 d30d48a6ac..a29a334b60 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 83b3e807d8..d5c269136f 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 eca3bcaafd..2a797d0b63 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 71d11dacb9..6519e581e4 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 ed72e4503d..30e424064d 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 fcd84d70ab..ba6b43b0bf 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 dbbde56d78..8023657da4 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 63e780cb2e..7fe25b918d 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 e3f5044796..4763639ed5 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 81614b61ba..5590d0390b 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 bf12fde8bb..33c11cbd88 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 33a634e9ba..8efdcb472f 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 b8c337fd48..4a203ee626 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 ad3da373cd..c9f28cf989 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 bd26dcfa58..03f75ca63b 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 a8f25762eb..d7aa1b07d8 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 c2875b8dd4..f65d51ba79 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 c176ed5802..2e94bb67ea 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 1f78fcf204..c5a0d51c23 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 08ffab379b..e59db31c7e 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 af0da75ca9..42ec102cb3 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 ff37e5802b..c84911220c 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 c09a2a94cf..4c44f8c62a 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 350bd638a4..5350024932 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 a29df3c942..820f08da65 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 2f1d62f848..7929a5e371 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 0d5d4115a6..2f8392bc2f 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 eea7e9d7fd..c3e22e52e9 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 67cd175f00..362dae172c 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 4f5874e5f5..97e881096f 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 4ed759a0f4..e7cb217756 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 eb57d75580..f7bcb6059b 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 4ce301a68f..4d2ad5019b 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 6b1a4793d2..d4cb3c0236 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 ebd1fa1289..0d468ef3c2 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 15a577d80c..316c6bf44b 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 71bbf12ace..28a4300312 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 d20a1350ef..2626db13cd 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 0669127210..e77128e9f1 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 ff928dc2ad..491ebf45fb 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 3912c85680..6311c382c5 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 c2c75a1956..aa5a03deec 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 582f0f26bf..ecc0028db9 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 112c073abd..4a6cf98bed 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 0000000000..12e430409c --- /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 63559bdeee..48d612dffc 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 f38283aa73..25de06c847 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 3f96488a0a..62873ee380 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 86989748d7..54e03b0470 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 ddda5712c5..56ef42216a 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 5b4f9c8ed4..491c00f3ac 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 7e501764a4..b6a99baf94 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 48bb7d3238..e8b234cb89 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 624e30bdef..a19b53fbb3 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 9f554cfea8..c74e9ee75e 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 7ab4afa0ae..2c94c092d4 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 f7bbd92cf2..01cbb5888a 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 844bd3aadc..bc26dcae45 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 ef5a20024a..25186e08e6 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 cf256098f1..84be19f71c 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 58b549b6c4..384333581b 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 45618d4f24..6982d6316f 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 6bab775b8c..43c2ce2a8b 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 d7b4324453..7eaab01eff 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 7dc9b32332..491dbce0aa 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 91c06cdfcc..d6cffa7a44 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 64cf87fb5c..048eb03069 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 da2f37e9f9..76b92ec995 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 fa1d70d5c3..0f0e41fa7d 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 efbcc08576..188d103ba9 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 00dc858d0c..c86ba0dc22 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 05e09f565d..2cee91e6bd 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 f39e3f3358..b142cc60e5 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 0a50208cd1..88c50a0173 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 df47c8b12e..7496b53b44 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 401c482f3a..760c8501cc 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 99ac40d84f..5f77725670 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 0000000000..80594e2182 --- /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 4b70bbb158..73fc6ba01a 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 3756b0455e..3f40aad870 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 0725c425af..a64a4a9205 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 91a19acc31..93eac00972 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 0000000000..c0e6eb300e --- /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 52b56e4926..739ede4b0a 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 c6ff5a7722..4eb82a97ef 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 09c885fb92..f88719c381 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 8787a14254..522b96f0da 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 944ec02b87..3456e43ab5 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 ce464e83d9..204c2fff60 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 143f1a9b64..7485c2c4c3 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 e31e829421..612c17d888 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 9548a1f483..d1a781d6b7 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 7bc5c392f4..70297f6448 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 fc5b4c41d6..e31090bffd 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 fa68b972f5..87634bf090 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 70496d1c19..a3561207d1 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 871b570b19..2260517ee3 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 3ed2c41efc..e286320a90 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 97899a6576..8b59b57a26 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 7bf4aa8a12..8bb0ebcf3a 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 f4fe8e1205..180c293e09 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 0da7e39468..31fee10064 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 a1abef1a4a..7e0c92f268 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 7ff1ee92e4..29d5bac57c 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 4977ed3e7c..9d8bf85e6f 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 ecbd4ccd3f..b18beede89 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 52c7a6595e..22f8aca32b 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 c2dd940dc2..1b1e1bf276 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 7e9d9deda2..11129fb071 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 ce78fa5d5d..2cd5ef9869 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 fa676fccdc..2f9ca52a54 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 6c5ec4593c..a11938472b 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 e8e40cf853..822ee1347f 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 dbb2ef4f02..0691fbbf07 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 0bb77f9c74..210bbbd3aa 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 25f4c3c729..55f64bfab9 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 9a9df5cb1f..8c6de24b25 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 c6c8d1d364..f40d78bb0f 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 1dc02d508e..216122525b 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 d491ca08e4..bfd1473ea0 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 98a133ee35..5d1695b336 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 774a231db7..2069d8f27e 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 dd2dd5c687..d2ce2f5b34 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 223fda13c1..97982e61e0 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 6543a83212..975018f164 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 28f25551cd..4030dc1819 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 9a8758d2dc..ef33fe16eb 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 b5a61610b4..23ab27acf3 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 63900b6b76..8bb43d898b 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 6ac4e78174..a3f5f7e002 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 37a18a37db..7edfccba5f 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 aa588d9e1a..50d6c15dfa 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 1471de3958..7ae89d5d6e 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 b55a05771e..ef3af2124f 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 58a456ed73..dfa98d7ea6 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 e570a5c9a3..6c648dd6bb 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 0b30f95e1c..d31a25b3d6 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 831cb321ef..08cb4abd72 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 d30b29b523..ad87c2e750 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 2349b1585a..ff036a5297 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 2b2941f84e..1196eae901 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 f2da9d954e..ed270c9ec9 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 2327fddcdc..3750160b05 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 383c277f39..325f8b2680 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 228e355751..174cfdd8ae 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 3c2ec6332a..41bb6cbfde 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 3575790261..ffe6c963b1 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 2607fe91d6..e12875d869 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 2dbcdf1f5d..bd53fc060c 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 efd3cfc76a..2af3f09822 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 07ec9711df..dd1df164fd 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 c3b47d0218..6ff6f01d7c 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 236d1c440d..6d44e6f144 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 bdd2da8b52..fc672c8127 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 b48e20b102..2a9502a0b1 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 ba64983012..199a7e5bc9 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 d5df476d95..7e22b7321a 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 5bf5f0eeae..ed594c9f2b 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 34e2302584..c4bfd4db38 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 116813958f..71a1fdd851 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 7f43f3cad1..27b28905ba 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 4d78195f13..caa5cd56e1 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 38525e98cd..1ea4c23222 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 054add4ee3..8cf2befc27 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 c8d4718c70..f5177139b4 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 52bfc6fbf8..243eaed1a3 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 a917936138..8fcb617449 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 e0d77dc516..ab84b358f5 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 c5acd29576..80391ba95f 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 2b03f6975b..8dac1ff825 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 beacf916bb..d2771abd84 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 83867f557d..1890bba507 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 fbec571ef8..99e3511917 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 a73cd2074d..639a773334 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 f366ddbd6c..b7e3b41009 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 31c396b54a..658f3e34c4 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 8a6782de88..0011e26199 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 09269676a8..87029724ed 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 1cef81e784..9d1dbf0723 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 47a8445d7c..105d9d309a 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 6e8a10b507..eb71989ed4 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 c05c393029..c81ed69189 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 34019c0263..353f0a8b69 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 7b5ec88331..6eaef6c0fc 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 0f86089aa6..ac2b760ef1 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 bf11063c3b..c506e55b0c 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 de412c9d7d..f8fb1aa474 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 1021ad1020..c3d3f2e5a5 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 6ff7d5aa51..54994ab6d1 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 2aa9ab2e6a..241af79c4a 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 afbd97b8e2..e55eea1703 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 085f1e3c3b..3648f59225 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 c44f6186ef..3a133ee509 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 a8c85ef8dc..45204541bc 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 1cefb94183..d6724c7891 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 70108f90a0..c1aea645f6 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 b618437abd..e36ebd9a80 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 347d64f844..037e474347 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 5c9faae7cd..b227becf95 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 d62ac1e665..8b37588291 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 f74d464d59..551dde0c26 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 57451e6999..4a5c290d8a 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 2ac6b2e004..17ba29394e 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 33be5d1020..9864ef391a 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 1a145a2d1c..158e6577f9 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 35366cb0a2..75d46b63df 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 f4f5d5397d..bd1114f85d 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 c124a64239..a6f9584722 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 5178209d27..19eeeac66e 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 2924b13c4a..37ce39335d 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 500533877a..0aa54f60a0 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 f635588c21..e1be1d889a 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 bafaa3aaad..263f90963b 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 19f23913ef..d5058e29f2 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 85e9074811..7d736e8f96 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 61fdcf0582..ccd7ac485d 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 cc0411068c..ccaa34a408 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 0a530cf9f3..81e0daecd6 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 cba9c0166e..c40a1660ba 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 952ed0b687..629e4a379a 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 b84e98098d..35b652d9b6 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 6274fca204..f4eeefc65a 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 65889607fa..0e4a594cea 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 349dccf4bf..4c6abaa965 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 a93abad310..a7cb29c05e 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 2f8b32394c..d9e99811f3 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 85bf215399..052782dc5c 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 18441f0a0d..7f976865b6 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 5b5b91280f..2ebd61f3a8 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 b0e8bb1a02..bda1295cf5 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 f37a2b6a65..7e93447531 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 ddd23abdfc..b34a493e51 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 94540aeda9..e23e94c66c 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 aa95d0a382..74c8811254 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 11c489c1f3..677f50e92c 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 5e3aac44b5..972fe36ea5 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 76a24798f3..3979f6e1f5 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 4b45e0cc46..7c2d1e24e4 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 1797210364..055a4b0913 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 f47a528242..f90fafc662 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 5e13e3b8e5..f7ee8a0ab8 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 e001f92a19..b1138899d7 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 d5e80dd536..0818bc9921 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 a36d356ce2..45f0172fb0 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 6b2099059f..e6d52768c4 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 8ee6ee5145..fc5fa5a99c 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 1bc5ecdbce..f61370a918 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 6a05195652..5c4c95c09d 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 460dc17d92..a1bb10078f 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 5641bb28b4..8c254bbab4 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 316288278f..d7f92f7925 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 87c7a8f541..9028568add 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 e2a5132a58..e232e796ff 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 16253218a5..00673c9632 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 8001d644a4..d7ef35df7c 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 a93bda776d..3ccd43f564 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 5103a4bc8c..664666a3bc 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 1efad8a239..9942f691ce 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 db9c6d6d10..d12656c097 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 6d276c7b96..880c4dd8d8 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 b5503a829f..cc8cebe719 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 9f846987ee..4087ada30e 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 41111db98c..691e6c028c 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 95ae7dd066..f09eea563c 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 abfe7c46d8..d021799fb9 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 2515853f59..bfeadad03d 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 6faef8b697..aec22a4ce3 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 22b395e346..dc10bba88a 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 30333535a4..bad28d4c9f 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 7c486ef8bf..b4793fdfb5 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 ee4842539b..aea87033e6 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 ad0960c7bb..c8a07428e0 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 beddd52aba..9c197ffaa4 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 744ad44fba..f117e6cbc2 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 65aedadb5a..60d97f6332 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 8d8f2bec54..803af3095f 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 c4566acbe2..8bad22cdd4 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 4f980357fd..2ecbedff0a 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 b0706cca71..982de47bcd 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 032928cda6..12d541bea2 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 a0b26eb8bc..06aa9d29a3 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 5d8c2a6b86..c4a345c475 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 61b280da9e..ef6e1872d3 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 cc58a77557..51b8d9bc76 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 a06213eb0c..67dcf2729c 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 baac4a2ade..2921e9ca88 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 a267ac9c81..235f65e7c7 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 efa181c953..5afb6d8e46 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 5341058c19..47e95b4372 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 4336971def..434be2778d 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 59adeef621..832f798d9a 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 f42c133765..ba1d9b7527 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 81d13438c0..1cfd47c3f6 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 6282ac40e1..a32ba6eca6 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 da729540ed..fafa4ad4d6 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 db5dab307f..be77efcd1e 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 cfa1be12e1..87ec58930f 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 276c952f40..48b353e72e 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 cbda505ff2..635c75b241 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 ac4a608098..98181d7301 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 b087554dd5..e478e86491 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 c353059efa..c34a31b23b 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 9e6ad3f49f..6684731950 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 658980082b..c7ebc378ad 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 c39b33a80d..39a37a2cf9 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 c7c8988b16..27c9803607 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 b85465ec81..012d6ebe8c 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 f18654cde5..d5c3534872 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 f3ee947837..080b8cee6b 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 def91d200e..a9dde82ae3 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 76b861f4be..d6f1aba74d 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 b7fe43b300..cc859755f7 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 769ef16a9a..386676dfe9 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 a7eba3971d..d43398d0b1 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 71e2e2dcdd..6cb39e2efa 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 4a696bfd28..a901dccc1c 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 872efeb412..5cfa0478a3 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 2b4522cd09..c7dcba79c0 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 fa5970e49a..ae416237f3 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 072605bc34..c16e8ab088 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 696b3c802a..dff0db175a 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 3a94b86114..9be1cb48c7 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 176c3a3649..1b9220a2da 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 3e07332499..298cd532e7 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 783a82ee27..df3496f394 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 ada2e6be7b..1a94e16b39 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 b8bdbfac50..a1f5c1b816 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 f0772933df..351ead5610 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 4020aaef71..863982e1a9 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 5657f341e1..256b41e388 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 0a21fcee2f..9518afff6f 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"