mirror of
https://github.com/plankanban/planka.git
synced 2025-12-16 17:23:21 +03:00
Compare commits
4 Commits
v1.24.0
...
planka-0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96956e1268 | ||
|
|
5a3c3bb39b | ||
|
|
1a70b2b7e6 | ||
|
|
71d0815891 |
@@ -15,13 +15,13 @@ type: application
|
|||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 0.2.15
|
version: 0.2.16
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
appVersion: "1.24.0"
|
appVersion: "1.24.1"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- alias: postgresql
|
- alias: postgresql
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import ListAdd from './ListAdd';
|
|||||||
import { ReactComponent as PlusMathIcon } from '../../assets/images/plus-math-icon.svg';
|
import { ReactComponent as PlusMathIcon } from '../../assets/images/plus-math-icon.svg';
|
||||||
|
|
||||||
import styles from './Board.module.scss';
|
import styles from './Board.module.scss';
|
||||||
|
import globalStyles from '../../styles.module.scss';
|
||||||
|
|
||||||
const parseDndId = (dndId) => dndId.split(':')[1];
|
const parseDndId = (dndId) => dndId.split(':')[1];
|
||||||
|
|
||||||
@@ -31,11 +32,14 @@ const Board = React.memo(
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleDragStart = useCallback(() => {
|
const handleDragStart = useCallback(() => {
|
||||||
|
document.body.classList.add(globalStyles.dragging);
|
||||||
closePopup();
|
closePopup();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleDragEnd = useCallback(
|
const handleDragEnd = useCallback(
|
||||||
({ draggableId, type, source, destination }) => {
|
({ draggableId, type, source, destination }) => {
|
||||||
|
document.body.classList.remove(globalStyles.dragging);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!destination ||
|
!destination ||
|
||||||
(source.droppableId === destination.droppableId && source.index === destination.index)
|
(source.droppableId === destination.droppableId && source.index === destination.index)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import AddStep from './AddStep';
|
|||||||
import EditStep from './EditStep';
|
import EditStep from './EditStep';
|
||||||
|
|
||||||
import styles from './Boards.module.scss';
|
import styles from './Boards.module.scss';
|
||||||
|
import globalStyles from '../../styles.module.scss';
|
||||||
|
|
||||||
const Boards = React.memo(({ items, currentId, canEdit, onCreate, onUpdate, onMove, onDelete }) => {
|
const Boards = React.memo(({ items, currentId, canEdit, onCreate, onUpdate, onMove, onDelete }) => {
|
||||||
const tabsWrapper = useRef(null);
|
const tabsWrapper = useRef(null);
|
||||||
@@ -24,11 +25,14 @@ const Boards = React.memo(({ items, currentId, canEdit, onCreate, onUpdate, onMo
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleDragStart = useCallback(() => {
|
const handleDragStart = useCallback(() => {
|
||||||
|
document.body.classList.add(globalStyles.dragging);
|
||||||
closePopup();
|
closePopup();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleDragEnd = useCallback(
|
const handleDragEnd = useCallback(
|
||||||
({ draggableId, source, destination }) => {
|
({ draggableId, source, destination }) => {
|
||||||
|
document.body.classList.remove(globalStyles.dragging);
|
||||||
|
|
||||||
if (!destination || source.index === destination.index) {
|
if (!destination || source.index === destination.index) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,16 +10,20 @@ import Item from './Item';
|
|||||||
import Add from './Add';
|
import Add from './Add';
|
||||||
|
|
||||||
import styles from './Tasks.module.scss';
|
import styles from './Tasks.module.scss';
|
||||||
|
import globalStyles from '../../../styles.module.scss';
|
||||||
|
|
||||||
const Tasks = React.memo(({ items, canEdit, onCreate, onUpdate, onMove, onDelete }) => {
|
const Tasks = React.memo(({ items, canEdit, onCreate, onUpdate, onMove, onDelete }) => {
|
||||||
const [t] = useTranslation();
|
const [t] = useTranslation();
|
||||||
|
|
||||||
const handleDragStart = useCallback(() => {
|
const handleDragStart = useCallback(() => {
|
||||||
|
document.body.classList.add(globalStyles.dragging);
|
||||||
closePopup();
|
closePopup();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleDragEnd = useCallback(
|
const handleDragEnd = useCallback(
|
||||||
({ draggableId, source, destination }) => {
|
({ draggableId, source, destination }) => {
|
||||||
|
document.body.classList.remove(globalStyles.dragging);
|
||||||
|
|
||||||
if (!destination || source.index === destination.index) {
|
if (!destination || source.index === destination.index) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,19 +67,26 @@ const DueDateEditStep = React.memo(({ defaultValue, onUpdate, onBack, onClose })
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const value = parseTime(data.time, nullableDate);
|
let value = t('format:dateTime', {
|
||||||
|
postProcess: 'parseDate',
|
||||||
|
value: `${data.date} ${data.time}`,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (Number.isNaN(value.getTime())) {
|
||||||
|
value = parseTime(data.time, nullableDate);
|
||||||
|
|
||||||
if (Number.isNaN(value.getTime())) {
|
if (Number.isNaN(value.getTime())) {
|
||||||
timeField.current.select();
|
timeField.current.select();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!defaultValue || value.getTime() !== defaultValue.getTime()) {
|
if (!defaultValue || value.getTime() !== defaultValue.getTime()) {
|
||||||
onUpdate(value);
|
onUpdate(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
onClose();
|
onClose();
|
||||||
}, [defaultValue, onUpdate, onClose, data, nullableDate]);
|
}, [defaultValue, onUpdate, onClose, data, nullableDate, t]);
|
||||||
|
|
||||||
const handleClearClick = useCallback(() => {
|
const handleClearClick = useCallback(() => {
|
||||||
if (defaultValue) {
|
if (defaultValue) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import EditStep from './EditStep';
|
|||||||
import Item from './Item';
|
import Item from './Item';
|
||||||
|
|
||||||
import styles from './LabelsStep.module.scss';
|
import styles from './LabelsStep.module.scss';
|
||||||
|
import globalStyles from '../../styles.module.scss';
|
||||||
|
|
||||||
const StepTypes = {
|
const StepTypes = {
|
||||||
ADD: 'ADD',
|
ADD: 'ADD',
|
||||||
@@ -77,8 +78,14 @@ const LabelsStep = React.memo(
|
|||||||
[onDeselect],
|
[onDeselect],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const handleDragStart = useCallback(() => {
|
||||||
|
document.body.classList.add(globalStyles.dragging);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const handleDragEnd = useCallback(
|
const handleDragEnd = useCallback(
|
||||||
({ draggableId, source, destination }) => {
|
({ draggableId, source, destination }) => {
|
||||||
|
document.body.classList.remove(globalStyles.dragging);
|
||||||
|
|
||||||
if (!destination || source.index === destination.index) {
|
if (!destination || source.index === destination.index) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -159,7 +166,7 @@ const LabelsStep = React.memo(
|
|||||||
onChange={handleSearchChange}
|
onChange={handleSearchChange}
|
||||||
/>
|
/>
|
||||||
{filteredItems.length > 0 && (
|
{filteredItems.length > 0 && (
|
||||||
<DragDropContext onDragEnd={handleDragEnd}>
|
<DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>
|
||||||
<Droppable droppableId="labels" type={DroppableTypes.LABEL}>
|
<Droppable droppableId="labels" type={DroppableTypes.LABEL}>
|
||||||
{({ innerRef, droppableProps, placeholder }) => (
|
{({ innerRef, droppableProps, placeholder }) => (
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ const List = React.memo(
|
|||||||
const [isAddCardOpened, setIsAddCardOpened] = useState(false);
|
const [isAddCardOpened, setIsAddCardOpened] = useState(false);
|
||||||
|
|
||||||
const nameEdit = useRef(null);
|
const nameEdit = useRef(null);
|
||||||
const listWrapper = useRef(null);
|
const cardsWrapper = useRef(null);
|
||||||
|
|
||||||
const handleHeaderClick = useCallback(() => {
|
const handleHeaderClick = useCallback(() => {
|
||||||
if (isPersisted && canEdit) {
|
if (isPersisted && canEdit) {
|
||||||
@@ -67,7 +67,7 @@ const List = React.memo(
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isAddCardOpened) {
|
if (isAddCardOpened) {
|
||||||
listWrapper.current.scrollTop = listWrapper.current.scrollHeight;
|
cardsWrapper.current.scrollTop = cardsWrapper.current.scrollHeight;
|
||||||
}
|
}
|
||||||
}, [cardIds, isAddCardOpened]);
|
}, [cardIds, isAddCardOpened]);
|
||||||
|
|
||||||
@@ -133,13 +133,7 @@ const List = React.memo(
|
|||||||
</ActionsPopup>
|
</ActionsPopup>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div ref={cardsWrapper} className={styles.cardsInnerWrapper}>
|
||||||
ref={listWrapper}
|
|
||||||
className={classNames(
|
|
||||||
styles.cardsInnerWrapper,
|
|
||||||
(isAddCardOpened || !canEdit) && styles.cardsInnerWrapperFull,
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
<div className={styles.cardsOuterWrapper}>{cardsNode}</div>
|
<div className={styles.cardsOuterWrapper}>{cardsNode}</div>
|
||||||
</div>
|
</div>
|
||||||
{!isAddCardOpened && canEdit && (
|
{!isAddCardOpened && canEdit && (
|
||||||
|
|||||||
@@ -40,7 +40,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.cardsInnerWrapper {
|
.cardsInnerWrapper {
|
||||||
max-height: calc(100vh - 268px);
|
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
width: 290px;
|
width: 290px;
|
||||||
@@ -62,10 +61,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.cardsInnerWrapperFull {
|
|
||||||
max-height: calc(100vh - 232px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardsOuterWrapper {
|
.cardsOuterWrapper {
|
||||||
padding: 0 8px;
|
padding: 0 8px;
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
@@ -140,6 +135,9 @@
|
|||||||
.outerWrapper {
|
.outerWrapper {
|
||||||
background: #dfe3e6;
|
background: #dfe3e6;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
max-height: calc(100vh - 198px);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,6 +142,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
:global(#app) {
|
:global(#app) {
|
||||||
|
&.dragging>* {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
/* Backgrounds */
|
/* Backgrounds */
|
||||||
|
|
||||||
.backgroundBerryRed {
|
.backgroundBerryRed {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
export default '1.24.0';
|
export default '1.24.1';
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.24.0",
|
"version": "1.24.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.24.0",
|
"version": "1.24.1",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.24.0",
|
"version": "1.24.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://plankanban.github.io/planka",
|
"homepage": "https://plankanban.github.io/planka",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
Reference in New Issue
Block a user