diff --git a/src/store/getDataFromRevision.js b/src/store/getDataFromRevision.js index c6ac7a79..662414b2 100644 --- a/src/store/getDataFromRevision.js +++ b/src/store/getDataFromRevision.js @@ -32,9 +32,7 @@ export default function getDataFromRevision(revision) { parser = getDefaultParser(); } - const code = revision.get('code') || this._getDefaultCode(parser); + const code = revision.get('code') || parser.category.codeExample; return {parser, transformer, code, transformCode}; } - - diff --git a/src/store/sagas.js b/src/store/sagas.js index 075671e6..51302181 100644 --- a/src/store/sagas.js +++ b/src/store/sagas.js @@ -26,10 +26,12 @@ function getParserForCategory(category) { } function* save(fork) { - let [snippet, parser, code] = yield [ + let [snippet, parser, code, transformCode, transformer] = yield [ select(getSnippet), select(getParser), select(getCode), + select(getTransformerCode), + select(getTransformer), ]; if (fork || !snippet) { snippet = new Snippet(); @@ -41,6 +43,12 @@ function* save(fork) { if (code !== parser.category.codeExample) { data.code = code; } + if (transformer) { + data.toolID = transformer.id; + } + if (transformCode && transformCode !== transformer.defaultTransform) { + data.transform = transformCode; + } try { const response = yield snippet.createNewRevision(data); @@ -72,6 +80,14 @@ export function getSnippet(state) { return state.selectedSnippet; } +export function getTransformer(state) { + return state.transform.transformer; +} + +export function getTransformerCode(state) { + return state.transform.code; +} + export function* watchSave() { while (true) { const {fork} = yield take(actions.SAVE); diff --git a/src/store/selectors.js b/src/store/selectors.js index 4c037174..68b8d8a2 100644 --- a/src/store/selectors.js +++ b/src/store/selectors.js @@ -1,5 +1,9 @@ import {createSelector} from 'reselect'; +function getParser(state) { + return state.parser; +} + function getSnippet(state) { return state.selectedSnippet; } @@ -34,42 +38,39 @@ function showTransformer(state) { return state.transform.showTransformer; } -export const canSaveCode = createSelector( - [getRevision, getCode, getCodeExample], - (revision, code, codeExample) => revision ? - revision.get('code') !== code : - codeExample !== code -); - -export const canSaveTransform = createSelector( - [showTransformer, getRevision, getTransformCode, getTransformExample], - (showTransformer, revision, code, codeExample) => { - if (!showTransformer) { - return false; - } - return revision ? - revision.get('transform') !== code : - codeExample !== code -}); - -export const canSave = createSelector( - [canSaveCode, canSaveTransform], - (canSaveCode, canSaveTransform) => canSaveCode || canSaveTransform -); - export const canFork = createSelector( [getSnippet], (snippet) => !!snippet ); -export const defaultValue = createSelector( - [getRevision, getCodeExample, getDroppedText], - (revision, codeExample, droppedText) => revision ? - revision.get('code') : +const defaultValue = createSelector( + [getRevision, getCodeExample, getDroppedText, getParser], + (revision, codeExample, droppedText, parser) => revision ? + revision.get('code') || parser.category.codeExample : (droppedText != null ? droppedText : codeExample) ); +export {defaultValue}; -export const defaultTransformCode = createSelector( +const defaultTransformCode = createSelector( [getRevision, getTransformExample], - (revision, example) => revision ? revision.get('transform') : example + (revision, example) => revision ? + revision.get('transform') || example : + example +); +export {defaultTransformCode}; + +export const canSaveCode = createSelector( + [defaultValue, getCode], + (defaultCode, code) => defaultCode !== code +); + +export const canSaveTransform = createSelector( + [showTransformer, defaultTransformCode, getTransformCode], + (showTransformer, defaultCode, code) => + showTransformer && defaultCode !== code +); + +export const canSave = createSelector( + [canSaveCode, canSaveTransform], + (canSaveCode, canSaveTransform) => canSaveCode || canSaveTransform );