UNPKG

@atlaskit/editor-plugin-card

Version:

Card plugin for @atlaskit/editor-core

201 lines • 5.84 kB
import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled'; import { removePastedInlineLink } from './util/pasted-inline-link'; const queue = (state, action) => { return { ...state, requests: state.requests.concat(action.requests) }; }; const resolve = (state, action) => { const requests = state.requests.reduce((requests, request) => { if (request.url !== action.url) { requests.push(request); } return requests; }, []); return { ...state, requests }; }; const register = (state, action) => { return { ...state, cards: state.cards.filter(card => card.pos !== action.info.pos).concat(action.info) }; }; const removeCard = (state, action) => { const cards = state.cards.filter(card => card.id !== action.info.id); if (isExperimentEnabled('platform_editor_reduce_memory_leaks') && state.removeOverlayCardId !== undefined && state.removeOverlayCardId === action.info.id) { return { ...state, cards, removeOverlay: undefined, removeOverlayCardId: undefined }; } return { ...state, cards }; }; const setProvider = (state, action) => { return { ...state, provider: action.provider }; }; const setCardLayout = (state, action) => { return { ...state, layout: action.layout }; }; const setDatasourceTableRef = (state, action) => { return { ...state, datasourceTableRef: action.datasourceTableRef }; }; const setResolvedToolbarAttributes = (state, action) => { return { ...state, resolvedToolbarAttributesByUrl: { ...state.resolvedToolbarAttributesByUrl, [action.url]: action.attributes } }; }; const setCardLayoutDatasourceTableRef = (state, action) => { return { ...state, datasourceTableRef: action.datasourceTableRef, layout: action.layout }; }; const registerEvents = (state, action) => { return { ...state, smartLinkEvents: action.smartLinkEvents }; }; const setLinkToolbar = (state, action) => { return { ...state, showLinkingToolbar: action.type === 'SHOW_LINK_TOOLBAR' }; }; const showDatasourceModal = (state, action) => { return { ...state, showDatasourceModal: true, datasourceModalType: action.type === 'SHOW_DATASOURCE_MODAL' ? action.modalType : undefined }; }; const hideDatasourceModal = state => { return { ...state, showDatasourceModal: false, datasourceModalType: undefined }; }; const clearOverlayCandidate = state => { if (isExperimentEnabled('platform_editor_reduce_memory_leaks')) { return { ...state, overlayCandidatePosition: undefined, removeOverlay: undefined, removeOverlayCardId: undefined }; } return { ...state, overlayCandidatePosition: undefined }; }; const registerRemoveOverlayOnInsertedLink = (state, action) => { var _action$info2; return { ...state, cards: action.info ? state.cards.filter(card => { var _action$info; return card.pos !== ((_action$info = action.info) === null || _action$info === void 0 ? void 0 : _action$info.pos); }).concat(action.info) : state.cards, removeOverlay: action.callback, ...(isExperimentEnabled('platform_editor_reduce_memory_leaks') ? { removeOverlayCardId: (_action$info2 = action.info) === null || _action$info2 === void 0 ? void 0 : _action$info2.id } : {}) }; }; const setDatasourceStash = (state, action) => { return { ...state, datasourceStash: { ...state.datasourceStash, [action.datasourceStash.url]: { views: action.datasourceStash.views } } }; }; const removeDatasourceStash = (state, action) => { const { [action.url]: _, ...datasourceStash } = state.datasourceStash; return { ...state, datasourceStash }; }; export default ((state, action) => { switch (action.type) { case 'PASTED_INLINE_LINK_SHOWN': return state.pastedInlineLinks ? { ...state, pastedInlineLinkShown: true, // Keep only the displayed link so it can still be dismissed if it changes. pastedInlineLinks: state.pastedInlineLinks.filter(link => link.pos === action.target.pos && link.url === action.target.url) } : state; case 'CLEAR_PASTED_INLINE_LINK': return state.pastedInlineLinks ? { ...state, pastedInlineLinks: removePastedInlineLink(state.pastedInlineLinks, action.target) } : state; case 'QUEUE': return queue(state, action); case 'SET_PROVIDER': return setProvider(state, action); case 'RESOLVE': return resolve(state, action); case 'REGISTER': return register(state, action); case 'REMOVE_CARD': return removeCard(state, action); case 'REGISTER_EVENTS': return registerEvents(state, action); case 'SET_DATASOURCE_TABLE_REF': return setDatasourceTableRef(state, action); case 'SET_RESOLVED_TOOLBAR_ATTRIBUTES': return setResolvedToolbarAttributes(state, action); case 'SET_CARD_LAYOUT': return setCardLayout(state, action); case 'SET_CARD_LAYOUT_AND_DATASOURCE_TABLE_REF': return setCardLayoutDatasourceTableRef(state, action); case 'SHOW_LINK_TOOLBAR': case 'HIDE_LINK_TOOLBAR': return setLinkToolbar(state, action); case 'SHOW_DATASOURCE_MODAL': return showDatasourceModal(state, action); case 'HIDE_DATASOURCE_MODAL': return hideDatasourceModal(state); case 'CLEAR_OVERLAY_CANDIDATE': return clearOverlayCandidate(state); case 'REGISTER_REMOVE_OVERLAY_ON_INSERTED_LINK': return registerRemoveOverlayOnInsertedLink(state, action); case 'SET_DATASOURCE_STASH': return setDatasourceStash(state, action); case 'REMOVE_DATASOURCE_STASH': return removeDatasourceStash(state, action); } });