1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-18 20:59:44 +02:00

feat: Open card once created with Ctrl+Enter (#373)

This commit is contained in:
RAR 2023-01-08 21:59:24 +01:00 committed by GitHub
parent 58eda7d555
commit 66aa2c36bb
6 changed files with 38 additions and 23 deletions

View file

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

View file

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

View file

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

View file

@ -84,7 +84,7 @@ export default {
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',
enterCardTitle: 'Enter card title...', enterCardTitle: 'Enter card title... [Ctrl+Enter] to auto-open',
enterDescription: 'Enter description...', enterDescription: 'Enter description...',
enterFilename: 'Enter filename', enterFilename: 'Enter filename',
enterListTitle: 'Enter list title...', enterListTitle: 'Enter list title...',

View file

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

View file

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