import ng from 'core/services/ng'; /** * @ngdoc method * @name toggleSuggestingMode * @return {String} action * @description Enable/disable suggestions mode. */ export function toggleSuggestingMode() { return { type: 'TOGGLE_SUGGESTING_MODE', }; } /** * @ngdoc method * @name createAddSuggestion * @param {String} chars * @return {Object} action * @description add a new suggestion of type ADD. */ export function createAddSuggestion(chars) { return { type: 'CREATE_ADD_SUGGESTION', payload: { text: chars, data: getSuggestionMetadata(), }, }; } /** * @ngdoc method * @name createDeleteSuggestion * @return {Object} action * @description add a new suggestion of type DELETE. */ export function createDeleteSuggestion(action: 'delete' | 'backspace') { return { type: 'CREATE_DELETE_SUGGESTION', payload: { action: action, data: getSuggestionMetadata(), }, }; } /** * @ngdoc method * @name createChangeStyleSuggestion * @param {String} style * @param {String} active, true if style was active * @return {Object} action * @description add a new suggestion of type change style. */ export function createChangeStyleSuggestion(style, active) { return { type: 'CREATE_CHANGE_STYLE_SUGGESTION', payload: { style: style, data: { ...getSuggestionMetadata(), originalStyle: active ? style : '', }, }, }; } /** * @ngdoc method * @name createChangeBlockStyleSuggestion * @param {String} type * @param {String} active, true if type was active * @return {Object} action * @description add a new suggestion of type change block style. */ export function createChangeBlockStyleSuggestion(type, active) { return { type: 'CREATE_CHANGE_BLOCK_STYLE_SUGGESTION', payload: { blockType: type, data: { ...getSuggestionMetadata(), originalStyle: active ? type : '', }, }, }; } /** * @ngdoc method * @name createSplitParagraphSuggestion * @param {String} blockKey * @param {String} blockOffset * @return {Object} action * @description add a new suggestion of type split paragraph. */ export function createSplitParagraphSuggestion() { return { type: 'CREATE_SPLIT_PARAGRAPH_SUGGESTION', payload: { data: getSuggestionMetadata(), }, }; } /** * @ngdoc method * @name acceptSuggestion * @param {Object} selection * @return {Object} action * @description accept the suggestions for the selection. */ export function acceptSuggestion(suggestion) { return { type: 'ACCEPT_SUGGESTION', payload: { suggestion: suggestion, data: getSuggestionMetadata(), }, }; } /** * @ngdoc method * @name rejectSuggestion * @param {Object} selection * @return {Object} action * @description reject the suggestions for the selection. */ export function rejectSuggestion(suggestion) { return { type: 'REJECT_SUGGESTION', payload: { suggestion: suggestion, data: getSuggestionMetadata(), }, }; } /** * @ngdoc method * @name onPasteFromSuggestingMode * @param {Object} content, pasted editor content * @return {Object} action * @description add a new suggestion of type ADD based on pasted content. */ export function onPasteFromSuggestingMode(content) { return { type: 'PASTE_ADD_SUGGESTION', payload: { content: content, data: getSuggestionMetadata(), }, }; } /** * @ngdoc method * @name createLinkSuggestion * @param {Object} link, object containing the link href * @return {Object} action * @description add a new suggestion of type ADD link to text */ export function createLinkSuggestion(link) { return { type: 'CREATE_LINK_SUGGESTION', payload: { data: { ...getSuggestionMetadata(), link, }, }, }; } /** * @ngdoc method * @name removeLinkSuggestion * @return {Object} action * @description add a new suggestion of type REMOVE link */ export function removeLinkSuggestion() { return { type: 'REMOVE_LINK_SUGGESTION', payload: { data: getSuggestionMetadata(), }, }; } /** * @ngdoc method * @name changeLinkSuggestion * @param {Object} link, object containing the link href * @param {Object} entity - the link entity * @return {Object} action * @description add a new suggestion of type CAHNGE link */ export function changeLinkSuggestion(link, entity) { return { type: 'CHANGE_LINK_SUGGESTION', payload: { data: getSuggestionMetadata(), link: link, entity: entity, }, }; } /** * @ngdoc method * @name getSuggestionMetadata * @param {String} type * @return {Object} returns suggestion metadata * @description Creates data structure with info about current user and current date. */ export const getSuggestionMetadata = () => { const data: any = {}; const date = new Date(); data.author = ng.get('session').identity._id; data.date = date; return data; };