@atlaskit/editor-plugin-card
Version:
Card plugin for @atlaskit/editor-core
201 lines • 5.84 kB
JavaScript
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);
}
});