}) {
const { t } = useTranslation()
// if (typeof error === 'string') {
@@ -124,6 +121,3 @@ function ErrorMessage({ error }) {
return null // other errors are displayed elsewhere
}
}
-ErrorMessage.propTypes = {
- error: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired,
-}
diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-footer.jsx b/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-footer.tsx
similarity index 79%
rename from services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-footer.jsx
rename to services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-footer.tsx
index 3432d7b1b8..d1966f1b5d 100644
--- a/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-footer.jsx
+++ b/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-footer.tsx
@@ -2,7 +2,6 @@ import { useTranslation } from 'react-i18next'
import { useFileTreeCreateForm } from '../../contexts/file-tree-create-form'
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
import { useFileTreeData } from '../../../../shared/context/file-tree-data-context'
-import PropTypes from 'prop-types'
import OLButton from '@/features/ui/components/ol/ol-button'
import OLNotification from '@/features/ui/components/ol/ol-notification'
@@ -26,21 +25,33 @@ export function FileTreeModalCreateFileFooterContent({
valid,
fileCount,
inFlight,
- newFileCreateMode,
cancel,
+ newFileCreateMode,
+}: {
+ valid: boolean
+ fileCount:
+ | {
+ limit: number
+ status: string
+ value: number
+ }
+ | number
+ inFlight: boolean
+ cancel: () => void
+ newFileCreateMode?: string
}) {
const { t } = useTranslation()
return (
<>
- {fileCount.status === 'warning' && (
+ {typeof fileCount !== 'number' && fileCount.status === 'warning' && (
{t('project_approaching_file_limit')} ({fileCount.value}/
{fileCount.limit})
)}
- {fileCount.status === 'error' && (
+ {typeof fileCount !== 'number' && fileCount.status === 'error' && (
)
}
-FileTreeModalCreateFileFooterContent.propTypes = {
- cancel: PropTypes.func.isRequired,
- fileCount: PropTypes.shape({
- limit: PropTypes.number.isRequired,
- status: PropTypes.string.isRequired,
- value: PropTypes.number.isRequired,
- }).isRequired,
- inFlight: PropTypes.bool.isRequired,
- newFileCreateMode: PropTypes.string,
- valid: PropTypes.bool.isRequired,
-}
diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-mode.jsx b/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-mode.tsx
similarity index 75%
rename from services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-mode.jsx
rename to services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-mode.tsx
index 259dac3144..40a3d7ba9e 100644
--- a/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-mode.jsx
+++ b/services/web/frontend/js/features/file-tree/components/file-tree-create/file-tree-modal-create-file-mode.tsx
@@ -1,11 +1,18 @@
import classnames from 'classnames'
-import PropTypes from 'prop-types'
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
import * as eventTracking from '../../../../infrastructure/event-tracking'
import OLButton from '@/features/ui/components/ol/ol-button'
import MaterialIcon from '@/shared/components/material-icon'
-export default function FileTreeModalCreateFileMode({ mode, icon, label }) {
+export default function FileTreeModalCreateFileMode({
+ mode,
+ icon,
+ label,
+}: {
+ mode: string
+ icon: string
+ label: string
+}) {
const { newFileCreateMode, startCreatingFile } = useFileTreeActionable()
const handleClick = () => {
@@ -27,9 +34,3 @@ export default function FileTreeModalCreateFileMode({ mode, icon, label }) {
)
}
-
-FileTreeModalCreateFileMode.propTypes = {
- mode: PropTypes.string.isRequired,
- icon: PropTypes.string.isRequired,
- label: PropTypes.string.isRequired,
-}
diff --git a/services/web/frontend/js/features/file-tree/components/file-tree-draggable-preview-layer.jsx b/services/web/frontend/js/features/file-tree/components/file-tree-draggable-preview-layer.tsx
similarity index 74%
rename from services/web/frontend/js/features/file-tree/components/file-tree-draggable-preview-layer.jsx
rename to services/web/frontend/js/features/file-tree/components/file-tree-draggable-preview-layer.tsx
index fffc4f5ae1..e9076cc3c3 100644
--- a/services/web/frontend/js/features/file-tree/components/file-tree-draggable-preview-layer.jsx
+++ b/services/web/frontend/js/features/file-tree/components/file-tree-draggable-preview-layer.tsx
@@ -1,6 +1,6 @@
import { useRef } from 'react'
-import PropTypes from 'prop-types'
import classNames from 'classnames'
+import { XYCoord } from 'react-dnd'
// a custom component rendered on top of a draggable area that renders the
// dragged item. See
@@ -12,8 +12,13 @@ function FileTreeDraggablePreviewLayer({
isDragging,
item,
clientOffset,
+}: {
+ isOver: boolean
+ isDragging: boolean
+ item: { title: string }
+ clientOffset: XYCoord | null
}) {
- const ref = useRef()
+ const ref = useRef(null)
return (
{title}
}
-DraggablePreviewItem.propTypes = {
- title: PropTypes.string.isRequired,
-}
-
// makes the preview item follow the cursor.
// See https://react-dnd.github.io/react-dnd/docs/api/drag-layer-monitor
-function getItemStyle(clientOffset, containerOffset) {
+function getItemStyle(
+ clientOffset: XYCoord | null,
+ containerOffset: DOMRect | undefined
+) {
if (!containerOffset || !clientOffset) {
return {
display: 'none',
diff --git a/services/web/frontend/js/features/file-tree/components/modals/file-tree-modal-create-folder.jsx b/services/web/frontend/js/features/file-tree/components/modals/file-tree-modal-create-folder.tsx
similarity index 87%
rename from services/web/frontend/js/features/file-tree/components/modals/file-tree-modal-create-folder.jsx
rename to services/web/frontend/js/features/file-tree/components/modals/file-tree-modal-create-folder.tsx
index 850b603229..7342c1f752 100644
--- a/services/web/frontend/js/features/file-tree/components/modals/file-tree-modal-create-folder.jsx
+++ b/services/web/frontend/js/features/file-tree/components/modals/file-tree-modal-create-folder.tsx
@@ -1,5 +1,4 @@
-import { useEffect, useState } from 'react'
-import PropTypes from 'prop-types'
+import React, { useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { useRefWithAutoFocus } from '../../../../shared/hooks/use-ref-with-auto-focus'
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
@@ -109,19 +108,25 @@ function InputName({
validName,
setValidName,
handleCreateFolder,
+}: {
+ name: string
+ setName: (name: string) => void
+ validName: boolean
+ setValidName: (validName: boolean) => void
+ handleCreateFolder: () => void
}) {
- const { autoFocusedRef } = useRefWithAutoFocus()
+ const { autoFocusedRef } = useRefWithAutoFocus()
- function handleFocus(ev) {
+ function handleFocus(ev: React.FocusEvent) {
ev.target.setSelectionRange(0, -1)
}
- function handleChange(ev) {
+ function handleChange(ev: React.ChangeEvent) {
setValidName(isCleanFilename(ev.target.value.trim()))
setName(ev.target.value)
}
- function handleKeyDown(ev) {
+ function handleKeyDown(ev: React.KeyboardEvent) {
if (ev.key === 'Enter' && validName) {
handleCreateFolder()
}
@@ -140,12 +145,4 @@ function InputName({
)
}
-InputName.propTypes = {
- name: PropTypes.string.isRequired,
- setName: PropTypes.func.isRequired,
- validName: PropTypes.bool.isRequired,
- setValidName: PropTypes.func.isRequired,
- handleCreateFolder: PropTypes.func.isRequired,
-}
-
export default FileTreeModalCreateFolder