1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-24 15:49:46 +02:00
This commit is contained in:
Maksim Eltyshev 2023-01-08 22:11:20 +01:00
commit 1dfd6972bf
6 changed files with 38 additions and 23 deletions

View file

@ -21,36 +21,46 @@ const CardAdd = React.memo(({ isOpened, onCreate, onClose }) => {
const nameField = useRef(null);
const submit = useCallback(() => {
const cleanData = {
...data,
name: data.name.trim(),
};
const submit = useCallback(
(autoOpen) => {
const cleanData = {
...data,
name: data.name.trim(),
};
if (!cleanData.name) {
nameField.current.ref.current.select();
return;
}
if (!cleanData.name) {
nameField.current.ref.current.select();
return;
}
onCreate(cleanData);
onCreate(cleanData, autoOpen);
setData(DEFAULT_DATA);
setData(DEFAULT_DATA);
focusNameField();
}, [onCreate, data, setData, focusNameField]);
if (autoOpen) {
onClose();
} else {
focusNameField();
}
},
[onCreate, onClose, data, setData, focusNameField],
);
const handleFieldKeyDown = useCallback(
(event) => {
switch (event.key) {
case 'Enter':
case 'Enter': {
event.preventDefault();
submit();
const autoOpen = event.ctrlKey;
submit(autoOpen);
break;
case 'Escape':
}
case 'Escape': {
onClose();
break;
}
default:
}
},

View file

@ -34,7 +34,7 @@ const mapDispatchToProps = (dispatch, { id }) =>
{
onUpdate: (data) => entryActions.updateList(id, data),
onDelete: () => entryActions.deleteList(id),
onCardCreate: (data) => entryActions.createCard(id, data),
onCardCreate: (data, autoOpen) => entryActions.createCard(id, data, autoOpen),
},
dispatch,
);

View file

@ -1,10 +1,11 @@
import EntryActionTypes from '../constants/EntryActionTypes';
const createCard = (listId, data) => ({
const createCard = (listId, data, autoOpen) => ({
type: EntryActionTypes.CARD_CREATE,
payload: {
listId,
data,
autoOpen,
},
});

View file

@ -84,7 +84,7 @@ export default {
editUsername_title: 'Edit Username',
email: 'E-mail',
emailAlreadyInUse: 'E-mail already in use',
enterCardTitle: 'Enter card title...',
enterCardTitle: 'Enter card title... [Ctrl+Enter] to auto-open',
enterDescription: 'Enter description...',
enterFilename: 'Enter filename',
enterListTitle: 'Enter list title...',

View file

@ -1,13 +1,13 @@
import { call, put, select } from 'redux-saga/effects';
import { goToBoard } from './router';
import { goToBoard, goToCard } from './router';
import request from '../request';
import selectors from '../../../selectors';
import actions from '../../../actions';
import api from '../../../api';
import { createLocalId } from '../../../utils/local-id';
export function* createCard(listId, data) {
export function* createCard(listId, data, autoOpen) {
const { boardId } = yield select(selectors.selectListById, listId);
const nextData = {
@ -35,6 +35,10 @@ export function* createCard(listId, data) {
}
yield put(actions.createCard.success(localId, card));
if (autoOpen) {
yield call(goToCard, card.id);
}
}
export function* handleCardCreate(card) {

View file

@ -5,8 +5,8 @@ import EntryActionTypes from '../../../constants/EntryActionTypes';
export default function* cardsWatchers() {
yield all([
takeEvery(EntryActionTypes.CARD_CREATE, ({ payload: { listId, data } }) =>
services.createCard(listId, data),
takeEvery(EntryActionTypes.CARD_CREATE, ({ payload: { listId, data, autoOpen } }) =>
services.createCard(listId, data, autoOpen),
),
takeEvery(EntryActionTypes.CARD_CREATE_HANDLE, ({ payload: { card } }) =>
services.handleCardCreate(card),