summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/ide/stores/modules/file_templates/actions.js
blob: dd53213ed18a4ff734635780faa6fef60e77782c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import Api from '~/api';
import { __ } from '~/locale';
import * as types from './mutation_types';
import eventHub from '../../../eventhub';

export const requestTemplateTypes = ({ commit }) => commit(types.REQUEST_TEMPLATE_TYPES);
export const receiveTemplateTypesError = ({ commit, dispatch }) => {
  commit(types.RECEIVE_TEMPLATE_TYPES_ERROR);
  dispatch(
    'setErrorMessage',
    {
      text: __('Error loading template types.'),
      action: () =>
        dispatch('fetchTemplateTypes').then(() =>
          dispatch('setErrorMessage', null, { root: true }),
        ),
      actionText: __('Please try again'),
    },
    { root: true },
  );
};
export const receiveTemplateTypesSuccess = ({ commit }, templates) =>
  commit(types.RECEIVE_TEMPLATE_TYPES_SUCCESS, templates);

export const fetchTemplateTypes = ({ dispatch, state }) => {
  if (!Object.keys(state.selectedTemplateType).length) return Promise.reject();

  dispatch('requestTemplateTypes');

  return Api.templates(state.selectedTemplateType.key)
    .then(({ data }) => dispatch('receiveTemplateTypesSuccess', data))
    .catch(() => dispatch('receiveTemplateTypesError'));
};

export const setSelectedTemplateType = ({ commit, dispatch, rootGetters }, type) => {
  commit(types.SET_SELECTED_TEMPLATE_TYPE, type);

  if (rootGetters.activeFile.prevPath === type.name) {
    dispatch('discardFileChanges', rootGetters.activeFile.path, { root: true });
  } else if (rootGetters.activeFile.name !== type.name) {
    dispatch(
      'renameEntry',
      {
        path: rootGetters.activeFile.path,
        name: type.name,
      },
      { root: true },
    );
  }
};

export const receiveTemplateError = ({ dispatch }, template) => {
  dispatch(
    'setErrorMessage',
    {
      text: __('Error loading template.'),
      action: payload =>
        dispatch('fetchTemplateTypes', payload).then(() =>
          dispatch('setErrorMessage', null, { root: true }),
        ),
      actionText: __('Please try again'),
      actionPayload: template,
    },
    { root: true },
  );
};

export const fetchTemplate = ({ dispatch, state }, template) => {
  if (template.content) {
    return dispatch('setFileTemplate', template);
  }

  return Api.templates(`${state.selectedTemplateType.key}/${template.key || template.name}`)
    .then(({ data }) => {
      dispatch('setFileTemplate', data);
    })
    .catch(() => dispatch('receiveTemplateError', template));
};

export const setFileTemplate = ({ dispatch, commit, rootGetters }, template) => {
  dispatch(
    'changeFileContent',
    { path: rootGetters.activeFile.path, content: template.content },
    { root: true },
  );
  commit(types.SET_UPDATE_SUCCESS, true);
  eventHub.$emit(`editor.update.model.new.content.${rootGetters.activeFile.key}`, template.content);
};

export const undoFileTemplate = ({ dispatch, commit, rootGetters }) => {
  const file = rootGetters.activeFile;

  dispatch('changeFileContent', { path: file.path, content: file.raw }, { root: true });
  commit(types.SET_UPDATE_SUCCESS, false);

  eventHub.$emit(`editor.update.model.new.content.${file.key}`, file.raw);

  if (file.prevPath) {
    dispatch('discardFileChanges', file.path, { root: true });
  }
};

// prevent babel-plugin-rewire from generating an invalid default during karma tests
export default () => {};