From 01f8b9e2240bb6761f90c636111365aed1894e9e Mon Sep 17 00:00:00 2001 From: yannis Date: Thu, 30 Apr 2026 12:38:54 +0300 Subject: [PATCH 01/33] intermediate commit to upgrade to latest coko libs --- .commitlintrc.js | 3 - .eslintignore | 4 - .eslintrc.js | 13 - .husky/commit-msg | 4 - .lintstagedrc.js | 3 - .prettierrc.js | 3 - .prettierrc.mjs | 3 + .renovaterc | 16 - .stylelintrc.js | 17 - .stylelintrc.mjs | 17 + babel.config.js | 9 - docker-compose.production.yml | 2 +- docker-compose.yml | 19 +- eslint.config.mjs | 10 + package.json | 18 +- packages/client/Dockerfile-development | 3 +- packages/client/Dockerfile-production | 6 +- packages/client/app/Pages.js | 2 +- packages/client/app/components/.eslintrc | 5 - packages/client/app/components/AdminPage.js | 6 +- packages/client/app/components/Menu.js | 7 +- .../app/components/NextPageButton/index.js | 1 - .../client/app/components/adminPageQueries.js | 2 +- .../asset-manager/src/AssetManagerPage.js | 155 +- .../src/queries/assetManagerSubscriptions.js | 61 +- .../asset-manager/src/queries/deleteFiles.js | 18 +- .../src/queries/getEntityAssets.js | 42 +- .../src/queries/getSpecificFiles.js | 15 +- .../asset-manager/src/queries/index.js | 16 +- .../asset-manager/src/queries/updateFile.js | 21 +- .../asset-manager/src/queries/uploadFiles.js | 21 +- .../asset-manager/src/ui/ActionButton.js | 3 +- .../asset-manager/src/ui/ActionSection.js | 4 +- .../asset-manager/src/ui/AssetManager.js | 7 +- .../components/asset-manager/src/ui/Button.js | 3 +- .../asset-manager/src/ui/FileDetails.js | 5 +- .../asset-manager/src/ui/FilesTable.js | 11 +- .../asset-manager/src/ui/IconButton.js | 3 +- .../asset-manager/src/ui/InfoItem.js | 13 +- .../components/asset-manager/src/ui/Loader.js | 1 - .../asset-manager/src/ui/Modal/Button.js | 3 +- .../asset-manager/src/ui/Modal/DialogModal.js | 3 +- .../asset-manager/src/ui/Modal/Icons.js | 2 - .../asset-manager/src/ui/Modal/Loading.js | 1 - .../src/ui/Modal/ModalContext.js | 1 + .../asset-manager/src/ui/Modal/ModalFooter.js | 1 - .../src/ui/Modal/ModalFooterDialog.js | 2 +- .../asset-manager/src/ui/Modal/ModalHeader.js | 1 - .../src/ui/Modal/ModalProvider.js | 5 +- .../asset-manager/src/ui/Modal/ModalRoot.js | 1 - .../asset-manager/src/ui/Modal/mimetypes.js | 4 +- .../asset-manager/src/ui/Modal/withModal.js | 1 - .../asset-manager/src/ui/UploadButton.js | 5 +- .../asset-manager/src/ui/UploadFilesButton.js | 3 + .../asset-manager/src/ui/helpers.js | 2 + .../component-ai-assistant/AiPDFDesigner.js | 16 +- .../component-ai-assistant/ChatBubble.js | 6 +- .../component-ai-assistant/ChatHistory.js | 9 +- .../component-ai-assistant/PromptsInput.js | 29 +- .../component-ai-assistant/SelectionBox.js | 29 +- .../component-ai-assistant/SendButton.js | 2 - .../components/Checkbox.js | 2 +- .../components/Editor.js | 30 +- .../hooks/CssAssistantContext.js | 14 +- .../hooks/useIncrementalTarget.js | 2 + .../component-ai-assistant/utils/constants.js | 2 + .../component-ai-assistant/utils/helpers.js | 2 + .../src/components/AuthorFeedbackForm.js | 5 +- .../src/components/ReadOnlyAuthorFeedback.js | 3 +- .../src/components/SubmittedStatus.js | 3 +- .../component-avatar/src/UserAvatar.js | 4 +- .../components/component-avatar/src/image.js | 1 - .../components/component-avatar/src/index.js | 1 - .../components/component-chat/src/Action.js | 3 +- .../app/components/component-chat/src/Chat.js | 5 +- .../src/ChatWaxEditor/ChatWaxEditorConfig.js | 1 + .../src/ChatWaxEditor/ChatWaxEditorLayout.js | 123 +- .../component-chat/src/ChatWaxEditor/index.js | 11 +- .../component-chat/src/EllipsisDropdown.js | 6 +- .../src/MentionsInput/MentionsInput.js | 5 +- .../src/MentionsInput/mentionSuggestion.js | 2 +- .../component-chat/src/MessageContainer.js | 3 +- .../src/Messages/ChatPostDropdown.js | 5 +- .../src/Messages/EditMessageModal.js | 4 +- .../Messages/IsolatedMessageWithDetails.js | 6 +- .../src/Messages/MessageRenderer.js | 2 + .../component-chat/src/Messages/Messages.js | 10 +- .../component-chat/src/Messages/queries.js | 2 +- .../src/SuperChatInput/EditorMention.js | 8 +- .../src/SuperChatInput/SuperChatInput.js | 14 +- .../src/SuperChatInput/ToolbarButton.js | 3 +- .../component-chat/src/VideoChat.js | 5 +- .../src/CMSPublishingCollectionPage.js | 3 +- .../src/article/ManuscriptMetadata.js | 3 +- .../src/article/article.js | 5 +- .../src/browser/DeleteIcon.js | 4 +- .../src/browser/FileBrowser.js | 4 +- .../src/browser/ModalMetadataReadOnly.js | 2 +- .../src/collection/CollectionForm.js | 12 +- .../src/collection/CollectionList.js | 15 +- .../src/collection/CollectionModalForm.js | 3 +- .../src/collection/CollectionTable.js | 3 +- .../src/collection/ui/Active.js | 3 +- .../src/collection/ui/Image.js | 6 +- .../src/collection/ui/ListManuscripts.js | 5 +- .../src/collection/ui/cmsSchema.js | 2 - .../src/collection/ui/journalSchema.js | 3 - .../src/components/PageHeader.js | 2 +- .../src/components/PublishStatus.js | 3 +- .../src/components/StaticTextInput.js | 3 +- .../src/editor/ContentWaxEditor.js | 10 +- .../src/editor/layout/ContentEditorLayout.js | 8 +- .../src/layout/Branding.js | 2 +- .../src/layout/Footer.js | 5 +- .../src/layout/Header.js | 3 +- .../src/layout/LayoutForm.js | 2 +- .../src/layout/PageOrder.js | 6 +- .../src/layout/PartnerListItem.js | 3 + .../src/layout/PartnerListing.js | 9 +- .../src/layout/SiteStatus.js | 5 +- .../src/pages/CMSPageEdit.js | 4 +- .../src/pages/CMSPageEditForm.js | 195 +- .../src/pages/CMSPageEditSidebar.js | 3 +- .../src/ConfigManagerForm.js | 19 +- .../src/ConfigManagerPage.js | 7 +- .../src/ui/BrandIcon.js | 8 +- .../src/ui/CoarAuthToken.js | 2 +- .../src/ui/DescriptionField.js | 3 +- .../src/ui/ListSubmissionFields.js | 4 +- .../component-config-manager/src/ui/schema.js | 1 - .../components/AcceptArticleOwnershipPage.js | 4 +- .../src/components/ControlPageLink.js | 4 +- .../src/components/DashboardEditsPage.js | 5 +- .../src/components/DashboardLayout.js | 4 +- .../src/components/DashboardReviewsPage.js | 5 +- .../components/DashboardSubmissionsPage.js | 5 +- .../components/DeclineArticleOwnershipPage.js | 4 +- .../src/components/InvitationAcceptedPage.js | 4 +- .../src/components/InvitationError.js | 2 +- .../src/components/metadata/Meta.js | 2 - .../src/components/sections/EditorTable.js | 4 +- .../src/components/sections/ReviewerTable.js | 4 +- .../components/sections/SubmissionsTable.js | 4 +- .../src/graphql/mutations/index.js | 2 +- .../graphql/mutations.js | 2 +- .../hooks/EmailTemplatesContext.js | 5 +- .../hooks/useEmailTemplates.js | 2 + .../components/HandleBarsAutocomplete.js | 11 +- .../components/Option.js | 2 - .../handlebarsAutocomplete/graphql/graphql.js | 2 +- .../src/components/FieldSettingsModal.js | 10 +- .../src/components/FormBuilder.js | 10 +- .../src/components/FormBuilderLayout.js | 6 +- .../src/components/FormBuilderPage.js | 5 +- .../src/components/FormCollaborativeWax.js | 5 +- .../src/components/FormSettingsModal.js | 9 +- .../src/components/FormSummary.js | 3 +- .../src/components/FormWaxEditor.js | 10 +- .../builderComponents/AbstractField.js | 1 - .../components/builderComponents/CheckBox.js | 1 - .../CollaborativeTextField.js | 8 +- .../builderComponents/FullWaxField.js | 1 - .../src/components/builderComponents/Menu.js | 3 - .../builderComponents/OptionsField.js | 8 +- .../components/builderComponents/RadioBox.js | 1 - .../builderComponents/RadioBoxS3Service.js | 5 +- .../components/builderComponents/TextArea.js | 2 - .../components/builderComponents/TextField.js | 1 - .../builderComponents/TextFieldShowHide.js | 6 +- .../ThreadedDiscussion/ThreadedComment.js | 8 +- .../ThreadedDiscussion/ThreadedDiscussion.js | 8 +- .../src/components/config/Elements.js | 2 +- .../src/components/index.js | 2 - .../component-formbuilder/src/index.js | 3 - .../component-frontpage/src/Frontpage.js | 2 +- .../component-frontpage/src/GroupPage.js | 4 +- .../src/PublishedArtifactWithLink.js | 4 +- .../component-frontpage/src/queries.js | 2 +- .../components/component-login/src/Login.js | 7 +- .../src/components/Manuscript.js | 3 +- .../src/components/ManuscriptPage.js | 8 +- .../src/components/index.js | 2 - .../component-manuscript/src/index.js | 7 - .../src/FilterSortHeader.js | 8 +- .../src/ManuscriptRow.js | 8 +- .../src/ManuscriptsTable.js | 5 +- .../src/cell-components/Actions.js | 4 +- .../src/cell-components/AuthorProofingLink.js | 4 +- .../src/cell-components/DefaultField.js | 3 +- .../src/cell-components/EditorItemLinks.js | 3 +- .../src/cell-components/Editors.js | 1 - .../cell-components/FilterableStatusBadge.js | 3 +- .../src/cell-components/LabelDropdown.js | 6 +- .../cell-components/LabelsOrSelectButton.js | 3 +- .../cell-components/LastReviewerUpdated.js | 3 +- .../src/cell-components/OverdueTooltip.js | 3 +- .../src/cell-components/ReviewStatusDonut.js | 11 +- .../src/cell-components/ReviewerItemLinks.js | 5 +- .../cell-components/ReviewerStatusBadge.js | 3 +- .../src/cell-components/RowItemCheckbox.js | 3 +- .../src/cell-components/StatusBadge.js | 3 +- .../src/cell-components/SubmitChevron.js | 3 +- .../src/cell-components/Submitter.js | 3 +- .../TitleWithAbstractAsTooltip.js | 3 +- .../src/cell-components/reviewStatusUtils.js | 3 - .../component-manuscripts-table/src/style.css | 2 + .../src/util/specialColumnProps.js | 2 + .../component-manuscripts/src/Manuscripts.js | 4 +- .../src/ManuscriptsPage.js | 7 +- .../src/SearchControl.js | 9 +- .../component-menu/components/NavItem.js | 4 +- .../component-menu/components/SubMenu.js | 4 +- .../components/UserComponent.js | 5 +- .../component-menu/styles/PinButton.js | 4 +- .../component-menu/styles/helpers.js | 2 + .../component-menu/styles/styleGlobals.js | 1 - .../component-modal/src/ConfirmationModal.js | 5 +- .../components/component-modal/src/Modal.js | 4 +- .../NotificationPage.js | 9 +- .../components/CustomInputs.js | 25 +- .../components/EditSection.js | 3 +- .../components/EventContent.js | 17 +- .../components/EventListControls.js | 3 +- .../components/EventsList.js | 3 +- .../hooks/useNotifications.js | 2 + .../misc/helpers.js | 2 + .../src/components/DownloadDropdown.js | 4 +- .../src/components/DownloadJats.js | 2 + .../src/components/DownloadPdf.js | 2 + .../src/components/FileRow.js | 2 +- .../src/components/Production.js | 12 +- .../src/components/ProductionPage.js | 227 +- .../VerifyPayloadModal/VerifyPayloadModal.js | 10 +- .../src/components/Versioning.js | 5 +- .../src/components/index.js | 2 - .../components/uploadManager/TagDropDown.js | 4 +- .../components/uploadManager/UploadAsset.js | 17 +- .../uploadManager/UploadComponent.js | 5 +- .../component-production/src/index.js | 7 - .../component-profile/src/ChangeEmail.js | 4 + .../component-profile/src/ChangeLanguage.js | 5 +- .../component-profile/src/ChangeUsername.js | 4 +- .../component-profile/src/EnterEmail.js | 6 +- .../component-profile/src/Profile.js | 7 +- .../component-profile/src/ProfilePage.js | 9 +- .../components/ArticleArtifactPage.js | 3 - .../components/artifactQuery.js | 2 +- .../components/index.js | 2 - .../component-published-artifact/index.js | 7 - .../src/ConcentricStepsChart.js | 4 +- .../src/DateRangePicker.js | 1 - .../component-reporting/src/DurationsChart.js | 3 +- .../component-reporting/src/Report.js | 5 +- .../component-reporting/src/ReportPage.js | 6 +- .../component-reporting/src/SparkBar.js | 1 - .../component-reporting/src/SummaryReport.js | 1 - .../component-reporting/src/Table.js | 1 - .../component-reporting/src/TableRow.js | 2 - .../component-reporting/src/Tooltip.js | 3 +- .../src/index.js | 7 +- .../src/components/DecisionPage.js | 8 +- .../src/components/DecisionVersion.js | 6 +- .../src/components/DecisionVersions.js | 3 + .../src/components/DeclinedReviewer.js | 4 +- .../src/components/InviteDeclineModal.js | 4 +- .../src/components/KanbanBoard.js | 10 +- .../src/components/Publish.js | 5 +- .../src/components/ReviewPage.js | 9 +- .../src/components/ReviewPreviewPage.js | 9 +- .../src/components/ReviewersDeclined.js | 4 +- .../assignAuthors/AssignAuthorForProofing.js | 2 + .../components/assignEditors/AssignEditor.js | 7 +- .../assignEditors/AssignEditorsReviewers.js | 3 +- .../src/components/coar/CoarMessages.js | 3 +- .../src/components/decision/DecisionReview.js | 5 +- .../components/decision/DecisionReviews.js | 3 +- .../src/components/decision/EditorSection.js | 176 +- .../components/decision/InvitationResults.js | 7 +- .../src/components/decision/ReviewHeading.js | 8 +- .../src/components/decision/Reviewer.js | 7 +- .../emailNotifications/SelectEmailTemplate.js | 5 +- .../emailNotifications/SelectReceiver.js | 3 +- .../components/emailNotifications/index.js | 4 +- .../metadata/ManuscriptFilesList.js | 5 +- .../components/metadata/ReadonlyFieldData.js | 6 +- .../metadata/ReadonlyFormTemplate.js | 6 +- .../src/components/publishing/Alert.js | 3 +- .../publishing/PublishingResponse.js | 3 +- .../src/components/review/Review.js | 5 +- .../src/components/review/ReviewLayout.js | 5 +- .../review/SharedReviewerGroupReviews.js | 3 +- .../src/components/review/util.js | 4 +- .../components/reviewPreview/ReviewPreview.js | 3 +- .../src/components/reviewSubscriptions.js | 1 - .../reviewers/DeleteInvitationModal.js | 3 +- .../reviewers/DeleteReviewerModal.js | 3 +- .../components/reviewers/InviteReviewer.js | 4 +- .../reviewers/InviteReviewerModal.js | 6 +- .../src/components/reviewers/KanbanCard.js | 4 +- .../src/components/reviewers/Reviewer.js | 8 +- .../src/components/reviewers/ReviewerForm.js | 5 +- .../src/components/reviewers/util.js | 1 - .../components/component-review/src/index.js | 7 - .../src/__tests__/aiFormFilling.test.js | 2 + .../src/components/AuthorsInput.js | 6 +- .../src/components/Confirm.js | 5 +- .../src/components/CreateANewVersion.js | 4 +- .../src/components/DecisionAndReviews.js | 4 +- .../src/components/FormTemplate.js | 24 +- .../src/components/LinksInput.js | 8 +- .../src/components/LocalContext.js | 4 +- .../src/components/MultipleDoi.js | 5 +- .../src/components/NewSubmissionPage.js | 2 +- .../src/components/SubmissionForm.js | 5 +- .../component-submit/src/components/Submit.js | 6 +- .../src/components/SubmitPage.js | 10 +- .../src/components/SupplementaryFiles.js | 3 +- .../src/components/UploadButton.js | 5 +- .../src/components/UploadManuscript.js | 16 +- .../src/components/ValidatedField.js | 5 +- .../components/assignEditors/AssignEditor.js | 5 +- .../assignEditors/AssignEditorsReviewers.js | 3 +- .../src/components/atoms/Columns.js | 2 - .../src/components/atoms/Icon.js | 4 +- .../hooks/useAuthorsInputQueries.js | 2 + .../component-submit/src/components/index.js | 2 - .../src/components/molecules/Accordion.js | 4 +- .../components/component-submit/src/index.js | 7 - .../components/component-submit/src/upload.js | 4 +- .../src/AssigneeDropdown.js | 5 +- .../src/DueDateField.js | 4 +- .../src/StatusDropdown.js | 3 +- .../component-task-manager/src/Task.js | 15 +- .../src/TaskEditModal.js | 10 +- .../component-task-manager/src/TaskList.js | 7 +- .../src/TaskNotificationDetails.js | 9 +- .../src/TasksTemplate.js | 3 +- .../src/TasksTemplatePage.js | 4 +- .../component-users-manager/src/User.js | 5 +- .../component-users-manager/src/UsersPage.js | 6 +- .../component-users-manager/src/UsersTable.js | 9 +- .../client/app/components/config/src/index.js | 2 + .../components/provider-yjs/YjsProvider.js | 2 - .../app/components/pubsweet/Accordion.js | 3 +- .../client/app/components/pubsweet/Action.js | 3 +- .../app/components/pubsweet/Attachment.js | 3 +- .../client/app/components/pubsweet/Avatar.js | 7 +- .../app/components/pubsweet/Checkbox.js | 4 +- .../app/components/pubsweet/CheckboxGroup.js | 2 +- .../app/components/pubsweet/Colorize.js | 3 +- .../app/components/pubsweet/Dropdown.js | 10 +- .../client/app/components/pubsweet/Icon.js | 3 +- .../client/app/components/pubsweet/Link.js | 3 +- .../app/components/pubsweet/PlainButton.js | 2 +- .../client/app/components/pubsweet/Radio.js | 3 +- .../app/components/pubsweet/RadioGroup.js | 2 +- .../client/app/components/pubsweet/Select.js | 2 +- .../client/app/components/pubsweet/Spinner.js | 3 +- .../app/components/pubsweet/TextArea.js | 3 +- .../app/components/pubsweet/TextField.js | 3 +- .../pubsweet/ValidatedFieldFormik.js | 4 +- .../app/components/shared/AccessErrorPage.js | 1 - .../client/app/components/shared/Accordion.js | 4 +- .../client/app/components/shared/Action.js | 4 +- .../app/components/shared/ActionButton.js | 8 +- .../client/app/components/shared/Alert.js | 1 - .../app/components/shared/Attachment.js | 1 - .../client/app/components/shared/Badge.js | 1 - .../app/components/shared/ChatCollapse.js | 4 +- .../client/app/components/shared/Checkbox.js | 4 +- .../app/components/shared/CheckboxGroup.js | 4 +- .../client/app/components/shared/Collapse.js | 1 - .../app/components/shared/ColorPicker.js | 2 +- .../app/components/shared/CommsErrorBanner.js | 3 +- .../app/components/shared/CounterField.js | 6 +- .../shared/CounterFieldWithOptions.js | 6 +- .../app/components/shared/DatePicker.js | 4 +- .../components/shared/DateRangeCalendar.js | 4 +- .../app/components/shared/DeleteControl.js | 3 +- .../app/components/shared/DescriptionList.js | 1 - .../client/app/components/shared/Divider.js | 2 - .../client/app/components/shared/Dropzone.js | 3 +- .../app/components/shared/ElasticTextInput.js | 7 +- .../app/components/shared/ErrorBoundary.js | 9 +- .../shared/FieldPublishingSelector.js | 5 +- .../app/components/shared/FilesUpload.js | 13 +- .../app/components/shared/HiddenTabs.js | 6 +- packages/client/app/components/shared/Icon.js | 6 +- .../client/app/components/shared/Icons.js | 2 +- .../app/components/shared/LabelBadge.js | 4 +- .../app/components/shared/MinimalButton.js | 3 +- .../components/shared/MinimalDatePicker.js | 8 +- .../components/shared/MinimalNumericUpDown.js | 7 +- .../app/components/shared/MinimalSelect.js | 17 +- .../app/components/shared/MinimalTextInput.js | 7 +- .../client/app/components/shared/PageError.js | 3 +- .../app/components/shared/Pagination.js | 3 +- .../app/components/shared/PlainOrRichText.js | 4 +- .../client/app/components/shared/Radio.js | 4 +- .../app/components/shared/RadioGroup.js | 4 +- .../app/components/shared/RichTextEditor.js | 1 - .../app/components/shared/RoundIconButton.js | 3 +- .../shared/SecondaryActionButton.js | 6 +- .../client/app/components/shared/Select.js | 18 +- .../client/app/components/shared/Spinner.js | 4 - packages/client/app/components/shared/Tabs.js | 6 +- packages/client/app/components/shared/Tag.js | 3 +- .../client/app/components/shared/TextInput.js | 4 +- .../app/components/shared/UploadingFile.js | 6 +- .../components/shared/UserActivityTracker.js | 7 +- .../app/components/shared/VersionSwitcher.js | 6 +- .../client/app/components/theme/src/index.js | 4 +- packages/client/app/components/utils.js | 1 - .../wax-collab/src/CollaborativeWax.js | 8 +- .../AnystyleService/AnyStyleService.js | 2 + .../AnyStyleToolGroupService/AnyStyle.js | 1 - .../AnystyleService/anyStyle.css | 6 +- .../components/AnyStyleButton.js | 2 +- .../plugins/anystylePlaceHolderPlugin.js | 1 - .../AnystyleService/replaceText.js | 4 +- .../CalloutService/CalloutTool.js | 5 +- .../components/CalloutComponent.js | 37 +- .../CalloutService/components/styles.js | 2 - .../CalloutService/helpers/index.js | 6 +- .../CalloutService/schema/callout.js | 4 +- .../CitationService/CitationService.js | 2 + .../CitationService/ReferenceTool.js | 3 +- .../components/CitationComponent.js | 37 +- .../components/CitationVersion.js | 12 +- .../CitationService/components/EditModal.js | 12 +- .../CitationService/components/styles.js | 2 - .../CitationService/helpers/index.js | 4 +- .../CitationService/plugins/citationPlugin.js | 2 +- .../CitationService/schema/reference.js | 5 +- .../JatsSideMenuToolGroupService/Icon.js | 1 - .../VerticalTabs.js | 3 + .../wax-collab/src/FullWaxEditor.js | 14 +- .../wax-collab/src/JatsTags/Abstract.js | 6 +- .../src/JatsTags/AcknowledgementSection.js | 5 +- .../wax-collab/src/JatsTags/Appendix.js | 6 +- .../wax-collab/src/JatsTags/FrontMatter.js | 6 +- .../src/JatsTags/citations/RefList.js | 6 +- .../src/JatsTags/funding/AwardId.js | 5 +- .../src/JatsTags/funding/FundingSource.js | 5 +- .../src/JatsTags/funding/FundingStatement.js | 5 +- .../src/JatsTags/glossary/GlossaryItem.js | 5 +- .../src/JatsTags/glossary/GlossarySection.js | 5 +- .../wax-collab/src/JatsTags/index.js | 20 +- .../src/JatsTags/keywords/KeywordList.js | 5 +- .../wax-collab/src/ProductionWaxEditor.js | 24 +- .../wax-collab/src/SimpleWaxEditor.js | 12 +- .../config/AuthorProofingWaxEditorConfig.js | 7 +- .../src/config/FullWaxEditorConfig.js | 4 +- .../src/config/ProductionWaxEditorConfig.js | 1 + .../src/config/SimpleWaxEditorConfig.js | 1 + .../wax-collab/src/config/yjsConfig.js | 1 - .../CommentsService/CommentsService.js | 2 + .../CommentsService/components/BoxList.js | 7 +- .../components/ConnectedComment.js | 8 +- .../components/ConnectedTrackChange.js | 8 +- .../CommentsService/components/RightArea.js | 9 +- .../components/ui/comments/CommentBox.js | 3 +- .../components/ui/comments/CommentBubble.js | 3 +- .../ui/comments/CommentBubbleComponent.js | 9 +- .../components/ui/comments/CommentItem.js | 3 +- .../components/ui/comments/CommentItemList.js | 5 +- .../components/ui/comments/CommentReply.js | 5 +- .../ui/trackChanges/HideShowTool.js | 4 +- .../ui/trackChanges/TrackChangeEnable.js | 4 +- .../ui/trackChanges/TrackChangesBox.js | 1 - .../plugins/CopyPasteCommentPlugin.js | 1 - .../layout/AuthorProofingWaxEditorLayout.js | 198 +- .../src/layout/FullWaxEditorCommentsLayout.js | 185 +- .../src/layout/FullWaxEditorLayout.js | 138 +- .../src/layout/ProductionWaxEditorLayout.js | 251 +- .../ProductionWaxEditorNoCommentsLayout.js | 174 +- .../src/layout/SimpleWaxEditorLayout.js | 60 +- .../components/xpub-with-context/src/index.js | 3 +- packages/client/app/dynamicFavicon.js | 4 + packages/client/app/globals.js | 1 - packages/client/app/hooks/dataTypeHooks.js | 12 +- packages/client/app/hooks/useAppScroller.js | 3 +- packages/client/app/hooks/useChat.js | 2 + packages/client/app/i18n.js | 2 + packages/client/app/i18n/es-la/translation.js | 1 - packages/client/app/i18nfuncs.js | 2 +- packages/client/app/queries/index.js | 2 +- .../client/app/queries/invitation/index.js | 2 +- packages/client/app/queries/team/index.js | 2 +- .../app/shared/__tests__/dateUtils.test.js | 2 + .../app/shared/__tests__/pruneEmpty.test.js | 2 + .../app/shared/__tests__/textUtils.test.js | 2 + .../app/shared/__tests__/urlUtils.test.js | 2 + packages/client/app/shared/commsUtils.js | 4 +- packages/client/app/shared/formValidation.js | 3 +- packages/client/app/shared/generalUtils.js | 1 + packages/client/app/shared/htmlUtils.js | 1 - packages/client/app/shared/icons/share.js | 2 - packages/client/app/shared/lightenBy.js | 3 + packages/client/app/shared/manuscriptUtils.js | 1 - .../client/app/shared/manuscript_versions.js | 1 - packages/client/app/shared/objectUtils.js | 2 +- packages/client/app/shared/prettyRoleText.js | 8 - packages/client/app/shared/pruneEmpty.js | 1 - packages/client/app/shared/textUtils.js | 1 - packages/client/app/sortAndGroup.js | 4 +- packages/client/app/theme/color.js | 3 + packages/client/app/theme/index.js | 1 - packages/client/app/utils/GlobalState.js | 25 +- packages/client/app/utils/useGlobalEvents.js | 8 +- packages/client/eslint.config.mjs | 5 + packages/client/package.json | 34 +- packages/client/yarn.lock | 24873 +++------------- packages/server/Dockerfile-development | 3 +- packages/server/Dockerfile-production | 3 +- .../graphql/anyStyle/anyStyle.resolvers.js | 2 +- .../server/api/graphql/flax/flax.resolvers.js | 2 +- .../server/api/graphql/form/form.resolvers.js | 1 - .../__tests__/manuscript.api.test.js | 2 + .../manuscript/manuscript.resolvers.js | 14 +- .../api/graphql/message/message.resolvers.js | 2 +- .../publishedArtifact.resolvers.js | 2 +- .../publishingCollection.resolvers.js | 2 +- .../server/api/graphql/user/user.resolvers.js | 2 +- .../server/api/rest/assetUpload/endpoint.js | 4 +- packages/server/api/rest/assetUpload/index.js | 2 - .../server/api/rest/cmsUpload/endpoint.js | 2 +- packages/server/api/rest/cmsUpload/index.js | 2 - packages/server/api/rest/coar/index.js | 2 - packages/server/api/rest/docmap/endpoint.js | 2 +- packages/server/api/rest/e2e/endpoints.js | 8 +- .../server/api/rest/profileUpload/endpoint.js | 5 +- .../server/api/rest/profileUpload/index.js | 2 - packages/server/builder.json | 15 + packages/server/config.ts | 259 + packages/server/config/components.js | 31 - .../config/custom-environment-variables.js | 129 - packages/server/config/default.js | 155 - packages/server/config/development.js | 3 - packages/server/config/jobHandlers/index.js | 10 - packages/server/config/journal/index.js | 7 - .../server/config/journal/recommendations.js | 17 - packages/server/config/journal/roles.js | 9 - packages/server/config/journal/tasks.json | 32 - packages/server/config/production.js | 12 - packages/server/config/test.js | 10 - packages/server/configSchema.ts | 160 + .../anyStyle/anyStyle.controllers.js | 17 +- .../controllers/anyStyle/anyStyleToHtml.js | 4 +- .../articleTemplates.controllers.js | 1 - .../controllers/assetUpload.controllers.js | 16 +- .../server/controllers/cms.controllers.js | 24 +- .../controllers/cmsUpload.controllers.js | 8 +- .../server/controllers/coar/announcement.js | 8 +- .../controllers/coar/coar.controllers.js | 4 +- packages/server/controllers/coar/crossRef.js | 5 +- packages/server/controllers/coar/dataCite.js | 1 + packages/server/controllers/coar/utils.js | 4 +- .../controllers/config/config.controllers.js | 8 +- .../server/controllers/config/configUtils.js | 5 +- .../controllers/emailTemplate.controllers.js | 1 + .../server/controllers/file.controllers.js | 37 +- .../server/controllers/flax.controllers.js | 11 +- .../server/controllers/form.controllers.js | 6 +- .../server/controllers/group.controllers.js | 4 +- .../manuscript/importManuscripts.js | 10 +- .../manuscript/manuscript.controllers.js | 66 +- .../controllers/manuscript/manuscriptUtils.js | 24 +- .../server/controllers/message.controllers.js | 1 - .../notificationUserOption.controllers.js | 2 +- .../controllers/openAi/openAi.controller.js | 4 +- .../server/controllers/orcid.controllers.js | 19 +- .../controllers/pdfExport.controllers.js | 20 +- .../controllers/profileUpload.controllers.js | 10 +- .../publishingCollection.controllers.js | 25 +- .../reference/__tests__/validation.test.js | 2 + .../reference/reference.controllers.js | 11 +- .../server/controllers/review.controllers.js | 7 +- .../server/controllers/task.controllers.js | 24 +- .../server/controllers/team.controllers.js | 4 +- .../threadedDiscussion.controllers.js | 33 +- .../server/controllers/user.controllers.js | 9 +- .../server/controllers/xsweet.controllers.js | 134 +- packages/server/eslint.config.mjs | 5 + packages/server/jobQueues.ts | 8 + ...roup-id-in-article-import-history-table.js | 18 +- .../articleTemplate/articleTemplate.model.js | 3 +- ...pdate-group-id-in-email-blacklist-table.js | 9 +- .../server/models/channel/channel.model.js | 1 - ...501200-update-group-id-in-channel-table.js | 9 +- ...orphaned-system-wide-discussion-channel.js | 7 +- .../1702624107-update-channel-groupId.js | 44 +- .../channelMember/channelMember.model.js | 2 - .../cmsFileTemplate/cmsFileTemplate.model.js | 1 - .../models/cmsLayout/cmsLayout.model.js | 1 - .../server/models/cmsPage/cmsPage.model.js | 1 - .../collaborativeDoc.model.js | 2 - .../1712847516-add-objectType-reviews.js | 2 +- .../config/__tests__/migrations.test.js | 14 +- packages/server/models/config/config.model.js | 5 +- .../1678694877-create-config-data-from-env.js | 16 +- ...79478-update-config-form-data-show-tabs.js | 6 +- ...8501140-update-group-id-in-config-table.js | 10 +- ...m-data-author-proofing-enabled-defaults.js | 10 +- ...014394-update-semantic-scholar-settings.js | 14 +- ...395-update-production-citation-settings.js | 8 +- .../1721833166-update-publishing-config.js | 2 +- .../1721833570-add-events-config-field.js | 4 +- ...r-and-group-manger-can-publish-defaults.js | 4 +- .../1748427621-migrate-gmail-to-smtp.js | 4 +- ...50273304-add-bcc-to-notification-config.js | 4 +- ...1757670017-activate-empty-notifications.js | 3 +- packages/server/models/docmap/docmap.model.js | 2 - ...1123430-update-group-id-in-docmap-table.js | 16 +- .../__tests__/migrations.test.js | 4 +- .../emailTemplate/emailTemplate.model.js | 5 +- ...97217-migrate_hardcoded_email_templates.js | 113 +- ...update-group-id-in-email-template-table.js | 9 +- ...9578904-remove-orphaned-email-templates.js | 18 +- .../1693195355-update-colab-emails.js | 2 +- ...986-add-author-proofing-email-templates.js | 10 +- ...default-author-proofing-email-templates.js | 10 +- ...add-collaborative-review-email-template.js | 9 +- packages/server/models/file/file.model.js | 2 - .../1649295531-migrate-files-old-to-files.js | 14 +- ...rds-with-no-such-key-found-in-s3-bucket.js | 2 +- packages/server/models/form/form.model.js | 1 - ...t-value-hide-from-reviewers-submit-form.js | 3 +- ...688501180-update-group-id-in-form-table.js | 10 +- ...268766-remove-improperly-defined-fields.js | 2 +- .../1705268777-rename-special-fields.js | 23 +- .../1707284350-populate-permitPublishing.js | 4 +- .../1768225975-use-built-in-gen-uuid.ts | 23 + packages/server/models/group/group.model.js | 7 +- ...0-create-group-from-env-or-brand-config.js | 10 +- .../server/models/identity/identity.model.js | 2 +- .../1581371297-migrate-users-to-identities.js | 3 +- .../models/invitation/invitation.model.js | 1 - .../__tests__/manuscript.model.test.js | 2 + .../manuscript/__tests__/migrations.test.js | 4 +- .../models/manuscript/manuscript.model.js | 54 +- ...ne-base64-in-source-to-inline-file-urls.js | 33 +- .../1674991816-fix-checkboxgroup-data.js | 38 +- ...160-update-group-id-in-manuscript-table.js | 10 +- ...uthor-feedback-data-in-manuscript-table.js | 17 +- .../1726216088-move-wax-comments.js | 6 +- .../server/models/message/message.model.js | 2 - .../notification/__tests__/migrations.test.js | 4 +- .../models/notification/notification.model.js | 34 +- .../notificationDigest.model.js | 5 +- ...9946-migrate_event_notifications_opt_in.js | 4 +- .../notificationUserOption.model.js | 2 - ...1678-migrate-evaluations-hypothesis-map.js | 14 +- .../publishedArtifact.model.js | 1 - .../review/__tests__/migrations.test.js | 4 +- .../1738163837-add-is-imported-column.js | 4 +- packages/server/models/review/review.model.js | 6 +- ...98941-add-tasks-to-selected-manuscripts.js | 22 +- ...688501220-update-group-id-in-task-table.js | 9 +- packages/server/models/task/task.model.js | 2 - .../taskEmailNotification.model.js | 2 - .../taskEmailNotificationLog.model.js | 3 +- ...13520-move-manuscript-to-generic-object.js | 11 +- ...270-update-object-id-group-manager-team.js | 11 +- ...0-create-user-team-and-populate-members.js | 19 +- ...5580-remove-orphaned-group-manager-team.js | 7 +- ...pdate-created-time-for-multiple-authors.js | 4 +- .../1724745602-clean-up-orphan-teams.js | 2 +- packages/server/models/team/team.model.js | 1 - ...5395014-clean-up-duplicate-team-members.js | 13 +- ...76232-move-group-manager-to-group-admin.js | 4 +- .../models/token/__tests__/migrations.test.js | 4 +- packages/server/models/token/token.model.js | 1 - .../user/__tests__/user.migrations.test.js | 12 +- packages/server/models/user/user.model.js | 6 +- packages/server/package.json | 6 +- packages/server/{config => }/permissions.js | 461 +- packages/server/scripts/clearAndSeed.js | 2 +- .../server/scripts/cypress/createToken.js | 2 - packages/server/scripts/cypress/seedForms.js | 2 - .../server/scripts/introspectionMatcher.js | 24 +- packages/server/scripts/resetDb.js | 6 - packages/server/scripts/seedCmsFiles.js | 12 +- packages/server/scripts/seedConfig.js | 2 - packages/server/scripts/seedForms.js | 2 - packages/server/scripts/seedFormsScript.js | 1 - packages/server/scripts/seedGroups.js | 7 +- .../services/emailNotifications.service.js | 6 +- .../server/services/handlebars.service.js | 1 - .../biorxiv-full-text-import.js | 2 +- .../services/importArticles/biorxiv-import.js | 5 +- .../importArticles/europepmc-import.js | 2 +- .../services/importArticles/pubmed-import.js | 8 +- .../jatsexport/___tests___/jatsUtils.test.js | 2 + .../jatsexport/___tests___/validation.test.js | 2 + .../server/services/jatsexport/jatsUtils.js | 4 +- .../services/jatsexport/makeCitations.js | 6 +- .../services/jatsexport/makeSvgsFromLatex.js | 8 +- .../services/jatsexport/makeZippedJats.js | 18 +- .../server/services/jatsexport/validation.js | 27 +- .../services/notification/sendNotification.js | 6 +- packages/server/services/plugins/broker.js | 4 +- .../services/plugins/doiExistenceChecker.js | 5 +- packages/server/services/plugins/imports.js | 3 +- packages/server/services/plugins/plugins.js | 3 +- .../services/publishing/astromat-ada/index.js | 4 +- .../services/publishing/crossref/index.js | 9 +- .../publishing/datacite/fieldsTransformers.js | 3 +- .../services/publishing/datacite/utils.js | 1 + .../server/services/publishing/doaj/index.js | 2 +- .../services/publishing/docmaps/index.js | 5 +- .../services/publishing/hypothesis/index.js | 4 +- .../server/services/queryCache.service.js | 7 +- .../server/services/yjsWebsocket/callback.js | 6 +- .../server/services/yjsWebsocket/utils.js | 8 +- .../services/yjsWebsocket/yjsWebsocket.js | 11 +- packages/server/{config => }/startup.js | 24 +- .../utils/__tests__/crossrefUtils.test.js | 2 + .../server/utils/__tests__/formatting.test.js | 2 + .../utils/__tests__/sanitizeWaxImages.test.js | 2 + .../utils/__tests__/searchUtils.test.js | 2 + .../utils/__tests__/validateApiToken.test.js | 2 + packages/server/utils/applyTemplate.js | 1 + packages/server/utils/crossrefCommsUtils.js | 55 +- packages/server/utils/dataciteCommusUtils.js | 17 +- packages/server/utils/encryptDecryptUtils.js | 2 +- packages/server/utils/fileStorageUtils.js | 2 - packages/server/utils/flattenObj.js | 2 +- packages/server/utils/generic.js | 1 + packages/server/utils/jobUtils.js | 34 +- packages/server/utils/objectUtils.js | 1 + .../utils/pdfTemplates/articleMetadata.js | 8 +- .../utils/pdfTemplates/publicationMetadata.js | 9 +- packages/server/utils/reference.js | 9 +- packages/server/utils/sanitizeWaxImages.js | 26 +- packages/server/utils/searchUtils.js | 15 +- packages/server/yarn.lock | 6000 ++-- scripts/updatePackageJson.js | 1 - yarn.lock | 21511 ++++--------- 739 files changed, 18434 insertions(+), 41892 deletions(-) delete mode 100644 .commitlintrc.js delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100755 .husky/commit-msg delete mode 100644 .lintstagedrc.js delete mode 100644 .prettierrc.js create mode 100644 .prettierrc.mjs delete mode 100644 .renovaterc delete mode 100644 .stylelintrc.js create mode 100644 .stylelintrc.mjs delete mode 100644 babel.config.js create mode 100644 eslint.config.mjs delete mode 100644 packages/client/app/components/.eslintrc delete mode 100644 packages/client/app/components/component-formbuilder/src/index.js delete mode 100644 packages/client/app/components/component-manuscript/src/index.js delete mode 100644 packages/client/app/components/component-production/src/index.js delete mode 100644 packages/client/app/components/component-published-artifact/index.js delete mode 100644 packages/client/app/components/component-review/src/index.js delete mode 100644 packages/client/app/components/component-submit/src/index.js delete mode 100644 packages/client/app/shared/prettyRoleText.js create mode 100644 packages/client/eslint.config.mjs create mode 100644 packages/server/builder.json create mode 100644 packages/server/config.ts delete mode 100644 packages/server/config/components.js delete mode 100644 packages/server/config/custom-environment-variables.js delete mode 100644 packages/server/config/default.js delete mode 100644 packages/server/config/development.js delete mode 100644 packages/server/config/jobHandlers/index.js delete mode 100644 packages/server/config/journal/index.js delete mode 100644 packages/server/config/journal/recommendations.js delete mode 100644 packages/server/config/journal/roles.js delete mode 100644 packages/server/config/journal/tasks.json delete mode 100644 packages/server/config/production.js delete mode 100644 packages/server/config/test.js create mode 100644 packages/server/configSchema.ts create mode 100644 packages/server/eslint.config.mjs create mode 100644 packages/server/jobQueues.ts create mode 100644 packages/server/models/form/migrations/1768225975-use-built-in-gen-uuid.ts rename packages/server/{config => }/permissions.js (70%) rename packages/server/{config => }/startup.js (56%) diff --git a/.commitlintrc.js b/.commitlintrc.js deleted file mode 100644 index 98ee7dfc2..000000000 --- a/.commitlintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['@commitlint/config-conventional'], -} diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index e505490a9..000000000 --- a/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -packages/devdocs/.docusaurus -packages/devdocs/build -packages/server/scripts/local diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 1d5f9099d..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -const { eslint } = require('@coko/lint') - -// Added parserOptions to remove the @decorators issues -eslint.parserOptions = { - ecmaVersion: 6, - ecmaFeatures: { - legacyDecorators: true, - experimentalObjectRestSpread: true, - }, -} -eslint.rules['react/jsx-props-no-spreading'] = 0 - -module.exports = eslint diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100755 index 04bce2461..000000000 --- a/.husky/commit-msg +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -./node_modules/.bin/commitlint --edit diff --git a/.lintstagedrc.js b/.lintstagedrc.js deleted file mode 100644 index f067f2663..000000000 --- a/.lintstagedrc.js +++ /dev/null @@ -1,3 +0,0 @@ -const { lintstaged } = require('@coko/lint') - -module.exports = lintstaged diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index ef9d33916..000000000 --- a/.prettierrc.js +++ /dev/null @@ -1,3 +0,0 @@ -const { prettier } = require('@coko/lint') - -module.exports = prettier diff --git a/.prettierrc.mjs b/.prettierrc.mjs new file mode 100644 index 000000000..365a6aa0a --- /dev/null +++ b/.prettierrc.mjs @@ -0,0 +1,3 @@ +import { prettier } from '@coko/lint' + +export default prettier diff --git a/.renovaterc b/.renovaterc deleted file mode 100644 index 40eb80873..000000000 --- a/.renovaterc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "enabled": false, - "assignees": ["benwh"], - "labels": ["renovate"], - "rebaseWhen": "auto", - "automerge": true, - "semanticCommits": true, - "prConcurrentLimit": 10, - "major": { - "automerge": false - }, - "extends": [ - "config:base" - ] -} - diff --git a/.stylelintrc.js b/.stylelintrc.js deleted file mode 100644 index e1444b3fa..000000000 --- a/.stylelintrc.js +++ /dev/null @@ -1,17 +0,0 @@ -const { stylelint } = require('@coko/lint') - -stylelint.ignoreFiles = [ - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/JatsSideMenu.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/KotahiBlockDropDownToolGroupService/KotahiBlockDropDown.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/AnystyleService/AnyStyleToolGroupService/AnyStyle.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/AcknowledgementsGroup.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/AppendixGroup.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/CitationGroup.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/FrontMatterGroup.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/FundingGroup.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/GlossaryGroup.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/KeywordGroup.js', - 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/ListsService/ListToolGroupService/Lists.js', -] - -module.exports = stylelint diff --git a/.stylelintrc.mjs b/.stylelintrc.mjs new file mode 100644 index 000000000..c36237462 --- /dev/null +++ b/.stylelintrc.mjs @@ -0,0 +1,17 @@ +import { stylelint } from '@coko/lint' + +// stylelint.ignoreFiles = [ +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/JatsSideMenu.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/KotahiBlockDropDownToolGroupService/KotahiBlockDropDown.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/AnystyleService/AnyStyleToolGroupService/AnyStyle.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/AcknowledgementsGroup.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/AppendixGroup.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/CitationGroup.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/FrontMatterGroup.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/FundingGroup.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/GlossaryGroup.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/JatsSideMenuToolGroupService/menugroups/KeywordGroup.js', +// 'packages/client/app/components/wax-collab/src/CustomWaxToolGroups/ListsService/ListToolGroupService/Lists.js', +// ] + +export default stylelint diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 0a73c8131..000000000 --- a/babel.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - presets: ['@babel/preset-env', '@babel/preset-react'], - plugins: [ - ['@babel/plugin-proposal-decorators', { legacy: true }], - 'babel-plugin-parameter-decorator', - 'babel-plugin-styled-components', - ['@babel/plugin-proposal-class-properties', { loose: true }], - ], -} diff --git a/docker-compose.production.yml b/docker-compose.production.yml index 171a08947..6adf0c26c 100644 --- a/docker-compose.production.yml +++ b/docker-compose.production.yml @@ -19,7 +19,7 @@ services: - db - fileHosting ports: - - ${SERVER_PORT:-3000}:${SERVER_PORT:-3000} + - ${SERVER_PORT:-3000}:3000 - ${WS_YJS_SERVER_PORT:-5010}:${WS_YJS_SERVER_PORT:-5010} environment: - NODE_ENV=production diff --git a/docker-compose.yml b/docker-compose.yml index 3a55fba1e..76e6c39c6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: build: context: ./packages/client dockerfile: ./Dockerfile-development - command: ['node_modules/.bin/coko-client-dev-js'] + command: ['node_modules/.bin/coko-client-dev'] ports: - ${CLIENT_PORT:-4000}:${CLIENT_PORT:-4000} environment: @@ -37,10 +37,9 @@ services: ports: - ${SERVER_PORT:-3000}:3000 - ${WS_YJS_SERVER_PORT:-5010}:${WS_YJS_SERVER_PORT:-5010} - - ${INSPECTOR_PORT:-9229}:${INSPECTOR_PORT:-9229} + - ${INSPECTOR_PORT:-9229}:9229 environment: - NODE_ENV=development - - INSPECTOR_PORT=${INSPECTOR_PORT:-9229} - POSTGRES_USER=${POSTGRES_USER:-dev} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-password} - POSTGRES_DB=${POSTGRES_DB:-kotahi_dev} @@ -126,11 +125,17 @@ services: volumes: - ./packages/server/api:/home/node/app/api - ./packages/server/config:/home/node/app/config + - ./packages/server/config.ts:/home/node/app/config.ts + - ./packages/server/configSchema.ts:/home/node/app/configSchema.ts - ./packages/server/controllers:/home/node/app/controllers + - ./packages/server/jobQueues.ts:/home/node/app/jobQueues.ts - ./packages/server/models:/home/node/app/models + - ./packages/server/permissions.js:/home/node/app/permissions.js - ./packages/server/scripts:/home/node/app/scripts - ./packages/server/services:/home/node/app/services + - ./packages/server/startup.js:/home/node/app/startup.js - ./packages/server/utils:/home/node/app/utils + - ./packages/server/node_modules/@coko/server:/home/node/app/node_modules/@coko/server healthcheck: test: ['CMD-SHELL', 'curl --fail http://localhost:3000/healthcheck || exit 1'] @@ -158,7 +163,7 @@ services: - seccomp:unconfined db-pagedjs: - image: postgres:16-alpine + image: postgres:18 environment: - POSTGRES_USER=pagedjs_user_dev - POSTGRES_DB=pagedjs_dev @@ -181,14 +186,14 @@ services: - POSTGRES_PASSWORD=xsweet_user_password db-xsweet: - image: postgres:16-alpine + image: postgres:18 environment: - POSTGRES_DB=xsweet_dev - POSTGRES_USER=xsweet_user_dev - POSTGRES_PASSWORD=xsweet_user_password db: - image: postgres:16-alpine + image: postgres:18 ports: - ${POSTGRES_PORT:-5432}:5432 environment: @@ -247,7 +252,7 @@ services: - POSTGRES_PASSWORD=anystyle_user_password db-anystyle: - image: postgres:16-alpine + image: postgres:18 environment: - POSTGRES_USER=anystyle_user_dev - POSTGRES_DB=anystyle_dev diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..f3f04c796 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,10 @@ +import { defineEslintConfig, rootEslintConfig } from '@coko/lint' + +const config = defineEslintConfig(rootEslintConfig) + +const extraIgnores = ['./packages/devdocs/'] + +const globalIgnoresObject = config.find(o => o.name?.includes('globalIgnores')) +globalIgnoresObject.ignores = [...globalIgnoresObject.ignores, ...extraIgnores] + +export default config diff --git a/package.json b/package.json index 9ab36cdca..2b1536e7e 100644 --- a/package.json +++ b/package.json @@ -9,13 +9,7 @@ }, "license": "MIT", "scripts": { - "cz": "./node_modules/.bin/lint-staged && ./node_modules/.bin/git-cz", - "storybook": "coko-storybook" - }, - "husky": { - "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS && lint-staged" - } + "commit": "yarn coko-lint commit" }, "config": { "commitizen": { @@ -23,20 +17,14 @@ } }, "resolutions": { - "glob": "7", - "postcss": "8", - "prettier": "2.8.8" + "glob": "7" }, "dependencies": { - "@babel/eslint-parser": "^7.24.1", - "@coko/lint": "^2.1.0", - "@coko/storybook": "^1.2.2", - "babel-plugin-parameter-decorator": "^1.0.16", + "@coko/lint": "^3.0.0-alpha.29", "color": "^4.2.3", "cypress": "^13.8.0", "dotenv": "^16.4.1", "dotenv-cli": "^4.0.0", - "eslint-plugin-prettier": "^3.1.2", "jest": "^27.1.0" }, "packageManager": "yarn@4.9.2" diff --git a/packages/client/Dockerfile-development b/packages/client/Dockerfile-development index 9c895ef8e..f4c6b6c10 100644 --- a/packages/client/Dockerfile-development +++ b/packages/client/Dockerfile-development @@ -1,5 +1,6 @@ -FROM cokoapps/base-dev:20 +FROM cokoapps/base-dev:24 +RUN corepack enable WORKDIR /home/node/app COPY .yarnrc.yml . diff --git a/packages/client/Dockerfile-production b/packages/client/Dockerfile-production index 53987dab9..df08c0f2f 100644 --- a/packages/client/Dockerfile-production +++ b/packages/client/Dockerfile-production @@ -1,7 +1,9 @@ ############################################################## # IMAGE FOR BUILDING -FROM cokoapps/base:20 +FROM cokoapps/base:24 + +RUN corepack enable ENV NODE_ENV='production' ENV CLIENT_STATIC_FOLDER_PATH=../public @@ -22,7 +24,7 @@ RUN yarn coko-client-build-js ############################################################## # IMAGE FOR RUNNING -FROM cokoapps/base:20 +FROM cokoapps/base:24 WORKDIR /home/node/app diff --git a/packages/client/app/Pages.js b/packages/client/app/Pages.js index 2a7be7d95..3b9b8478e 100644 --- a/packages/client/app/Pages.js +++ b/packages/client/app/Pages.js @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react' +import { useEffect } from 'react' import { Route, Switch, useLocation, Redirect } from 'react-router-dom' import styled from 'styled-components' import { useQuery } from '@apollo/client' diff --git a/packages/client/app/components/.eslintrc b/packages/client/app/components/.eslintrc deleted file mode 100644 index 8df796991..000000000 --- a/packages/client/app/components/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "react/prop-types": 0 - } -} diff --git a/packages/client/app/components/AdminPage.js b/packages/client/app/components/AdminPage.js index 26beec12a..c288fcfef 100644 --- a/packages/client/app/components/AdminPage.js +++ b/packages/client/app/components/AdminPage.js @@ -1,7 +1,9 @@ +/* eslint-disable react-hooks/exhaustive-deps, react-hooks/immutability, react-hooks/refs */ + import { useApolloClient, useMutation, useQuery } from '@apollo/client' import { throttle } from 'lodash' import PropTypes from 'prop-types' -import React, { useContext, useEffect, useRef } from 'react' +import { useContext, useEffect, useRef } from 'react' import Modal from 'react-modal' import { matchPath, @@ -357,7 +359,7 @@ const AdminPage = () => { const throttledRefetch = throttle(refetch, 120000, { trailing: false }) // Triggered by captured events onClick and onKeyDown - const handleEvent = e => { + const handleEvent = () => { throttledRefetch() } diff --git a/packages/client/app/components/Menu.js b/packages/client/app/components/Menu.js index 7dba4b0f8..6eab48789 100644 --- a/packages/client/app/components/Menu.js +++ b/packages/client/app/components/Menu.js @@ -1,5 +1,4 @@ -/* eslint-disable react/jsx-handler-names */ -import React, { useState, useMemo } from 'react' +import { useState, useMemo } from 'react' import PropTypes from 'prop-types' import { useTranslation } from 'react-i18next' import { useMutation } from '@apollo/client' @@ -52,7 +51,7 @@ const Menu = ({ }, [menuIsMinimal, navLinkComponents]) const handlers = { - pinNavbar: e => { + pinNavbar: () => { updateMenuState({ variables: { expanded: !menuPinned } }) setMenuPinned(!menuPinned) }, @@ -112,7 +111,7 @@ const Menu = ({ Menu.propTypes = { className: PropTypes.string.isRequired, loginLink: PropTypes.string.isRequired, - navLinkComponents: PropTypes.arrayOf(PropTypes.object).isRequired, // eslint-disable-line react/forbid-prop-types + navLinkComponents: PropTypes.arrayOf(PropTypes.object).isRequired, user: PropTypes.oneOfType([PropTypes.object]), notice: PropTypes.node.isRequired, profileLink: PropTypes.string.isRequired, diff --git a/packages/client/app/components/NextPageButton/index.js b/packages/client/app/components/NextPageButton/index.js index 141c4e43e..921170304 100644 --- a/packages/client/app/components/NextPageButton/index.js +++ b/packages/client/app/components/NextPageButton/index.js @@ -1,6 +1,5 @@ import VisibilitySensor from 'react-visibility-sensor' import { Link } from 'react-router-dom' -import React from 'react' import PropTypes from 'prop-types' import { Spinner } from '../shared' import { HasNextPage, NextPageButton } from './style' diff --git a/packages/client/app/components/adminPageQueries.js b/packages/client/app/components/adminPageQueries.js index 3c1f9607a..cbea13265 100644 --- a/packages/client/app/components/adminPageQueries.js +++ b/packages/client/app/components/adminPageQueries.js @@ -1,4 +1,4 @@ -import gql from 'graphql-tag' +import { gql } from '@apollo/client' const QUERY = gql` query { diff --git a/packages/client/app/components/asset-manager/src/AssetManagerPage.js b/packages/client/app/components/asset-manager/src/AssetManagerPage.js index ce39d29ce..dcc37d319 100644 --- a/packages/client/app/components/asset-manager/src/AssetManagerPage.js +++ b/packages/client/app/components/asset-manager/src/AssetManagerPage.js @@ -1,122 +1,57 @@ -/* eslint-disable no-console */ -import React from 'react' -import { get } from 'lodash' -import { adopt } from 'react-adopt' +/* eslint-disable react/prop-types */ + import { AssetManager } from './ui' import { - getEntityFilesQuery, - getSpecificFilesQuery, - uploadFilesMutation, - deleteFilesMutation, - updateFileMutation, - filesUploadedSubscription, - filesDeletedSubscription, - fileUpdatedSubscription, + useGetEntityFiles, + useUploadFiles, + useDeleteFiles, + useUpdateFile, + useFilesUploadedSubscription, + useFilesDeletedSubscription, + useFileUpdatedSubscription, } from './queries' -const mapper = { - getEntityFilesQuery, - getSpecificFilesQuery, - filesUploadedSubscription, - filesDeletedSubscription, - fileUpdatedSubscription, - uploadFilesMutation, - deleteFilesMutation, - updateFileMutation, -} - -const mapProps = args => ({ - files: get(args.getEntityFilesQuery, 'data.getEntityFiles'), - uploadFiles: (manuscriptId, files) => { - const { - uploadFilesMutation: { uploadFiles }, - } = args - - return uploadFiles({ - variables: { - files, - fileType: 'manuscriptImage', - entityId: manuscriptId, - }, - }) - }, - deleteFiles: ids => { - const { - deleteFilesMutation: { deleteFiles }, - } = args - - return deleteFiles({ - variables: { - ids, - }, - }) - }, - refetch: (manuscriptId, sortingParams) => { - const { - getEntityFilesQuery: { refetch }, - } = args - - refetch({ - input: { - entityId: manuscriptId, - sortingParams, - includeInUse: true, - }, - }) - }, - updateFile: (fileId, data) => { - const { - updateFileMutation: { updateFile }, - } = args - - return updateFile({ - variables: { - input: { - id: fileId, - ...data, - }, - }, - }) - }, - refetching: - args.getEntityFilesQuery.networkStatus === 4 || - args.getEntityFilesQuery.networkStatus === 2, // possible apollo bug - loading: args.getEntityFilesQuery.networkStatus === 1, -}) - -const Composed = adopt(mapper, mapProps) - const Connected = props => { const { data, isOpen, hideModal } = props const { manuscriptId, withImport, handleImport } = data + const { + data: filesData, + networkStatus, + refetch, + } = useGetEntityFiles(manuscriptId) + + const [uploadFiles] = useUploadFiles() + const [deleteFiles] = useDeleteFiles() + const [updateFile] = useUpdateFile() + + useFilesUploadedSubscription(refetch) + useFilesDeletedSubscription(refetch) + useFileUpdatedSubscription(refetch) + return ( - - {({ - deleteFiles, - files, - loading, - uploadFiles, - updateFile, - refetching, - refetch, - }) => ( - - )} - + deleteFiles({ variables: { ids } })} + files={filesData?.getEntityFiles} + handleImport={handleImport} + hideModal={hideModal} + isOpen={isOpen} + loading={networkStatus === 1} + manuscriptId={manuscriptId} + refetch={(id, sortingParams) => + refetch({ input: { entityId: id, sortingParams, includeInUse: true } }) + } + refetching={networkStatus === 4 || networkStatus === 2} + updateFile={(fileId, fileData) => + updateFile({ variables: { input: { id: fileId, ...fileData } } }) + } + uploadFiles={(id, files) => + uploadFiles({ + variables: { files, fileType: 'manuscriptImage', entityId: id }, + }) + } + withImport={withImport} + /> ) } diff --git a/packages/client/app/components/asset-manager/src/queries/assetManagerSubscriptions.js b/packages/client/app/components/asset-manager/src/queries/assetManagerSubscriptions.js index f7edb147f..3b1f340fb 100644 --- a/packages/client/app/components/asset-manager/src/queries/assetManagerSubscriptions.js +++ b/packages/client/app/components/asset-manager/src/queries/assetManagerSubscriptions.js @@ -1,6 +1,4 @@ -import React from 'react' -import { Subscription } from '@apollo/client/react/components' -import { gql } from '@apollo/client' +import { useSubscription, gql } from '@apollo/client' const FILES_UPLOADED_SUBSCRIPTION = gql` subscription FilesUploaded { @@ -22,59 +20,20 @@ const FILE_UPDATED_SUBSCRIPTION = gql` } ` -const filesUploadedSubscription = props => { - const { render, getEntityFilesQuery } = props - - const triggerRefetch = () => { - getEntityFilesQuery.refetch() - } - - return ( - - {render} - - ) +const useFilesUploadedSubscription = refetch => { + useSubscription(FILES_UPLOADED_SUBSCRIPTION, { onData: () => refetch() }) } -const filesDeletedSubscription = props => { - const { render, getEntityFilesQuery } = props - - const triggerRefetch = () => { - getEntityFilesQuery.refetch() - } - - return ( - - {render} - - ) +const useFilesDeletedSubscription = refetch => { + useSubscription(FILES_DELETED_SUBSCRIPTION, { onData: () => refetch() }) } -const fileUpdatedSubscription = props => { - const { render, getEntityFilesQuery } = props - - const triggerRefetch = () => { - getEntityFilesQuery.refetch() - } - - return ( - - {render} - - ) +const useFileUpdatedSubscription = refetch => { + useSubscription(FILE_UPDATED_SUBSCRIPTION, { onData: () => refetch() }) } export { - filesUploadedSubscription, - filesDeletedSubscription, - fileUpdatedSubscription, + useFilesUploadedSubscription, + useFilesDeletedSubscription, + useFileUpdatedSubscription, } diff --git a/packages/client/app/components/asset-manager/src/queries/deleteFiles.js b/packages/client/app/components/asset-manager/src/queries/deleteFiles.js index 5aa33a59b..9cee9c144 100644 --- a/packages/client/app/components/asset-manager/src/queries/deleteFiles.js +++ b/packages/client/app/components/asset-manager/src/queries/deleteFiles.js @@ -1,6 +1,4 @@ -import React from 'react' -import { Mutation } from '@apollo/client/react/components' -import { gql } from '@apollo/client' +import { useMutation, gql } from '@apollo/client' const DELETE_FILES = gql` mutation DeleteFiles($ids: [ID!]!) { @@ -8,16 +6,6 @@ const DELETE_FILES = gql` } ` -const deleteFilesMutation = props => { - const { render } = props +const useDeleteFiles = () => useMutation(DELETE_FILES) - return ( - - {(deleteFiles, deleteFilesResult) => - render({ deleteFiles, deleteFilesResult }) - } - - ) -} - -export default deleteFilesMutation +export default useDeleteFiles diff --git a/packages/client/app/components/asset-manager/src/queries/getEntityAssets.js b/packages/client/app/components/asset-manager/src/queries/getEntityAssets.js index 1b0ee2f2b..073840f93 100644 --- a/packages/client/app/components/asset-manager/src/queries/getEntityAssets.js +++ b/packages/client/app/components/asset-manager/src/queries/getEntityAssets.js @@ -1,6 +1,4 @@ -import React from 'react' -import { Query } from '@apollo/client/react/components' -import { gql } from '@apollo/client' +import { useQuery, gql } from '@apollo/client' const GET_ENTITY_FILES = gql` query GetEntityFilesQuery($input: EntityFilesInput) { @@ -28,28 +26,20 @@ const GET_ENTITY_FILES = gql` } ` -const getEntityFilesQuery = props => { - const { entityId, render } = props - - return ( - - {render} - - ) -} +const useGetEntityFiles = entityId => + useQuery(GET_ENTITY_FILES, { + fetchPolicy: 'cache-and-network', + variables: { + input: { + entityId, + sortingParams: [ + { key: 'name', order: 'asc' }, + { key: 'updated', order: 'asc' }, + ], + includeInUse: true, + }, + }, + }) export { GET_ENTITY_FILES } -export default getEntityFilesQuery +export default useGetEntityFiles diff --git a/packages/client/app/components/asset-manager/src/queries/getSpecificFiles.js b/packages/client/app/components/asset-manager/src/queries/getSpecificFiles.js index fc389d9de..0450fd815 100644 --- a/packages/client/app/components/asset-manager/src/queries/getSpecificFiles.js +++ b/packages/client/app/components/asset-manager/src/queries/getSpecificFiles.js @@ -1,5 +1,4 @@ -import React from 'react' -import { ApolloConsumer, gql } from '@apollo/client' +import { useApolloClient, gql } from '@apollo/client' const GET_SPECIFIC_FILES = gql` query GetSpecificFilesQuery($ids: [ID!]!) { @@ -26,14 +25,10 @@ const GET_SPECIFIC_FILES = gql` } ` -const getSpecificFilesQuery = props => { - const { render } = props - return ( - - {client => render({ client, query: GET_SPECIFIC_FILES })} - - ) +const useGetSpecificFiles = () => { + const client = useApolloClient() + return { client, query: GET_SPECIFIC_FILES } } export { GET_SPECIFIC_FILES } -export default getSpecificFilesQuery +export default useGetSpecificFiles diff --git a/packages/client/app/components/asset-manager/src/queries/index.js b/packages/client/app/components/asset-manager/src/queries/index.js index a110a9c7e..e7b90aca1 100644 --- a/packages/client/app/components/asset-manager/src/queries/index.js +++ b/packages/client/app/components/asset-manager/src/queries/index.js @@ -1,11 +1,11 @@ -export { default as getEntityFilesQuery } from './getEntityAssets' -export { default as getSpecificFilesQuery } from './getSpecificFiles' -export { default as uploadFilesMutation } from './uploadFiles' -export { default as deleteFilesMutation } from './deleteFiles' -export { default as updateFileMutation } from './updateFile' +export { default as useGetEntityFiles } from './getEntityAssets' +export { default as useGetSpecificFiles, GET_SPECIFIC_FILES } from './getSpecificFiles' +export { default as useUploadFiles } from './uploadFiles' +export { default as useDeleteFiles } from './deleteFiles' +export { default as useUpdateFile } from './updateFile' export { - filesUploadedSubscription, - filesDeletedSubscription, - fileUpdatedSubscription, + useFilesUploadedSubscription, + useFilesDeletedSubscription, + useFileUpdatedSubscription, } from './assetManagerSubscriptions' diff --git a/packages/client/app/components/asset-manager/src/queries/updateFile.js b/packages/client/app/components/asset-manager/src/queries/updateFile.js index acd39d26c..b635e51c0 100644 --- a/packages/client/app/components/asset-manager/src/queries/updateFile.js +++ b/packages/client/app/components/asset-manager/src/queries/updateFile.js @@ -1,6 +1,4 @@ -import React from 'react' -import { Mutation } from '@apollo/client/react/components' -import { gql } from '@apollo/client' +import { useMutation, gql } from '@apollo/client' const UPDATE_FILE = gql` mutation UpdateFile($input: UpdateFileInput!) { @@ -10,19 +8,6 @@ const UPDATE_FILE = gql` } ` -const updateFileMutation = props => { - const { render } = props +const useUpdateFile = () => useMutation(UPDATE_FILE) - return ( - - {(updateFile, updateFileResult) => - render({ - updateFile, - updateFileResult, - }) - } - - ) -} - -export default updateFileMutation +export default useUpdateFile diff --git a/packages/client/app/components/asset-manager/src/queries/uploadFiles.js b/packages/client/app/components/asset-manager/src/queries/uploadFiles.js index ca6b148b0..30f0ff001 100644 --- a/packages/client/app/components/asset-manager/src/queries/uploadFiles.js +++ b/packages/client/app/components/asset-manager/src/queries/uploadFiles.js @@ -1,6 +1,4 @@ -import React from 'react' -import { Mutation } from '@apollo/client/react/components' -import { gql } from '@apollo/client' +import { useMutation, gql } from '@apollo/client' const UPLOAD_FILES = gql` mutation UploadFiles($files: [Upload]!, $fileType: String, $entityId: ID) { @@ -10,20 +8,7 @@ const UPLOAD_FILES = gql` } ` -const uploadFilesMutation = props => { - const { render } = props - - return ( - - {(uploadFiles, uploadFilesResult) => - render({ - uploadFiles, - uploadFilesResult, - }) - } - - ) -} +const useUploadFiles = () => useMutation(UPLOAD_FILES) export { UPLOAD_FILES } -export default uploadFilesMutation +export default useUploadFiles diff --git a/packages/client/app/components/asset-manager/src/ui/ActionButton.js b/packages/client/app/components/asset-manager/src/ui/ActionButton.js index 70b1d09ca..ef314b338 100644 --- a/packages/client/app/components/asset-manager/src/ui/ActionButton.js +++ b/packages/client/app/components/asset-manager/src/ui/ActionButton.js @@ -1,4 +1,5 @@ -import React from 'react' +/* eslint-disable react/prop-types */ + import styled from 'styled-components' import { th, darken } from '@coko/client' import { color } from '../../../../theme' diff --git a/packages/client/app/components/asset-manager/src/ui/ActionSection.js b/packages/client/app/components/asset-manager/src/ui/ActionSection.js index a51a671d7..97f9599fb 100644 --- a/packages/client/app/components/asset-manager/src/ui/ActionSection.js +++ b/packages/client/app/components/asset-manager/src/ui/ActionSection.js @@ -1,4 +1,6 @@ -import React, { Component } from 'react' +/* eslint-disable react/prop-types */ + +import { Component } from 'react' import styled from 'styled-components' import { th, darken, grid } from '@coko/client' diff --git a/packages/client/app/components/asset-manager/src/ui/AssetManager.js b/packages/client/app/components/asset-manager/src/ui/AssetManager.js index 0647078c2..da57df8ce 100644 --- a/packages/client/app/components/asset-manager/src/ui/AssetManager.js +++ b/packages/client/app/components/asset-manager/src/ui/AssetManager.js @@ -1,4 +1,7 @@ -import React, { Component } from 'react' +/* eslint-disable react/prop-types */ +/* eslint-disable promise/catch-or-return, promise/always-return */ + +import { Component } from 'react' import styled from 'styled-components' import { indexOf, forEach, find } from 'lodash' @@ -100,7 +103,7 @@ class AssetManager extends Component { toggleOrder(key) { const { refetch, manuscriptId } = this.props const { name, updated } = this.state - // eslint-disable-next-line + this.setState({ [key]: !this.state[key] }) refetch(manuscriptId, [ { key: 'name', order: name ? 'asc' : 'desc' }, diff --git a/packages/client/app/components/asset-manager/src/ui/Button.js b/packages/client/app/components/asset-manager/src/ui/Button.js index bf92e885d..bf922c794 100644 --- a/packages/client/app/components/asset-manager/src/ui/Button.js +++ b/packages/client/app/components/asset-manager/src/ui/Button.js @@ -1,6 +1,7 @@ +/* eslint-disable react/prop-types */ + /* stylelint-disable string-quotes */ -import React from 'react' import styled from 'styled-components' import { th } from '@coko/client' import { color } from '../../../../theme' diff --git a/packages/client/app/components/asset-manager/src/ui/FileDetails.js b/packages/client/app/components/asset-manager/src/ui/FileDetails.js index 6116686bc..8ab084f9c 100644 --- a/packages/client/app/components/asset-manager/src/ui/FileDetails.js +++ b/packages/client/app/components/asset-manager/src/ui/FileDetails.js @@ -1,4 +1,5 @@ -import React from 'react' +/* eslint-disable react/prop-types */ + import styled from 'styled-components' import { th } from '@coko/client' @@ -93,7 +94,7 @@ const FileDetails = ({ file, updateFile, closeHandler }) => {