mirror of
https://github.com/plankanban/planka.git
synced 2025-07-18 20:59:44 +02:00
parent
d627a5660a
commit
22ec8707ac
35 changed files with 179 additions and 161 deletions
|
@ -8,11 +8,11 @@ export const transformCard = (card) => ({
|
||||||
...(card.dueDate && {
|
...(card.dueDate && {
|
||||||
dueDate: new Date(card.dueDate),
|
dueDate: new Date(card.dueDate),
|
||||||
}),
|
}),
|
||||||
...(card.timer && {
|
...(card.stopwatch && {
|
||||||
timer: {
|
stopwatch: {
|
||||||
...card.timer,
|
...card.stopwatch,
|
||||||
...(card.timer.startedAt && {
|
...(card.stopwatch.startedAt && {
|
||||||
startedAt: new Date(card.timer.startedAt),
|
startedAt: new Date(card.stopwatch.startedAt),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
@ -23,11 +23,11 @@ export const transformCardData = (data) => ({
|
||||||
...(data.dueDate && {
|
...(data.dueDate && {
|
||||||
dueDate: data.dueDate.toISOString(),
|
dueDate: data.dueDate.toISOString(),
|
||||||
}),
|
}),
|
||||||
...(data.timer && {
|
...(data.stopwatch && {
|
||||||
timer: {
|
stopwatch: {
|
||||||
...data.timer,
|
...data.stopwatch,
|
||||||
...(data.timer.startedAt && {
|
...(data.stopwatch.startedAt && {
|
||||||
startedAt: data.timer.startedAt.toISOString(),
|
startedAt: data.stopwatch.startedAt.toISOString(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -9,7 +9,7 @@ import { useSteps } from '../../hooks';
|
||||||
import BoardMembershipsStep from '../BoardMembershipsStep';
|
import BoardMembershipsStep from '../BoardMembershipsStep';
|
||||||
import LabelsStep from '../LabelsStep';
|
import LabelsStep from '../LabelsStep';
|
||||||
import DueDateEditStep from '../DueDateEditStep';
|
import DueDateEditStep from '../DueDateEditStep';
|
||||||
import TimerEditStep from '../TimerEditStep';
|
import StopwatchEditStep from '../StopwatchEditStep';
|
||||||
import CardMoveStep from '../CardMoveStep';
|
import CardMoveStep from '../CardMoveStep';
|
||||||
import DeleteStep from '../DeleteStep';
|
import DeleteStep from '../DeleteStep';
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ const StepTypes = {
|
||||||
USERS: 'USERS',
|
USERS: 'USERS',
|
||||||
LABELS: 'LABELS',
|
LABELS: 'LABELS',
|
||||||
EDIT_DUE_DATE: 'EDIT_DUE_DATE',
|
EDIT_DUE_DATE: 'EDIT_DUE_DATE',
|
||||||
EDIT_TIMER: 'EDIT_TIMER',
|
EDIT_STOPWATCH: 'EDIT_STOPWATCH',
|
||||||
MOVE: 'MOVE',
|
MOVE: 'MOVE',
|
||||||
DELETE: 'DELETE',
|
DELETE: 'DELETE',
|
||||||
};
|
};
|
||||||
|
@ -68,8 +68,8 @@ const ActionsStep = React.memo(
|
||||||
openStep(StepTypes.EDIT_DUE_DATE);
|
openStep(StepTypes.EDIT_DUE_DATE);
|
||||||
}, [openStep]);
|
}, [openStep]);
|
||||||
|
|
||||||
const handleEditTimerClick = useCallback(() => {
|
const handleEditStopwatchClick = useCallback(() => {
|
||||||
openStep(StepTypes.EDIT_TIMER);
|
openStep(StepTypes.EDIT_STOPWATCH);
|
||||||
}, [openStep]);
|
}, [openStep]);
|
||||||
|
|
||||||
const handleMoveClick = useCallback(() => {
|
const handleMoveClick = useCallback(() => {
|
||||||
|
@ -89,10 +89,10 @@ const ActionsStep = React.memo(
|
||||||
[onUpdate],
|
[onUpdate],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleTimerUpdate = useCallback(
|
const handleStopwatchUpdate = useCallback(
|
||||||
(timer) => {
|
(stopwatch) => {
|
||||||
onUpdate({
|
onUpdate({
|
||||||
timer,
|
stopwatch,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[onUpdate],
|
[onUpdate],
|
||||||
|
@ -133,11 +133,11 @@ const ActionsStep = React.memo(
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case StepTypes.EDIT_TIMER:
|
case StepTypes.EDIT_STOPWATCH:
|
||||||
return (
|
return (
|
||||||
<TimerEditStep
|
<StopwatchEditStep
|
||||||
defaultValue={card.timer}
|
defaultValue={card.stopwatch}
|
||||||
onUpdate={handleTimerUpdate}
|
onUpdate={handleStopwatchUpdate}
|
||||||
onBack={handleBack}
|
onBack={handleBack}
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
/>
|
/>
|
||||||
|
@ -197,8 +197,8 @@ const ActionsStep = React.memo(
|
||||||
context: 'title',
|
context: 'title',
|
||||||
})}
|
})}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item className={styles.menuItem} onClick={handleEditTimerClick}>
|
<Menu.Item className={styles.menuItem} onClick={handleEditStopwatchClick}>
|
||||||
{t('action.editTimer', {
|
{t('action.editStopwatch', {
|
||||||
context: 'title',
|
context: 'title',
|
||||||
})}
|
})}
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { Link } from 'react-router-dom';
|
||||||
import { Draggable } from 'react-beautiful-dnd';
|
import { Draggable } from 'react-beautiful-dnd';
|
||||||
import { usePopup } from '../../lib/popup';
|
import { usePopup } from '../../lib/popup';
|
||||||
|
|
||||||
import { startTimer, stopTimer } from '../../utils/timer';
|
import { startStopwatch, stopStopwatch } from '../../utils/stopwatch';
|
||||||
import Paths from '../../constants/Paths';
|
import Paths from '../../constants/Paths';
|
||||||
import Tasks from './Tasks';
|
import Tasks from './Tasks';
|
||||||
import NameEdit from './NameEdit';
|
import NameEdit from './NameEdit';
|
||||||
|
@ -14,7 +14,7 @@ import ActionsStep from './ActionsStep';
|
||||||
import User from '../User';
|
import User from '../User';
|
||||||
import Label from '../Label';
|
import Label from '../Label';
|
||||||
import DueDate from '../DueDate';
|
import DueDate from '../DueDate';
|
||||||
import Timer from '../Timer';
|
import Stopwatch from '../Stopwatch';
|
||||||
|
|
||||||
import styles from './Card.module.scss';
|
import styles from './Card.module.scss';
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ const Card = React.memo(
|
||||||
index,
|
index,
|
||||||
name,
|
name,
|
||||||
dueDate,
|
dueDate,
|
||||||
timer,
|
stopwatch,
|
||||||
coverUrl,
|
coverUrl,
|
||||||
boardId,
|
boardId,
|
||||||
listId,
|
listId,
|
||||||
|
@ -60,15 +60,15 @@ const Card = React.memo(
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleToggleTimerClick = useCallback(
|
const handleToggleStopwatchClick = useCallback(
|
||||||
(event) => {
|
(event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
onUpdate({
|
onUpdate({
|
||||||
timer: timer.startedAt ? stopTimer(timer) : startTimer(timer),
|
stopwatch: stopwatch.startedAt ? stopStopwatch(stopwatch) : startStopwatch(stopwatch),
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[timer, onUpdate],
|
[stopwatch, onUpdate],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleNameUpdate = useCallback(
|
const handleNameUpdate = useCallback(
|
||||||
|
@ -104,7 +104,7 @@ const Card = React.memo(
|
||||||
)}
|
)}
|
||||||
<div className={styles.name}>{name}</div>
|
<div className={styles.name}>{name}</div>
|
||||||
{tasks.length > 0 && <Tasks items={tasks} />}
|
{tasks.length > 0 && <Tasks items={tasks} />}
|
||||||
{(dueDate || timer || notificationsTotal > 0) && (
|
{(dueDate || stopwatch || notificationsTotal > 0) && (
|
||||||
<span className={styles.attachments}>
|
<span className={styles.attachments}>
|
||||||
{notificationsTotal > 0 && (
|
{notificationsTotal > 0 && (
|
||||||
<span
|
<span
|
||||||
|
@ -122,14 +122,14 @@ const Card = React.memo(
|
||||||
<DueDate value={dueDate} size="tiny" />
|
<DueDate value={dueDate} size="tiny" />
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
{timer && (
|
{stopwatch && (
|
||||||
<span className={classNames(styles.attachment, styles.attachmentLeft)}>
|
<span className={classNames(styles.attachment, styles.attachmentLeft)}>
|
||||||
<Timer
|
<Stopwatch
|
||||||
as="span"
|
as="span"
|
||||||
startedAt={timer.startedAt}
|
startedAt={stopwatch.startedAt}
|
||||||
total={timer.total}
|
total={stopwatch.total}
|
||||||
size="tiny"
|
size="tiny"
|
||||||
onClick={canEdit ? handleToggleTimerClick : undefined}
|
onClick={canEdit ? handleToggleStopwatchClick : undefined}
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
|
@ -171,7 +171,7 @@ const Card = React.memo(
|
||||||
<ActionsPopup
|
<ActionsPopup
|
||||||
card={{
|
card={{
|
||||||
dueDate,
|
dueDate,
|
||||||
timer,
|
stopwatch,
|
||||||
boardId,
|
boardId,
|
||||||
listId,
|
listId,
|
||||||
projectId,
|
projectId,
|
||||||
|
@ -219,7 +219,7 @@ Card.propTypes = {
|
||||||
index: PropTypes.number.isRequired,
|
index: PropTypes.number.isRequired,
|
||||||
name: PropTypes.string.isRequired,
|
name: PropTypes.string.isRequired,
|
||||||
dueDate: PropTypes.instanceOf(Date),
|
dueDate: PropTypes.instanceOf(Date),
|
||||||
timer: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
stopwatch: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
||||||
coverUrl: PropTypes.string,
|
coverUrl: PropTypes.string,
|
||||||
boardId: PropTypes.string.isRequired,
|
boardId: PropTypes.string.isRequired,
|
||||||
listId: PropTypes.string.isRequired,
|
listId: PropTypes.string.isRequired,
|
||||||
|
@ -252,7 +252,7 @@ Card.propTypes = {
|
||||||
|
|
||||||
Card.defaultProps = {
|
Card.defaultProps = {
|
||||||
dueDate: undefined,
|
dueDate: undefined,
|
||||||
timer: undefined,
|
stopwatch: undefined,
|
||||||
coverUrl: undefined,
|
coverUrl: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import { Button, Grid, Icon, Modal } from 'semantic-ui-react';
|
||||||
import { usePopup } from '../../lib/popup';
|
import { usePopup } from '../../lib/popup';
|
||||||
import { Markdown } from '../../lib/custom-ui';
|
import { Markdown } from '../../lib/custom-ui';
|
||||||
|
|
||||||
import { startTimer, stopTimer } from '../../utils/timer';
|
import { startStopwatch, stopStopwatch } from '../../utils/stopwatch';
|
||||||
import NameField from './NameField';
|
import NameField from './NameField';
|
||||||
import DescriptionEdit from './DescriptionEdit';
|
import DescriptionEdit from './DescriptionEdit';
|
||||||
import Tasks from './Tasks';
|
import Tasks from './Tasks';
|
||||||
|
@ -17,11 +17,11 @@ import Activities from './Activities';
|
||||||
import User from '../User';
|
import User from '../User';
|
||||||
import Label from '../Label';
|
import Label from '../Label';
|
||||||
import DueDate from '../DueDate';
|
import DueDate from '../DueDate';
|
||||||
import Timer from '../Timer';
|
import Stopwatch from '../Stopwatch';
|
||||||
import BoardMembershipsStep from '../BoardMembershipsStep';
|
import BoardMembershipsStep from '../BoardMembershipsStep';
|
||||||
import LabelsStep from '../LabelsStep';
|
import LabelsStep from '../LabelsStep';
|
||||||
import DueDateEditStep from '../DueDateEditStep';
|
import DueDateEditStep from '../DueDateEditStep';
|
||||||
import TimerEditStep from '../TimerEditStep';
|
import StopwatchEditStep from '../StopwatchEditStep';
|
||||||
import CardMoveStep from '../CardMoveStep';
|
import CardMoveStep from '../CardMoveStep';
|
||||||
import DeleteStep from '../DeleteStep';
|
import DeleteStep from '../DeleteStep';
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ const CardModal = React.memo(
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
dueDate,
|
dueDate,
|
||||||
timer,
|
stopwatch,
|
||||||
isSubscribed,
|
isSubscribed,
|
||||||
isActivitiesFetching,
|
isActivitiesFetching,
|
||||||
isAllActivitiesFetched,
|
isAllActivitiesFetched,
|
||||||
|
@ -83,11 +83,11 @@ const CardModal = React.memo(
|
||||||
|
|
||||||
const isGalleryOpened = useRef(false);
|
const isGalleryOpened = useRef(false);
|
||||||
|
|
||||||
const handleToggleTimerClick = useCallback(() => {
|
const handleToggleStopwatchClick = useCallback(() => {
|
||||||
onUpdate({
|
onUpdate({
|
||||||
timer: timer.startedAt ? stopTimer(timer) : startTimer(timer),
|
stopwatch: stopwatch.startedAt ? stopStopwatch(stopwatch) : startStopwatch(stopwatch),
|
||||||
});
|
});
|
||||||
}, [timer, onUpdate]);
|
}, [stopwatch, onUpdate]);
|
||||||
|
|
||||||
const handleNameUpdate = useCallback(
|
const handleNameUpdate = useCallback(
|
||||||
(newName) => {
|
(newName) => {
|
||||||
|
@ -116,10 +116,10 @@ const CardModal = React.memo(
|
||||||
[onUpdate],
|
[onUpdate],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleTimerUpdate = useCallback(
|
const handleStopwatchUpdate = useCallback(
|
||||||
(newTimer) => {
|
(newStopwatch) => {
|
||||||
onUpdate({
|
onUpdate({
|
||||||
timer: newTimer,
|
stopwatch: newStopwatch,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[onUpdate],
|
[onUpdate],
|
||||||
|
@ -160,7 +160,7 @@ const CardModal = React.memo(
|
||||||
const BoardMembershipsPopup = usePopup(BoardMembershipsStep);
|
const BoardMembershipsPopup = usePopup(BoardMembershipsStep);
|
||||||
const LabelsPopup = usePopup(LabelsStep);
|
const LabelsPopup = usePopup(LabelsStep);
|
||||||
const DueDateEditPopup = usePopup(DueDateEditStep);
|
const DueDateEditPopup = usePopup(DueDateEditStep);
|
||||||
const TimerEditPopup = usePopup(TimerEditStep);
|
const StopwatchEditPopup = usePopup(StopwatchEditStep);
|
||||||
const CardMovePopup = usePopup(CardMoveStep);
|
const CardMovePopup = usePopup(CardMoveStep);
|
||||||
const DeletePopup = usePopup(DeleteStep);
|
const DeletePopup = usePopup(DeleteStep);
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ const CardModal = React.memo(
|
||||||
</Grid.Row>
|
</Grid.Row>
|
||||||
<Grid.Row className={styles.modalPadding}>
|
<Grid.Row className={styles.modalPadding}>
|
||||||
<Grid.Column width={canEdit ? 12 : 16} className={styles.contentPadding}>
|
<Grid.Column width={canEdit ? 12 : 16} className={styles.contentPadding}>
|
||||||
{(users.length > 0 || labels.length > 0 || dueDate || timer) && (
|
{(users.length > 0 || labels.length > 0 || dueDate || stopwatch) && (
|
||||||
<div className={styles.moduleWrapper}>
|
<div className={styles.moduleWrapper}>
|
||||||
{users.length > 0 && (
|
{users.length > 0 && (
|
||||||
<div className={styles.attachments}>
|
<div className={styles.attachments}>
|
||||||
|
@ -294,30 +294,33 @@ const CardModal = React.memo(
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{timer && (
|
{stopwatch && (
|
||||||
<div className={styles.attachments}>
|
<div className={styles.attachments}>
|
||||||
<div className={styles.text}>
|
<div className={styles.text}>
|
||||||
{t('common.timer', {
|
{t('common.stopwatch', {
|
||||||
context: 'title',
|
context: 'title',
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
<span className={styles.attachment}>
|
<span className={styles.attachment}>
|
||||||
{canEdit ? (
|
{canEdit ? (
|
||||||
<TimerEditPopup defaultValue={timer} onUpdate={handleTimerUpdate}>
|
<StopwatchEditPopup
|
||||||
<Timer startedAt={timer.startedAt} total={timer.total} />
|
defaultValue={stopwatch}
|
||||||
</TimerEditPopup>
|
onUpdate={handleStopwatchUpdate}
|
||||||
|
>
|
||||||
|
<Stopwatch startedAt={stopwatch.startedAt} total={stopwatch.total} />
|
||||||
|
</StopwatchEditPopup>
|
||||||
) : (
|
) : (
|
||||||
<Timer startedAt={timer.startedAt} total={timer.total} />
|
<Stopwatch startedAt={stopwatch.startedAt} total={stopwatch.total} />
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
{canEdit && (
|
{canEdit && (
|
||||||
<button
|
<button
|
||||||
onClick={handleToggleTimerClick}
|
onClick={handleToggleStopwatchClick}
|
||||||
type="button"
|
type="button"
|
||||||
className={classNames(styles.attachment, styles.dueDate)}
|
className={classNames(styles.attachment, styles.dueDate)}
|
||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
name={timer.startedAt ? 'pause' : 'play'}
|
name={stopwatch.startedAt ? 'pause' : 'play'}
|
||||||
size="small"
|
size="small"
|
||||||
className={styles.addAttachment}
|
className={styles.addAttachment}
|
||||||
/>
|
/>
|
||||||
|
@ -447,12 +450,12 @@ const CardModal = React.memo(
|
||||||
})}
|
})}
|
||||||
</Button>
|
</Button>
|
||||||
</DueDateEditPopup>
|
</DueDateEditPopup>
|
||||||
<TimerEditPopup defaultValue={timer} onUpdate={handleTimerUpdate}>
|
<StopwatchEditPopup defaultValue={stopwatch} onUpdate={handleStopwatchUpdate}>
|
||||||
<Button fluid className={styles.actionButton}>
|
<Button fluid className={styles.actionButton}>
|
||||||
<Icon name="clock outline" className={styles.actionIcon} />
|
<Icon name="clock outline" className={styles.actionIcon} />
|
||||||
{t('common.timer')}
|
{t('common.stopwatch')}
|
||||||
</Button>
|
</Button>
|
||||||
</TimerEditPopup>
|
</StopwatchEditPopup>
|
||||||
<AttachmentAddPopup onCreate={onAttachmentCreate}>
|
<AttachmentAddPopup onCreate={onAttachmentCreate}>
|
||||||
<Button fluid className={styles.actionButton}>
|
<Button fluid className={styles.actionButton}>
|
||||||
<Icon name="attach" className={styles.actionIcon} />
|
<Icon name="attach" className={styles.actionIcon} />
|
||||||
|
@ -524,7 +527,7 @@ CardModal.propTypes = {
|
||||||
name: PropTypes.string.isRequired,
|
name: PropTypes.string.isRequired,
|
||||||
description: PropTypes.string,
|
description: PropTypes.string,
|
||||||
dueDate: PropTypes.instanceOf(Date),
|
dueDate: PropTypes.instanceOf(Date),
|
||||||
timer: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
stopwatch: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
||||||
isSubscribed: PropTypes.bool.isRequired,
|
isSubscribed: PropTypes.bool.isRequired,
|
||||||
isActivitiesFetching: PropTypes.bool.isRequired,
|
isActivitiesFetching: PropTypes.bool.isRequired,
|
||||||
isAllActivitiesFetched: PropTypes.bool.isRequired,
|
isAllActivitiesFetched: PropTypes.bool.isRequired,
|
||||||
|
@ -577,7 +580,7 @@ CardModal.propTypes = {
|
||||||
CardModal.defaultProps = {
|
CardModal.defaultProps = {
|
||||||
description: undefined,
|
description: undefined,
|
||||||
dueDate: undefined,
|
dueDate: undefined,
|
||||||
timer: undefined,
|
stopwatch: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default CardModal;
|
export default CardModal;
|
||||||
|
|
|
@ -4,9 +4,9 @@ import PropTypes from 'prop-types';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useForceUpdate, usePrevious } from '../../lib/hooks';
|
import { useForceUpdate, usePrevious } from '../../lib/hooks';
|
||||||
|
|
||||||
import { formatTimer } from '../../utils/timer';
|
import { formatStopwatch } from '../../utils/stopwatch';
|
||||||
|
|
||||||
import styles from './Timer.module.scss';
|
import styles from './Stopwatch.module.scss';
|
||||||
|
|
||||||
const SIZES = {
|
const SIZES = {
|
||||||
TINY: 'tiny',
|
TINY: 'tiny',
|
||||||
|
@ -14,7 +14,7 @@ const SIZES = {
|
||||||
MEDIUM: 'medium',
|
MEDIUM: 'medium',
|
||||||
};
|
};
|
||||||
|
|
||||||
const Timer = React.memo(({ as, startedAt, total, size, isDisabled, onClick }) => {
|
const Stopwatch = React.memo(({ as, startedAt, total, size, isDisabled, onClick }) => {
|
||||||
const prevStartedAt = usePrevious(startedAt);
|
const prevStartedAt = usePrevious(startedAt);
|
||||||
const forceUpdate = useForceUpdate();
|
const forceUpdate = useForceUpdate();
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ const Timer = React.memo(({ as, startedAt, total, size, isDisabled, onClick }) =
|
||||||
onClick && styles.wrapperHoverable,
|
onClick && styles.wrapperHoverable,
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{formatTimer({ startedAt, total })}
|
{formatStopwatch({ startedAt, total })}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ const Timer = React.memo(({ as, startedAt, total, size, isDisabled, onClick }) =
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
Timer.propTypes = {
|
Stopwatch.propTypes = {
|
||||||
as: PropTypes.elementType,
|
as: PropTypes.elementType,
|
||||||
startedAt: PropTypes.instanceOf(Date),
|
startedAt: PropTypes.instanceOf(Date),
|
||||||
total: PropTypes.number.isRequired, // eslint-disable-line react/no-unused-prop-types
|
total: PropTypes.number.isRequired, // eslint-disable-line react/no-unused-prop-types
|
||||||
|
@ -80,7 +80,7 @@ Timer.propTypes = {
|
||||||
onClick: PropTypes.func,
|
onClick: PropTypes.func,
|
||||||
};
|
};
|
||||||
|
|
||||||
Timer.defaultProps = {
|
Stopwatch.defaultProps = {
|
||||||
as: 'button',
|
as: 'button',
|
||||||
startedAt: undefined,
|
startedAt: undefined,
|
||||||
size: SIZES.MEDIUM,
|
size: SIZES.MEDIUM,
|
||||||
|
@ -88,4 +88,4 @@ Timer.defaultProps = {
|
||||||
onClick: undefined,
|
onClick: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Timer;
|
export default Stopwatch;
|
3
client/src/components/Stopwatch/index.js
Normal file
3
client/src/components/Stopwatch/index.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import Stopwatch from './Stopwatch';
|
||||||
|
|
||||||
|
export default Stopwatch;
|
|
@ -7,12 +7,18 @@ import { useToggle } from '../../lib/hooks';
|
||||||
import { Input, Popup } from '../../lib/custom-ui';
|
import { Input, Popup } from '../../lib/custom-ui';
|
||||||
|
|
||||||
import { useForm } from '../../hooks';
|
import { useForm } from '../../hooks';
|
||||||
import { createTimer, getTimerParts, startTimer, stopTimer, updateTimer } from '../../utils/timer';
|
import {
|
||||||
|
createStopwatch,
|
||||||
|
getStopwatchParts,
|
||||||
|
startStopwatch,
|
||||||
|
stopStopwatch,
|
||||||
|
updateStopwatch,
|
||||||
|
} from '../../utils/stopwatch';
|
||||||
|
|
||||||
import styles from './TimerEditStep.module.scss';
|
import styles from './StopwatchEditStep.module.scss';
|
||||||
|
|
||||||
const createData = (timer) => {
|
const createData = (stopwatch) => {
|
||||||
if (!timer) {
|
if (!stopwatch) {
|
||||||
return {
|
return {
|
||||||
hours: '0',
|
hours: '0',
|
||||||
minutes: '0',
|
minutes: '0',
|
||||||
|
@ -20,7 +26,7 @@ const createData = (timer) => {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const { hours, minutes, seconds } = getTimerParts(timer);
|
const { hours, minutes, seconds } = getStopwatchParts(stopwatch);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hours: `${hours}`,
|
hours: `${hours}`,
|
||||||
|
@ -29,7 +35,7 @@ const createData = (timer) => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const TimerEditStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) => {
|
const StopwatchEditStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) => {
|
||||||
const [t] = useTranslation();
|
const [t] = useTranslation();
|
||||||
const [data, handleFieldChange, setData] = useForm(() => createData(defaultValue));
|
const [data, handleFieldChange, setData] = useForm(() => createData(defaultValue));
|
||||||
const [isEditing, toggleEditing] = useToggle();
|
const [isEditing, toggleEditing] = useToggle();
|
||||||
|
@ -39,12 +45,12 @@ const TimerEditStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) =
|
||||||
const secondsField = useRef(null);
|
const secondsField = useRef(null);
|
||||||
|
|
||||||
const handleStartClick = useCallback(() => {
|
const handleStartClick = useCallback(() => {
|
||||||
onUpdate(startTimer(defaultValue));
|
onUpdate(startStopwatch(defaultValue));
|
||||||
onClose();
|
onClose();
|
||||||
}, [defaultValue, onUpdate, onClose]);
|
}, [defaultValue, onUpdate, onClose]);
|
||||||
|
|
||||||
const handleStopClick = useCallback(() => {
|
const handleStopClick = useCallback(() => {
|
||||||
onUpdate(stopTimer(defaultValue));
|
onUpdate(stopStopwatch(defaultValue));
|
||||||
}, [defaultValue, onUpdate]);
|
}, [defaultValue, onUpdate]);
|
||||||
|
|
||||||
const handleClearClick = useCallback(() => {
|
const handleClearClick = useCallback(() => {
|
||||||
|
@ -83,11 +89,11 @@ const TimerEditStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) =
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defaultValue) {
|
if (defaultValue) {
|
||||||
if (!dequal(parts, getTimerParts(defaultValue))) {
|
if (!dequal(parts, getStopwatchParts(defaultValue))) {
|
||||||
onUpdate(updateTimer(defaultValue, parts));
|
onUpdate(updateStopwatch(defaultValue, parts));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
onUpdate(createTimer(parts));
|
onUpdate(createStopwatch(parts));
|
||||||
}
|
}
|
||||||
|
|
||||||
onClose();
|
onClose();
|
||||||
|
@ -102,7 +108,7 @@ const TimerEditStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) =
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Popup.Header onBack={onBack}>
|
<Popup.Header onBack={onBack}>
|
||||||
{t('common.editTimer', {
|
{t('common.editStopwatch', {
|
||||||
context: 'title',
|
context: 'title',
|
||||||
})}
|
})}
|
||||||
</Popup.Header>
|
</Popup.Header>
|
||||||
|
@ -171,16 +177,16 @@ const TimerEditStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) =
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
TimerEditStep.propTypes = {
|
StopwatchEditStep.propTypes = {
|
||||||
defaultValue: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
defaultValue: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
||||||
onUpdate: PropTypes.func.isRequired,
|
onUpdate: PropTypes.func.isRequired,
|
||||||
onBack: PropTypes.func,
|
onBack: PropTypes.func,
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
TimerEditStep.defaultProps = {
|
StopwatchEditStep.defaultProps = {
|
||||||
defaultValue: undefined,
|
defaultValue: undefined,
|
||||||
onBack: undefined,
|
onBack: undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default TimerEditStep;
|
export default StopwatchEditStep;
|
3
client/src/components/StopwatchEditStep/index.js
Normal file
3
client/src/components/StopwatchEditStep/index.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
import StopwatchEditStep from './StopwatchEditStep';
|
||||||
|
|
||||||
|
export default StopwatchEditStep;
|
|
@ -1,3 +0,0 @@
|
||||||
import Timer from './Timer';
|
|
||||||
|
|
||||||
export default Timer;
|
|
|
@ -1,3 +0,0 @@
|
||||||
import TimerEditStep from './TimerEditStep';
|
|
||||||
|
|
||||||
export default TimerEditStep;
|
|
|
@ -20,7 +20,7 @@ const makeMapStateToProps = () => {
|
||||||
const allLabels = selectors.selectLabelsForCurrentBoard(state);
|
const allLabels = selectors.selectLabelsForCurrentBoard(state);
|
||||||
const currentUserMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
|
const currentUserMembership = selectors.selectCurrentUserMembershipForCurrentBoard(state);
|
||||||
|
|
||||||
const { name, dueDate, timer, coverUrl, boardId, listId, isPersisted } = selectCardById(
|
const { name, dueDate, stopwatch, coverUrl, boardId, listId, isPersisted } = selectCardById(
|
||||||
state,
|
state,
|
||||||
id,
|
id,
|
||||||
);
|
);
|
||||||
|
@ -38,7 +38,7 @@ const makeMapStateToProps = () => {
|
||||||
index,
|
index,
|
||||||
name,
|
name,
|
||||||
dueDate,
|
dueDate,
|
||||||
timer,
|
stopwatch,
|
||||||
coverUrl,
|
coverUrl,
|
||||||
boardId,
|
boardId,
|
||||||
listId,
|
listId,
|
||||||
|
|
|
@ -21,7 +21,7 @@ const mapStateToProps = (state) => {
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
dueDate,
|
dueDate,
|
||||||
timer,
|
stopwatch,
|
||||||
isSubscribed,
|
isSubscribed,
|
||||||
isActivitiesFetching,
|
isActivitiesFetching,
|
||||||
isAllActivitiesFetched,
|
isAllActivitiesFetched,
|
||||||
|
@ -49,7 +49,7 @@ const mapStateToProps = (state) => {
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
dueDate,
|
dueDate,
|
||||||
timer,
|
stopwatch,
|
||||||
isSubscribed,
|
isSubscribed,
|
||||||
isActivitiesFetching,
|
isActivitiesFetching,
|
||||||
isAllActivitiesFetched,
|
isAllActivitiesFetched,
|
||||||
|
|
|
@ -76,7 +76,7 @@ export default {
|
||||||
editEmail_title: 'Upravit e-mail',
|
editEmail_title: 'Upravit e-mail',
|
||||||
editLabel_title: 'Upravit štítek',
|
editLabel_title: 'Upravit štítek',
|
||||||
editPassword_title: 'Upravit heslo',
|
editPassword_title: 'Upravit heslo',
|
||||||
editTimer_title: 'Upravit časovač',
|
editStopwatch_title: 'Upravit časovač',
|
||||||
editUsername_title: 'Upravit uživatelské jméno',
|
editUsername_title: 'Upravit uživatelské jméno',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail se již používá',
|
emailAlreadyInUse: 'E-mail se již používá',
|
||||||
|
@ -127,11 +127,11 @@ export default {
|
||||||
selectList: 'Vybrat seznam',
|
selectList: 'Vybrat seznam',
|
||||||
selectProject: 'Vybrat projekt',
|
selectProject: 'Vybrat projekt',
|
||||||
settings: 'Nastavení',
|
settings: 'Nastavení',
|
||||||
|
stopwatch: 'Časovač',
|
||||||
subscribeToMyOwnCardsByDefault: 'Ve výchozím nastavení odebírat vlastní karty',
|
subscribeToMyOwnCardsByDefault: 'Ve výchozím nastavení odebírat vlastní karty',
|
||||||
taskActions_title: 'Akce na úkolu',
|
taskActions_title: 'Akce na úkolu',
|
||||||
tasks: 'Úkoly',
|
tasks: 'Úkoly',
|
||||||
time: 'Čas',
|
time: 'Čas',
|
||||||
timer: 'Časovač',
|
|
||||||
title: 'Titulek',
|
title: 'Titulek',
|
||||||
userActions_title: 'Akce na uživateli',
|
userActions_title: 'Akce na uživateli',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> přidal kartu do {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> přidal kartu do {{list}}</1>',
|
||||||
|
@ -183,7 +183,7 @@ export default {
|
||||||
editDescription_title: 'Upravit popis',
|
editDescription_title: 'Upravit popis',
|
||||||
editEmail_title: 'Upravit e-mail',
|
editEmail_title: 'Upravit e-mail',
|
||||||
editPassword_title: 'Upravit heslo',
|
editPassword_title: 'Upravit heslo',
|
||||||
editTimer_title: 'Upravit časovač',
|
editStopwatch_title: 'Upravit časovač',
|
||||||
editTitle_title: 'Upravit titulek',
|
editTitle_title: 'Upravit titulek',
|
||||||
editUsername_title: 'Upravit uživatelské jméno',
|
editUsername_title: 'Upravit uživatelské jméno',
|
||||||
leaveBoard: 'Opustit tabuli',
|
leaveBoard: 'Opustit tabuli',
|
||||||
|
|
|
@ -75,7 +75,7 @@ export default {
|
||||||
editEmail_title: 'Ændre E-mail',
|
editEmail_title: 'Ændre E-mail',
|
||||||
editLabel_title: 'ændre mærkat',
|
editLabel_title: 'ændre mærkat',
|
||||||
editPassword_title: 'Ændre løsen',
|
editPassword_title: 'Ændre løsen',
|
||||||
editTimer_title: 'Ændre timer',
|
editStopwatch_title: 'Ændre timer',
|
||||||
editUsername_title: 'Ændre brugernavn',
|
editUsername_title: 'Ændre brugernavn',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail allerede i brug',
|
emailAlreadyInUse: 'E-mail allerede i brug',
|
||||||
|
@ -126,11 +126,11 @@ export default {
|
||||||
selectList: 'Vælg liste',
|
selectList: 'Vælg liste',
|
||||||
selectProject: 'Vælg projekt',
|
selectProject: 'Vælg projekt',
|
||||||
settings: 'Indstillinger',
|
settings: 'Indstillinger',
|
||||||
|
stopwatch: 'Tidsmåler',
|
||||||
subscribeToMyOwnCardsByDefault: 'Abonnér på egne kort som standard',
|
subscribeToMyOwnCardsByDefault: 'Abonnér på egne kort som standard',
|
||||||
taskActions_title: 'Opgave handlinger',
|
taskActions_title: 'Opgave handlinger',
|
||||||
tasks: 'Opgaver',
|
tasks: 'Opgaver',
|
||||||
time: 'Tid',
|
time: 'Tid',
|
||||||
timer: 'Tidsmåler',
|
|
||||||
title: 'Overskrift',
|
title: 'Overskrift',
|
||||||
userActions_title: 'Brugerhandlinger',
|
userActions_title: 'Brugerhandlinger',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> tilføjede kortet til {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> tilføjede kortet til {{list}}</1>',
|
||||||
|
@ -183,7 +183,7 @@ export default {
|
||||||
editDescription_title: 'Ændre beskrivelse',
|
editDescription_title: 'Ændre beskrivelse',
|
||||||
editEmail_title: 'Ændre e-mail',
|
editEmail_title: 'Ændre e-mail',
|
||||||
editPassword_title: 'Ændre Løsen',
|
editPassword_title: 'Ændre Løsen',
|
||||||
editTimer_title: 'Ændre tidstager',
|
editStopwatch_title: 'Ændre tidstager',
|
||||||
editTitle_title: 'Ændre overskrift',
|
editTitle_title: 'Ændre overskrift',
|
||||||
editUsername_title: 'Ændre brugernavn',
|
editUsername_title: 'Ændre brugernavn',
|
||||||
leaveBoard: 'Forlad bræt',
|
leaveBoard: 'Forlad bræt',
|
||||||
|
|
|
@ -82,7 +82,7 @@ export default {
|
||||||
editEmail_title: 'E-Mail-Adresse bearbeiten',
|
editEmail_title: 'E-Mail-Adresse bearbeiten',
|
||||||
editLabel_title: 'Label bearbeiten',
|
editLabel_title: 'Label bearbeiten',
|
||||||
editPassword_title: 'Passwort ändern',
|
editPassword_title: 'Passwort ändern',
|
||||||
editTimer_title: 'Timer bearbeiten',
|
editStopwatch_title: 'Stoppuhr bearbeiten',
|
||||||
editUsername_title: 'Benutzername ändern',
|
editUsername_title: 'Benutzername ändern',
|
||||||
email: 'E-Mail-Adresse',
|
email: 'E-Mail-Adresse',
|
||||||
emailAlreadyInUse: 'E-Mail-Adresse bereits in Verwendung',
|
emailAlreadyInUse: 'E-Mail-Adresse bereits in Verwendung',
|
||||||
|
@ -134,12 +134,12 @@ export default {
|
||||||
selectList: 'Liste auswählen',
|
selectList: 'Liste auswählen',
|
||||||
selectProject: 'Projekt auswählen',
|
selectProject: 'Projekt auswählen',
|
||||||
settings: 'Einstellungen',
|
settings: 'Einstellungen',
|
||||||
|
stopwatch: 'Stoppuhr',
|
||||||
subscribeToMyOwnCardsByDefault: 'Standardmäßig meine eigenen Karten abonnieren',
|
subscribeToMyOwnCardsByDefault: 'Standardmäßig meine eigenen Karten abonnieren',
|
||||||
taskActions_title: 'Aufgabenaktionen',
|
taskActions_title: 'Aufgabenaktionen',
|
||||||
tasks: 'Aufgaben',
|
tasks: 'Aufgaben',
|
||||||
thereIsNoPreviewAvailableForThisAttachment: 'Für diesen Anhang ist keine Vorschau verfügbar',
|
thereIsNoPreviewAvailableForThisAttachment: 'Für diesen Anhang ist keine Vorschau verfügbar',
|
||||||
time: 'Zeit',
|
time: 'Zeit',
|
||||||
timer: 'Timer',
|
|
||||||
title: 'Titel',
|
title: 'Titel',
|
||||||
userActions_title: 'Benutzeraktionen',
|
userActions_title: 'Benutzeraktionen',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> hat diese Karte hinzugefügt zu {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> hat diese Karte hinzugefügt zu {{list}}</1>',
|
||||||
|
@ -193,7 +193,7 @@ export default {
|
||||||
editDescription_title: 'Beschreibung ändern',
|
editDescription_title: 'Beschreibung ändern',
|
||||||
editEmail_title: 'E-Mail-Adresse bearbeiten',
|
editEmail_title: 'E-Mail-Adresse bearbeiten',
|
||||||
editPassword_title: 'Passwort ändern',
|
editPassword_title: 'Passwort ändern',
|
||||||
editTimer_title: 'Timer bearbeiten',
|
editStopwatch_title: 'Stoppuhr bearbeiten',
|
||||||
editTitle_title: 'Titel bearbeiten',
|
editTitle_title: 'Titel bearbeiten',
|
||||||
editUsername_title: 'Benutzername ändern',
|
editUsername_title: 'Benutzername ändern',
|
||||||
hideDetails: 'Details ausblenden',
|
hideDetails: 'Details ausblenden',
|
||||||
|
|
|
@ -80,7 +80,7 @@ export default {
|
||||||
editLabel_title: 'Edit Label',
|
editLabel_title: 'Edit Label',
|
||||||
editPassword_title: 'Edit Password',
|
editPassword_title: 'Edit Password',
|
||||||
editPermissions_title: 'Edit Permissions',
|
editPermissions_title: 'Edit Permissions',
|
||||||
editTimer_title: 'Edit Timer',
|
editStopwatch_title: 'Edit Stopwatch',
|
||||||
editUsername_title: 'Edit Username',
|
editUsername_title: 'Edit Username',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail already in use',
|
emailAlreadyInUse: 'E-mail already in use',
|
||||||
|
@ -138,13 +138,13 @@ export default {
|
||||||
selectPermissions_title: 'Select Permissions',
|
selectPermissions_title: 'Select Permissions',
|
||||||
selectProject: 'Select project',
|
selectProject: 'Select project',
|
||||||
settings: 'Settings',
|
settings: 'Settings',
|
||||||
|
stopwatch: 'Stopwatch',
|
||||||
subscribeToMyOwnCardsByDefault: 'Subscribe to my own cards by default',
|
subscribeToMyOwnCardsByDefault: 'Subscribe to my own cards by default',
|
||||||
taskActions_title: 'Task Actions',
|
taskActions_title: 'Task Actions',
|
||||||
tasks: 'Tasks',
|
tasks: 'Tasks',
|
||||||
thereIsNoPreviewAvailableForThisAttachment:
|
thereIsNoPreviewAvailableForThisAttachment:
|
||||||
'There is no preview available for this attachment',
|
'There is no preview available for this attachment',
|
||||||
time: 'Time',
|
time: 'Time',
|
||||||
timer: 'Timer',
|
|
||||||
title: 'Title',
|
title: 'Title',
|
||||||
userActions_title: 'User Actions',
|
userActions_title: 'User Actions',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> added this card to {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> added this card to {{list}}</1>',
|
||||||
|
@ -201,7 +201,7 @@ export default {
|
||||||
editInformation_title: 'Edit Information',
|
editInformation_title: 'Edit Information',
|
||||||
editPassword_title: 'Edit Password',
|
editPassword_title: 'Edit Password',
|
||||||
editPermissions: 'Edit permissions',
|
editPermissions: 'Edit permissions',
|
||||||
editTimer_title: 'Edit Timer',
|
editStopwatch_title: 'Edit Stopwatch',
|
||||||
editTitle_title: 'Edit Title',
|
editTitle_title: 'Edit Title',
|
||||||
editUsername_title: 'Edit Username',
|
editUsername_title: 'Edit Username',
|
||||||
hideDetails: 'Hide details',
|
hideDetails: 'Hide details',
|
||||||
|
|
|
@ -69,7 +69,7 @@ export default {
|
||||||
editEmail_title: 'Editar Correo',
|
editEmail_title: 'Editar Correo',
|
||||||
editLabel_title: 'Editar Etiqueta',
|
editLabel_title: 'Editar Etiqueta',
|
||||||
editPassword_title: 'Editar Contraseña',
|
editPassword_title: 'Editar Contraseña',
|
||||||
editTimer_title: 'Editar Temporizador',
|
editStopwatch_title: 'Editar Temporizador',
|
||||||
editUsername_title: 'Edit nombre de usuario',
|
editUsername_title: 'Edit nombre de usuario',
|
||||||
email: 'Correo',
|
email: 'Correo',
|
||||||
emailAlreadyInUse: 'El correo ya está en uso',
|
emailAlreadyInUse: 'El correo ya está en uso',
|
||||||
|
@ -115,11 +115,11 @@ export default {
|
||||||
selectList: 'Seleccionar Lista',
|
selectList: 'Seleccionar Lista',
|
||||||
selectProject: 'Seleccionar Proyecto',
|
selectProject: 'Seleccionar Proyecto',
|
||||||
settings: 'Configuraciones',
|
settings: 'Configuraciones',
|
||||||
|
stopwatch: 'Temporizador',
|
||||||
subscribeToMyOwnCardsByDefault: 'Suscribirme a mis propias tarjetas por defecto',
|
subscribeToMyOwnCardsByDefault: 'Suscribirme a mis propias tarjetas por defecto',
|
||||||
taskActions_title: 'Acciones de Tareas',
|
taskActions_title: 'Acciones de Tareas',
|
||||||
tasks: 'Tareas',
|
tasks: 'Tareas',
|
||||||
time: 'Tiempo',
|
time: 'Tiempo',
|
||||||
timer: 'Temporizador',
|
|
||||||
title: 'Título',
|
title: 'Título',
|
||||||
userActions_title: 'Acciones de Usuario',
|
userActions_title: 'Acciones de Usuario',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> añadido a esta tarjeta en {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> añadido a esta tarjeta en {{list}}</1>',
|
||||||
|
@ -172,7 +172,7 @@ export default {
|
||||||
editDescription_title: 'Editar Descripción',
|
editDescription_title: 'Editar Descripción',
|
||||||
editEmail_title: 'Editar Correo',
|
editEmail_title: 'Editar Correo',
|
||||||
editPassword_title: 'Editar Contraseña',
|
editPassword_title: 'Editar Contraseña',
|
||||||
editTimer_title: 'Edit Temporizador',
|
editStopwatch_title: 'Edit Temporizador',
|
||||||
editTitle_title: 'Edit Título',
|
editTitle_title: 'Edit Título',
|
||||||
editUsername_title: 'Editar Nombre de Usuario',
|
editUsername_title: 'Editar Nombre de Usuario',
|
||||||
logOut_title: 'Cerrar Sesión',
|
logOut_title: 'Cerrar Sesión',
|
||||||
|
|
|
@ -69,7 +69,7 @@ export default {
|
||||||
editEmail_title: "Modifier l'e-mail",
|
editEmail_title: "Modifier l'e-mail",
|
||||||
editLabel_title: "Modifier l'étiquette",
|
editLabel_title: "Modifier l'étiquette",
|
||||||
editPassword_title: 'Modifier le mot de passe',
|
editPassword_title: 'Modifier le mot de passe',
|
||||||
editTimer_title: 'Modifier la minuterie',
|
editStopwatch_title: 'Modifier la minuterie',
|
||||||
editUsername_title: "Modifier le nom d'utilisateur",
|
editUsername_title: "Modifier le nom d'utilisateur",
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'Email déjà utilisé',
|
emailAlreadyInUse: 'Email déjà utilisé',
|
||||||
|
@ -114,11 +114,11 @@ export default {
|
||||||
selectList: 'Sélectionner une liste',
|
selectList: 'Sélectionner une liste',
|
||||||
selectProject: 'Sélectionner un projet',
|
selectProject: 'Sélectionner un projet',
|
||||||
settings: 'Réglages',
|
settings: 'Réglages',
|
||||||
|
stopwatch: 'Minuteur',
|
||||||
subscribeToMyOwnCardsByDefault: 'Abonnez-vous à mes propres cartes par défaut',
|
subscribeToMyOwnCardsByDefault: 'Abonnez-vous à mes propres cartes par défaut',
|
||||||
taskActions_title: 'Actions de tâche',
|
taskActions_title: 'Actions de tâche',
|
||||||
tasks: 'Tâches',
|
tasks: 'Tâches',
|
||||||
time: 'Temps',
|
time: 'Temps',
|
||||||
timer: 'Minuteur',
|
|
||||||
title: 'Titre',
|
title: 'Titre',
|
||||||
userActions_title: "Actions de l'utilisateur",
|
userActions_title: "Actions de l'utilisateur",
|
||||||
userAddedThisCardToList: '<0> {{user}} </0> <1> a ajouté cette carte à {{list}} </1>',
|
userAddedThisCardToList: '<0> {{user}} </0> <1> a ajouté cette carte à {{list}} </1>',
|
||||||
|
@ -172,7 +172,7 @@ export default {
|
||||||
editDescription_title: 'Éditer la description',
|
editDescription_title: 'Éditer la description',
|
||||||
editEmail_title: "Modifier l'e-mail",
|
editEmail_title: "Modifier l'e-mail",
|
||||||
editPassword_title: 'Modifier le mot de passe',
|
editPassword_title: 'Modifier le mot de passe',
|
||||||
editTimer_title: 'Modifier la minuterie',
|
editStopwatch_title: 'Modifier la minuterie',
|
||||||
editTitle_title: 'Modifier le titre',
|
editTitle_title: 'Modifier le titre',
|
||||||
editUsername_title: "Modifier le nom d'utilisateur",
|
editUsername_title: "Modifier le nom d'utilisateur",
|
||||||
logOut_title: 'Se déconnecter',
|
logOut_title: 'Se déconnecter',
|
||||||
|
|
|
@ -79,7 +79,7 @@ export default {
|
||||||
editLabel_title: 'Modifica Etichetta',
|
editLabel_title: 'Modifica Etichetta',
|
||||||
editPassword_title: 'Modifica Password',
|
editPassword_title: 'Modifica Password',
|
||||||
editPermissions_title: 'Modifica Permessi',
|
editPermissions_title: 'Modifica Permessi',
|
||||||
editTimer_title: 'Modifica Timer',
|
editStopwatch_title: 'Modifica Timer',
|
||||||
editUsername_title: 'Modifica Username',
|
editUsername_title: 'Modifica Username',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail già in uso',
|
emailAlreadyInUse: 'E-mail già in uso',
|
||||||
|
@ -135,13 +135,13 @@ export default {
|
||||||
selectPermissions_title: 'Seleziona Permessi',
|
selectPermissions_title: 'Seleziona Permessi',
|
||||||
selectProject: 'Seleziona progetto',
|
selectProject: 'Seleziona progetto',
|
||||||
settings: 'Impostazioni',
|
settings: 'Impostazioni',
|
||||||
|
stopwatch: 'Timer',
|
||||||
subscribeToMyOwnCardsByDefault: 'Abbonati alle mie card per impostazione predefinita',
|
subscribeToMyOwnCardsByDefault: 'Abbonati alle mie card per impostazione predefinita',
|
||||||
taskActions_title: 'Task Azioni',
|
taskActions_title: 'Task Azioni',
|
||||||
tasks: 'Tasks',
|
tasks: 'Tasks',
|
||||||
thereIsNoPreviewAvailableForThisAttachment:
|
thereIsNoPreviewAvailableForThisAttachment:
|
||||||
'Non è disponibile alcuna anteprima per questo allegato',
|
'Non è disponibile alcuna anteprima per questo allegato',
|
||||||
time: 'Tempo',
|
time: 'Tempo',
|
||||||
timer: 'Timer',
|
|
||||||
title: 'Titolo',
|
title: 'Titolo',
|
||||||
userActions_title: 'Azioni Utente',
|
userActions_title: 'Azioni Utente',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> ha aggiunto questa card a {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> ha aggiunto questa card a {{list}}</1>',
|
||||||
|
@ -198,7 +198,7 @@ export default {
|
||||||
editInformation_title: 'Modifca Informazioni',
|
editInformation_title: 'Modifca Informazioni',
|
||||||
editPassword_title: 'Modifica Password',
|
editPassword_title: 'Modifica Password',
|
||||||
editPermissions: 'Modifica permessi',
|
editPermissions: 'Modifica permessi',
|
||||||
editTimer_title: 'Modifica Timer',
|
editStopwatch_title: 'Modifica Timer',
|
||||||
editTitle_title: 'Modifica Titolo',
|
editTitle_title: 'Modifica Titolo',
|
||||||
editUsername_title: 'Modifica Username',
|
editUsername_title: 'Modifica Username',
|
||||||
hideDetails: 'Nascondi dettagli',
|
hideDetails: 'Nascondi dettagli',
|
||||||
|
|
|
@ -76,7 +76,7 @@ export default {
|
||||||
editEmail_title: 'Eメールを編集',
|
editEmail_title: 'Eメールを編集',
|
||||||
editLabel_title: 'ラベルを編集',
|
editLabel_title: 'ラベルを編集',
|
||||||
editPassword_title: 'パスワードを編集',
|
editPassword_title: 'パスワードを編集',
|
||||||
editTimer_title: 'タイマーを編集',
|
editStopwatch_title: 'タイマーを編集',
|
||||||
editUsername_title: 'ユーザー名を編集',
|
editUsername_title: 'ユーザー名を編集',
|
||||||
email: 'Eメール',
|
email: 'Eメール',
|
||||||
emailAlreadyInUse: 'Eメールは既に使われています',
|
emailAlreadyInUse: 'Eメールは既に使われています',
|
||||||
|
@ -127,11 +127,11 @@ export default {
|
||||||
selectList: 'リストを選択',
|
selectList: 'リストを選択',
|
||||||
selectProject: 'プロジェクトを選択',
|
selectProject: 'プロジェクトを選択',
|
||||||
settings: '設定',
|
settings: '設定',
|
||||||
|
stopwatch: 'タイマー',
|
||||||
subscribeToMyOwnCardsByDefault: '自分のカードをデフォルトで購読する',
|
subscribeToMyOwnCardsByDefault: '自分のカードをデフォルトで購読する',
|
||||||
taskActions_title: 'タスクのアクション',
|
taskActions_title: 'タスクのアクション',
|
||||||
tasks: 'タスク',
|
tasks: 'タスク',
|
||||||
time: '時間',
|
time: '時間',
|
||||||
timer: 'タイマー',
|
|
||||||
title: 'タイトル',
|
title: 'タイトル',
|
||||||
userActions_title: 'ユーザーのアクション',
|
userActions_title: 'ユーザーのアクション',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0> は <1>{{list}} をこのカードに追加しました</1>',
|
userAddedThisCardToList: '<0>{{user}}</0> は <1>{{list}} をこのカードに追加しました</1>',
|
||||||
|
@ -185,7 +185,7 @@ export default {
|
||||||
editDescription_title: '説明を編集',
|
editDescription_title: '説明を編集',
|
||||||
editEmail_title: 'Eメールを編集',
|
editEmail_title: 'Eメールを編集',
|
||||||
editPassword_title: 'パスワードの編集',
|
editPassword_title: 'パスワードの編集',
|
||||||
editTimer_title: 'タイマーの編集',
|
editStopwatch_title: 'タイマーの編集',
|
||||||
editTitle_title: 'タイトルの編集',
|
editTitle_title: 'タイトルの編集',
|
||||||
editUsername_title: 'ユーザー名の編集',
|
editUsername_title: 'ユーザー名の編集',
|
||||||
leaveBoard: 'ボードから退出',
|
leaveBoard: 'ボードから退出',
|
||||||
|
|
|
@ -78,7 +78,7 @@ export default {
|
||||||
editInformation_title: '정보 수정',
|
editInformation_title: '정보 수정',
|
||||||
editLabel_title: '라벨 수정',
|
editLabel_title: '라벨 수정',
|
||||||
editPassword_title: '비밀번호 수정',
|
editPassword_title: '비밀번호 수정',
|
||||||
editTimer_title: '타이머 수정',
|
editStopwatch_title: '타이머 수정',
|
||||||
editUsername_title: '사용자이름 수정',
|
editUsername_title: '사용자이름 수정',
|
||||||
email: '메일',
|
email: '메일',
|
||||||
emailAlreadyInUse: '기 가입된 이메일이 존재합니다.',
|
emailAlreadyInUse: '기 가입된 이메일이 존재합니다.',
|
||||||
|
@ -130,13 +130,13 @@ export default {
|
||||||
selectList: '리스트 선택',
|
selectList: '리스트 선택',
|
||||||
selectProject: '프로젝트 선택',
|
selectProject: '프로젝트 선택',
|
||||||
settings: '설정',
|
settings: '설정',
|
||||||
|
stopwatch: '활동시간',
|
||||||
subscribeToMyOwnCardsByDefault: '내 항목카드는 기본으로 구독',
|
subscribeToMyOwnCardsByDefault: '내 항목카드는 기본으로 구독',
|
||||||
taskActions_title: '태스크 활동',
|
taskActions_title: '태스크 활동',
|
||||||
tasks: '태스크',
|
tasks: '태스크',
|
||||||
thereIsNoPreviewAvailableForThisAttachment:
|
thereIsNoPreviewAvailableForThisAttachment:
|
||||||
'이 첨부 파일에 사용할 수 있는 미리보기가 없습니다.',
|
'이 첨부 파일에 사용할 수 있는 미리보기가 없습니다.',
|
||||||
time: '시간',
|
time: '시간',
|
||||||
timer: '활동시간',
|
|
||||||
title: '제목',
|
title: '제목',
|
||||||
userActions_title: '',
|
userActions_title: '',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1>이 카드를 {{list}}</1>에 추가했습니다.',
|
userAddedThisCardToList: '<0>{{user}}</0><1>이 카드를 {{list}}</1>에 추가했습니다.',
|
||||||
|
@ -190,7 +190,7 @@ export default {
|
||||||
editEmail_title: '메일 수정',
|
editEmail_title: '메일 수정',
|
||||||
editInformation_title: '정보 수정',
|
editInformation_title: '정보 수정',
|
||||||
editPassword_title: '패스워드 수정',
|
editPassword_title: '패스워드 수정',
|
||||||
editTimer_title: '시간 수정',
|
editStopwatch_title: '시간 수정',
|
||||||
editTitle_title: '제목 수정',
|
editTitle_title: '제목 수정',
|
||||||
editUsername_title: '이름 수정',
|
editUsername_title: '이름 수정',
|
||||||
leaveBoard: '보드에서 나가기',
|
leaveBoard: '보드에서 나가기',
|
||||||
|
|
|
@ -69,7 +69,7 @@ export default {
|
||||||
editEmail_title: 'Edytuj E-mail',
|
editEmail_title: 'Edytuj E-mail',
|
||||||
editLabel_title: 'Edytuj Oznaczenie',
|
editLabel_title: 'Edytuj Oznaczenie',
|
||||||
editPassword_title: 'Edytuj Hasło',
|
editPassword_title: 'Edytuj Hasło',
|
||||||
editTimer_title: 'Edytuj Odliczanie',
|
editStopwatch_title: 'Edytuj Odliczanie',
|
||||||
editUsername_title: 'Edytuj Nazwę Użytkownika',
|
editUsername_title: 'Edytuj Nazwę Użytkownika',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail jest już używany',
|
emailAlreadyInUse: 'E-mail jest już używany',
|
||||||
|
@ -115,11 +115,11 @@ export default {
|
||||||
selectList: 'Wybierz listę',
|
selectList: 'Wybierz listę',
|
||||||
selectProject: 'Wybierz projekt',
|
selectProject: 'Wybierz projekt',
|
||||||
settings: 'Ustawienia',
|
settings: 'Ustawienia',
|
||||||
|
stopwatch: 'Odliczanie',
|
||||||
subscribeToMyOwnCardsByDefault: 'Zapisz mnie do moich kart automatycznie',
|
subscribeToMyOwnCardsByDefault: 'Zapisz mnie do moich kart automatycznie',
|
||||||
taskActions_title: 'Akcje Zadania',
|
taskActions_title: 'Akcje Zadania',
|
||||||
tasks: 'Zadania',
|
tasks: 'Zadania',
|
||||||
time: 'Czas',
|
time: 'Czas',
|
||||||
timer: 'Odliczanie',
|
|
||||||
title: 'Tytuł',
|
title: 'Tytuł',
|
||||||
userActions_title: 'Akcje użytkownika',
|
userActions_title: 'Akcje użytkownika',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> dodał tę kartę w {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> dodał tę kartę w {{list}}</1>',
|
||||||
|
@ -172,7 +172,7 @@ export default {
|
||||||
editDescription_title: 'Edytuj Opis',
|
editDescription_title: 'Edytuj Opis',
|
||||||
editEmail_title: 'Edytuj E-mail',
|
editEmail_title: 'Edytuj E-mail',
|
||||||
editPassword_title: 'Edytuj Hasło',
|
editPassword_title: 'Edytuj Hasło',
|
||||||
editTimer_title: 'Edytuj Odliczanie',
|
editStopwatch_title: 'Edytuj Odliczanie',
|
||||||
editTitle_title: 'Edytuj Tytuł',
|
editTitle_title: 'Edytuj Tytuł',
|
||||||
editUsername_title: 'Edytuj Nazwę Użytkownika',
|
editUsername_title: 'Edytuj Nazwę Użytkownika',
|
||||||
logOut_title: 'Wyloguj',
|
logOut_title: 'Wyloguj',
|
||||||
|
|
|
@ -77,7 +77,7 @@ export default {
|
||||||
editLabel: 'Изменения метки',
|
editLabel: 'Изменения метки',
|
||||||
editPassword: 'Изменение пароля',
|
editPassword: 'Изменение пароля',
|
||||||
editPermissions: 'Редактирование разрешений',
|
editPermissions: 'Редактирование разрешений',
|
||||||
editTimer: 'Изменение таймера',
|
editStopwatch: 'Изменение секундомера',
|
||||||
editTitle: 'Изменение названия',
|
editTitle: 'Изменение названия',
|
||||||
editUsername: 'Изменение имени пользователя',
|
editUsername: 'Изменение имени пользователя',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
|
@ -130,12 +130,12 @@ export default {
|
||||||
selectPermissions: 'Выбор разрешений',
|
selectPermissions: 'Выбор разрешений',
|
||||||
selectProject: 'Выберите проект',
|
selectProject: 'Выберите проект',
|
||||||
settings: 'Настройки',
|
settings: 'Настройки',
|
||||||
|
stopwatch: 'Секундомер',
|
||||||
subscribeToMyOwnCardsByDefault: 'По умолчанию подписаться на мои собственные карточки',
|
subscribeToMyOwnCardsByDefault: 'По умолчанию подписаться на мои собственные карточки',
|
||||||
taskActions: 'Действия с задачей',
|
taskActions: 'Действия с задачей',
|
||||||
tasks: 'Задачи',
|
tasks: 'Задачи',
|
||||||
thereIsNoPreviewAvailableForThisAttachment: 'Предпросмотр для этого вложения недоступен',
|
thereIsNoPreviewAvailableForThisAttachment: 'Предпросмотр для этого вложения недоступен',
|
||||||
time: 'Время',
|
time: 'Время',
|
||||||
timer: 'Таймер',
|
|
||||||
title: 'Название',
|
title: 'Название',
|
||||||
userActions: 'Действия с пользователем',
|
userActions: 'Действия с пользователем',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> добавил(а) эту карточку в {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> добавил(а) эту карточку в {{list}}</1>',
|
||||||
|
@ -187,8 +187,8 @@ export default {
|
||||||
editEmail: 'Изменить e-mail',
|
editEmail: 'Изменить e-mail',
|
||||||
editPassword: 'Изменить пароль',
|
editPassword: 'Изменить пароль',
|
||||||
editPermissions: 'Изменить разрешения',
|
editPermissions: 'Изменить разрешения',
|
||||||
|
editStopwatch: 'Изменить секундомер',
|
||||||
editTask: 'Изменить задачу',
|
editTask: 'Изменить задачу',
|
||||||
editTimer: 'Изменить таймер',
|
|
||||||
editTitle: 'Изменить название',
|
editTitle: 'Изменить название',
|
||||||
editUsername: 'Изменить имя пользователя',
|
editUsername: 'Изменить имя пользователя',
|
||||||
hideDetails: 'Скрыть подробности',
|
hideDetails: 'Скрыть подробности',
|
||||||
|
|
|
@ -77,7 +77,7 @@ export default {
|
||||||
editInformation_title: 'Upraviť informácie',
|
editInformation_title: 'Upraviť informácie',
|
||||||
editLabel_title: 'Upraviť štítok',
|
editLabel_title: 'Upraviť štítok',
|
||||||
editPassword_title: 'Upraviť heslo',
|
editPassword_title: 'Upraviť heslo',
|
||||||
editTimer_title: 'Upraviť časovač',
|
editStopwatch_title: 'Upraviť časovač',
|
||||||
editUsername_title: 'Upraviť používateľské meno',
|
editUsername_title: 'Upraviť používateľské meno',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail je už použitý',
|
emailAlreadyInUse: 'E-mail je už použitý',
|
||||||
|
@ -128,11 +128,11 @@ export default {
|
||||||
selectList: 'Vybrať zoznam',
|
selectList: 'Vybrať zoznam',
|
||||||
selectProject: 'Vybrať projekt',
|
selectProject: 'Vybrať projekt',
|
||||||
settings: 'Nastavenia',
|
settings: 'Nastavenia',
|
||||||
|
stopwatch: 'Časovač',
|
||||||
subscribeToMyOwnCardsByDefault: 'Predvolene odoberať vlastné karty',
|
subscribeToMyOwnCardsByDefault: 'Predvolene odoberať vlastné karty',
|
||||||
taskActions_title: 'Akcie na úlohe',
|
taskActions_title: 'Akcie na úlohe',
|
||||||
tasks: 'Úlohy',
|
tasks: 'Úlohy',
|
||||||
time: 'Čas',
|
time: 'Čas',
|
||||||
timer: 'Časovač',
|
|
||||||
title: 'Názov',
|
title: 'Názov',
|
||||||
userActions_title: 'Akcie na používateľovi',
|
userActions_title: 'Akcie na používateľovi',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> pridal kartu do {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> pridal kartu do {{list}}</1>',
|
||||||
|
@ -185,7 +185,7 @@ export default {
|
||||||
editEmail_title: 'Upraviť e-mail',
|
editEmail_title: 'Upraviť e-mail',
|
||||||
editInformation_title: 'Upraviť informácie',
|
editInformation_title: 'Upraviť informácie',
|
||||||
editPassword_title: 'Upraviť heslo',
|
editPassword_title: 'Upraviť heslo',
|
||||||
editTimer_title: 'Upraviť časovač',
|
editStopwatch_title: 'Upraviť časovač',
|
||||||
editTitle_title: 'Upraviť názov',
|
editTitle_title: 'Upraviť názov',
|
||||||
editUsername_title: 'Upraviť používateľské meno',
|
editUsername_title: 'Upraviť používateľské meno',
|
||||||
leaveBoard: 'Opustiť tabuľu',
|
leaveBoard: 'Opustiť tabuľu',
|
||||||
|
|
|
@ -78,7 +78,7 @@ export default {
|
||||||
editEmail_title: 'Redigera E-mail',
|
editEmail_title: 'Redigera E-mail',
|
||||||
editLabel_title: 'Redigera Etikett',
|
editLabel_title: 'Redigera Etikett',
|
||||||
editPassword_title: 'Redigera Lösenord',
|
editPassword_title: 'Redigera Lösenord',
|
||||||
editTimer_title: 'Redigera Timer',
|
editStopwatch_title: 'Redigera Timer',
|
||||||
editUsername_title: 'Redigera Användarnamn',
|
editUsername_title: 'Redigera Användarnamn',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail används redan',
|
emailAlreadyInUse: 'E-mail används redan',
|
||||||
|
@ -129,11 +129,11 @@ export default {
|
||||||
selectList: 'Välj lista',
|
selectList: 'Välj lista',
|
||||||
selectProject: 'Välj projekt',
|
selectProject: 'Välj projekt',
|
||||||
settings: 'Inställningar',
|
settings: 'Inställningar',
|
||||||
|
stopwatch: 'Timer',
|
||||||
subscribeToMyOwnCardsByDefault: 'Prenumerera på mina egna kort som standard',
|
subscribeToMyOwnCardsByDefault: 'Prenumerera på mina egna kort som standard',
|
||||||
taskActions_title: 'Uppgiftsåtgärder',
|
taskActions_title: 'Uppgiftsåtgärder',
|
||||||
tasks: 'Uppgifter',
|
tasks: 'Uppgifter',
|
||||||
time: 'Tid',
|
time: 'Tid',
|
||||||
timer: 'Timer',
|
|
||||||
title: 'Titel',
|
title: 'Titel',
|
||||||
userActions_title: 'Användaråtgärder',
|
userActions_title: 'Användaråtgärder',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> lade till detta kort i {{list}}</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> lade till detta kort i {{list}}</1>',
|
||||||
|
@ -186,7 +186,7 @@ export default {
|
||||||
editDescription_title: 'Redigera Beskrivning',
|
editDescription_title: 'Redigera Beskrivning',
|
||||||
editEmail_title: 'Redigera E-mail',
|
editEmail_title: 'Redigera E-mail',
|
||||||
editPassword_title: 'Redigera Lösenord',
|
editPassword_title: 'Redigera Lösenord',
|
||||||
editTimer_title: 'Redigera Timer',
|
editStopwatch_title: 'Redigera Timer',
|
||||||
editTitle_title: 'Redigera Titel',
|
editTitle_title: 'Redigera Titel',
|
||||||
editUsername_title: 'Redigera Användarnamn',
|
editUsername_title: 'Redigera Användarnamn',
|
||||||
leaveBoard: 'Lämna tavla',
|
leaveBoard: 'Lämna tavla',
|
||||||
|
|
|
@ -71,7 +71,7 @@ export default {
|
||||||
editEmail_title: 'E-mail ni Tahrirlash',
|
editEmail_title: 'E-mail ni Tahrirlash',
|
||||||
editLabel_title: 'Yorliqni Tahrirlash',
|
editLabel_title: 'Yorliqni Tahrirlash',
|
||||||
editPassword_title: 'Parolni Tahrirlash',
|
editPassword_title: 'Parolni Tahrirlash',
|
||||||
editTimer_title: 'Taymerni Tahrirlash',
|
editStopwatch_title: 'Taymerni Tahrirlash',
|
||||||
editUsername_title: 'Foydalanuvchi nomini Tahrirlash',
|
editUsername_title: 'Foydalanuvchi nomini Tahrirlash',
|
||||||
email: 'E-mail',
|
email: 'E-mail',
|
||||||
emailAlreadyInUse: 'E-mail allaqachon mavjud',
|
emailAlreadyInUse: 'E-mail allaqachon mavjud',
|
||||||
|
@ -122,11 +122,11 @@ export default {
|
||||||
selectList: "Ro'yxatni tanlash",
|
selectList: "Ro'yxatni tanlash",
|
||||||
selectProject: "Loyihani '",
|
selectProject: "Loyihani '",
|
||||||
settings: 'Sozlamalar',
|
settings: 'Sozlamalar',
|
||||||
|
stopwatch: 'Taymer',
|
||||||
subscribeToMyOwnCardsByDefault: "Odatiy holda o'z kartalarimga obuna bo'ling",
|
subscribeToMyOwnCardsByDefault: "Odatiy holda o'z kartalarimga obuna bo'ling",
|
||||||
taskActions_title: 'Vazifa Amallari',
|
taskActions_title: 'Vazifa Amallari',
|
||||||
tasks: 'Vazifalar',
|
tasks: 'Vazifalar',
|
||||||
time: 'Vaqt',
|
time: 'Vaqt',
|
||||||
timer: 'Taymer',
|
|
||||||
title: 'Sarlavha',
|
title: 'Sarlavha',
|
||||||
userActions_title: 'Foydalanuvchi Amallari',
|
userActions_title: 'Foydalanuvchi Amallari',
|
||||||
userAddedThisCardToList: "<1>Ushbu kartani {{list}} ga</1><0>{{user}}</0> qo'shdi",
|
userAddedThisCardToList: "<1>Ushbu kartani {{list}} ga</1><0>{{user}}</0> qo'shdi",
|
||||||
|
@ -179,7 +179,7 @@ export default {
|
||||||
editDescription_title: 'Izohni Tahrirlash',
|
editDescription_title: 'Izohni Tahrirlash',
|
||||||
editEmail_title: 'E-mailni Tahrirlash',
|
editEmail_title: 'E-mailni Tahrirlash',
|
||||||
editPassword_title: 'Parolni Tahrirlash',
|
editPassword_title: 'Parolni Tahrirlash',
|
||||||
editTimer_title: 'Taymerni Tahrirlash',
|
editStopwatch_title: 'Taymerni Tahrirlash',
|
||||||
editTitle_title: 'Sarlavhani Tahrirlash',
|
editTitle_title: 'Sarlavhani Tahrirlash',
|
||||||
editUsername_title: 'Foydalanuvchi nomini Tahrirlash',
|
editUsername_title: 'Foydalanuvchi nomini Tahrirlash',
|
||||||
leaveBoard: 'Doskadan chiqish',
|
leaveBoard: 'Doskadan chiqish',
|
||||||
|
|
|
@ -69,7 +69,7 @@ export default {
|
||||||
editEmail_title: '编辑邮箱',
|
editEmail_title: '编辑邮箱',
|
||||||
editLabel_title: '编辑标签',
|
editLabel_title: '编辑标签',
|
||||||
editPassword_title: '修改密码',
|
editPassword_title: '修改密码',
|
||||||
editTimer_title: '修改时间',
|
editStopwatch_title: '修改时间',
|
||||||
editUsername_title: '修改用户名',
|
editUsername_title: '修改用户名',
|
||||||
email: '邮箱',
|
email: '邮箱',
|
||||||
emailAlreadyInUse: '邮箱已使用',
|
emailAlreadyInUse: '邮箱已使用',
|
||||||
|
@ -120,11 +120,11 @@ export default {
|
||||||
selectList: '选择列表',
|
selectList: '选择列表',
|
||||||
selectProject: '选择项目',
|
selectProject: '选择项目',
|
||||||
settings: '设置',
|
settings: '设置',
|
||||||
|
stopwatch: '计时器',
|
||||||
subscribeToMyOwnCardsByDefault: '默认关注自己创建的卡片',
|
subscribeToMyOwnCardsByDefault: '默认关注自己创建的卡片',
|
||||||
taskActions_title: '任务操作',
|
taskActions_title: '任务操作',
|
||||||
tasks: '任务',
|
tasks: '任务',
|
||||||
time: '时间',
|
time: '时间',
|
||||||
timer: '计时器',
|
|
||||||
title: '标题',
|
title: '标题',
|
||||||
userActions_title: '用户操作',
|
userActions_title: '用户操作',
|
||||||
userAddedThisCardToList: '<0>{{user}}</0><1> 向列表 {{list}} 添加了该卡片</1>',
|
userAddedThisCardToList: '<0>{{user}}</0><1> 向列表 {{list}} 添加了该卡片</1>',
|
||||||
|
@ -177,7 +177,7 @@ export default {
|
||||||
editDescription_title: '编辑描述',
|
editDescription_title: '编辑描述',
|
||||||
editEmail_title: '编辑邮箱',
|
editEmail_title: '编辑邮箱',
|
||||||
editPassword_title: '编辑密码',
|
editPassword_title: '编辑密码',
|
||||||
editTimer_title: '编辑实践',
|
editStopwatch_title: '编辑实践',
|
||||||
editTitle_title: '编辑标题',
|
editTitle_title: '编辑标题',
|
||||||
editUsername_title: '编辑用户名',
|
editUsername_title: '编辑用户名',
|
||||||
leaveBoard: '离开面板',
|
leaveBoard: '离开面板',
|
||||||
|
|
|
@ -14,7 +14,7 @@ export default class extends BaseModel {
|
||||||
name: attr(),
|
name: attr(),
|
||||||
description: attr(),
|
description: attr(),
|
||||||
dueDate: attr(),
|
dueDate: attr(),
|
||||||
timer: attr(),
|
stopwatch: attr(),
|
||||||
isSubscribed: attr({
|
isSubscribed: attr({
|
||||||
getDefault: () => false,
|
getDefault: () => false,
|
||||||
}),
|
}),
|
||||||
|
|
|
@ -6,28 +6,28 @@ const getFullSeconds = ({ startedAt, total }) => {
|
||||||
return total;
|
return total;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const createTimer = ({ hours, minutes, seconds }) => ({
|
export const createStopwatch = ({ hours, minutes, seconds }) => ({
|
||||||
startedAt: null,
|
startedAt: null,
|
||||||
total: hours * 60 * 60 + minutes * 60 + seconds,
|
total: hours * 60 * 60 + minutes * 60 + seconds,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const updateTimer = ({ startedAt }, parts) => ({
|
export const updateStopwatch = ({ startedAt }, parts) => ({
|
||||||
...createTimer(parts),
|
...createStopwatch(parts),
|
||||||
startedAt: startedAt && new Date(),
|
startedAt: startedAt && new Date(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const startTimer = (timer) => ({
|
export const startStopwatch = (stopwatch) => ({
|
||||||
startedAt: new Date(),
|
startedAt: new Date(),
|
||||||
total: timer ? timer.total : 0,
|
total: stopwatch ? stopwatch.total : 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
export const stopTimer = (timer) => ({
|
export const stopStopwatch = (stopwatch) => ({
|
||||||
startedAt: null,
|
startedAt: null,
|
||||||
total: getFullSeconds(timer),
|
total: getFullSeconds(stopwatch),
|
||||||
});
|
});
|
||||||
|
|
||||||
export const getTimerParts = (timer) => {
|
export const getStopwatchParts = (stopwatch) => {
|
||||||
const fullSeconds = getFullSeconds(timer);
|
const fullSeconds = getFullSeconds(stopwatch);
|
||||||
|
|
||||||
const hours = Math.floor(fullSeconds / 3600);
|
const hours = Math.floor(fullSeconds / 3600);
|
||||||
const minutes = Math.floor((fullSeconds - hours * 3600) / 60);
|
const minutes = Math.floor((fullSeconds - hours * 3600) / 60);
|
||||||
|
@ -40,8 +40,8 @@ export const getTimerParts = (timer) => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const formatTimer = (timer) => {
|
export const formatStopwatch = (stopwatch) => {
|
||||||
const { hours, minutes, seconds } = getTimerParts(timer);
|
const { hours, minutes, seconds } = getStopwatchParts(stopwatch);
|
||||||
|
|
||||||
return [hours, ...[minutes, seconds].map((part) => (part < 10 ? `0${part}` : part))].join(':');
|
return [hours, ...[minutes, seconds].map((part) => (part < 10 ? `0${part}` : part))].join(':');
|
||||||
};
|
};
|
|
@ -14,7 +14,7 @@ const Errors = {
|
||||||
|
|
||||||
const dueDateValidator = (value) => moment(value, moment.ISO_8601, true).isValid();
|
const dueDateValidator = (value) => moment(value, moment.ISO_8601, true).isValid();
|
||||||
|
|
||||||
const timerValidator = (value) => {
|
const stopwatchValidator = (value) => {
|
||||||
if (!_.isPlainObject(value) || _.size(value) !== 2) {
|
if (!_.isPlainObject(value) || _.size(value) !== 2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -57,9 +57,9 @@ module.exports = {
|
||||||
type: 'string',
|
type: 'string',
|
||||||
custom: dueDateValidator,
|
custom: dueDateValidator,
|
||||||
},
|
},
|
||||||
timer: {
|
stopwatch: {
|
||||||
type: 'json',
|
type: 'json',
|
||||||
custom: timerValidator,
|
custom: stopwatchValidator,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ module.exports = {
|
||||||
throw Errors.NOT_ENOUGH_RIGHTS;
|
throw Errors.NOT_ENOUGH_RIGHTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
const values = _.pick(inputs, ['position', 'name', 'description', 'dueDate', 'timer']);
|
const values = _.pick(inputs, ['position', 'name', 'description', 'dueDate', 'stopwatch']);
|
||||||
|
|
||||||
const card = await sails.helpers.cards.createOne
|
const card = await sails.helpers.cards.createOne
|
||||||
.with({
|
.with({
|
||||||
|
|
|
@ -23,7 +23,7 @@ const Errors = {
|
||||||
|
|
||||||
const dueDateValidator = (value) => moment(value, moment.ISO_8601, true).isValid();
|
const dueDateValidator = (value) => moment(value, moment.ISO_8601, true).isValid();
|
||||||
|
|
||||||
const timerValidator = (value) => {
|
const stopwatchValidator = (value) => {
|
||||||
if (!_.isPlainObject(value) || _.size(value) !== 2) {
|
if (!_.isPlainObject(value) || _.size(value) !== 2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -80,9 +80,9 @@ module.exports = {
|
||||||
custom: dueDateValidator,
|
custom: dueDateValidator,
|
||||||
allowNull: true,
|
allowNull: true,
|
||||||
},
|
},
|
||||||
timer: {
|
stopwatch: {
|
||||||
type: 'json',
|
type: 'json',
|
||||||
custom: timerValidator,
|
custom: stopwatchValidator,
|
||||||
},
|
},
|
||||||
isSubscribed: {
|
isSubscribed: {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
|
@ -171,7 +171,7 @@ module.exports = {
|
||||||
'name',
|
'name',
|
||||||
'description',
|
'description',
|
||||||
'dueDate',
|
'dueDate',
|
||||||
'timer',
|
'stopwatch',
|
||||||
'isSubscribed',
|
'isSubscribed',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ module.exports = {
|
||||||
type: 'ref',
|
type: 'ref',
|
||||||
columnName: 'due_date',
|
columnName: 'due_date',
|
||||||
},
|
},
|
||||||
timer: {
|
stopwatch: {
|
||||||
type: 'json',
|
type: 'json',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
module.exports.up = (knex) =>
|
||||||
|
knex.schema.table('card', (table) => {
|
||||||
|
table.renameColumn('timer', 'stopwatch');
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports.down = (knex) =>
|
||||||
|
knex.schema.table('card', (table) => {
|
||||||
|
table.renameColumn('stopwatch', 'timer');
|
||||||
|
});
|
Loading…
Add table
Add a link
Reference in a new issue