redux-state-utils
Version:
Library to help the creation of states in redux
661 lines (544 loc) • 19.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.autosReducer = autosReducer;
var _reduxUtils = require('../core-utils/redux-utils');
var ReduxUtils = _interopRequireWildcard(_reduxUtils);
var _actions = require('../actions');
var _constants = require('../constants');
var _constants2 = _interopRequireDefault(_constants);
var _fileUtils = require('../core-utils/file-utils');
var _stringUtils = require('../core-utils/string-utils');
var stringUtils = _interopRequireWildcard(_stringUtils);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
const ActionsSuffix = ReduxUtils.ActionsSuffix;
function autosReducer(state, action) {
if (state === undefined) {
state = stateDefault();
}
switch (action.type) {
case _actions.Actions.AUTOS_CLEAR_STATE:
return stateDefault();
case _actions.Actions.AUTOS_SET_PECAS:
return setPecas(action, state);
case _actions.Actions.AUTOS_ADD_PECA:
return addPeca(action, state);
case _actions.Actions.AUTOS_SELECT_PECA:
return selectPeca(action, state);
case _actions.Actions.AUTOS_SELECT_PECA_PAGINA:
return selectPecaPagina(action, state);
case _actions.Actions.AUTOS_SET_PECA_PDF_URL:
return setPecaPdfUrl(action, state);
case _actions.Actions.AUTOS_FETCH_PECA_CONTEUDO_HTML + ActionsSuffix.SUCCESS:
return fetchPecaConteudoHtmlSuccess(action, state);
case _actions.Actions.AUTOS_DELETE_MARCACAO:
return deleteMarcacao(action, state);
case _actions.Actions.AUTOS_CREATE_MARCACAO + ActionsSuffix.SUCCESS:
return createMarcacaoSuccess(action, state);
case _actions.Actions.AUTOS_SELECT_MARCACAO:
return selectMarcacao(action, state);
case _actions.Actions.AUTOS_FETCH_MOVIMENTACOES + ActionsSuffix.SUCCESS:
return fetchMovimentacoes(action, state);
case _actions.Actions.AUTOS_REMOVE_PECA:
return removePeca(action, state);
case _actions.Actions.AUTOS_SELECT_FIRST_PECA:
return selectFirstPeca(action, state);
case _actions.Actions.AUTOS_SET_MARCACAO_SELECIONADA:
return setMarcacaoSelecionada(action, state);
case _actions.Actions.AUTOS_SCROLL_TO_MARCACAO:
return scrollToMarcacao(action, state);
case _actions.Actions.AUTOS_ACCEPT_MARCACAO + ActionsSuffix.SUCCESS:
return acceptMarcacaoSuccess(action, state);
case _actions.Actions.AUTOS_REJECT_MARCACAO + ActionsSuffix.SUCCESS:
return rejectMarcacaoSuccess(action, state);
case _actions.Actions.AUTOS_START_LINK:
return startLink(action, state);
case _actions.Actions.AUTOS_CANCEL_LINK:
return cancelLink(action, state);
case _actions.Actions.AUTOS_CONCLUIR_LINK + ActionsSuffix.SUCCESS:
return concluirLinkSuccess(action, state);
case _actions.Actions.AUTOS_ADD_PAGINA_TO_LINK:
return addPaginaToLink(action, state);
case _actions.Actions.AUTOS_GO_LINK + ActionsSuffix.SUCCESS:
return goLinkSuccess(action, state);
case _actions.Actions.AUTOS_CLOSE_LINK_BAR:
return closeLinkBar(action, state);
case _actions.Actions.AUTOS_BACK_TO_LINK_SUCCESS:
return backToLinkSuccess(action, state);
case _actions.Actions.AUTOS_CLEAR_ACTIVE_LINK_TO_SCROLL:
return clearActiveLinkToScroll(action, state);
case _actions.Actions.AUTOS_ZOOM_IN:
return zoomIn(state);
case _actions.Actions.AUTOS_ZOOM_OUT:
return zoomOut(state);
case _actions.Actions.AUTOS_ACTIVE_PAGE:
return activePage(action, state);
case _actions.Actions.AUTOS_START_PECA_EDIT:
return startPecaEdit(action, state);
case _actions.Actions.AUTOS_SAVE_PECA + ActionsSuffix.SUCCESS:
return savePecaSuccess(action, state);
case _actions.Actions.AUTOS_DELETE_LINK_SUCCESS:
return deleteLinkSuccess(action, state);
case _actions.Actions.AUTOS_CREATE_PECA_AVULSA + ActionsSuffix.SUCCESS:
return createPecaAvulsaSuccess(action, state);
case _actions.Actions.AUTOS_UPDATE_PECA_AVULSA:
return updatePecaAvulsa(action, state);
default:
return state;
}
}
function stateDefault() {
return {
isFetching: false,
pecas: [],
pecasById: {},
pecaSelecionada: {},
navContracted: false,
error: undefined,
movimentacoes: [],
pecaConteudo: {
mimeType: null,
conteudo: null
},
marcacaoSelecionada: null,
marcacaoScroll: null,
linkEmConstrucao: null,
numeroPaginaSelecionada: 1,
zoom: 1,
activePage: 1,
activeLink: null,
activeLinkPecaId: null,
pecaEditingId: null,
pecaAvulsa: null
};
}
function setPecas(action, state) {
const pecas = [...action.pecas];
const pecasById = getElementosById(pecas);
return _extends({}, state, {
pecas: pecas,
pecasById: pecasById
});
}
function addPeca(action, state) {
const pecas = [...state.pecas];
pecas.push(action.peca);
const pecasById = _extends({}, state.pecasById);
pecasById[action.peca.id] = action.peca;
return _extends({}, state, {
pecas: pecas,
pecasById: pecasById
});
}
function selectPeca(action, state) {
const peca = state.pecasById[action.pecaId];
return _extends({}, state, {
pecaSelecionada: _extends({}, peca),
numeroPaginaSelecionada: 1
});
}
function selectPecaPagina(action, state) {
const peca = state.pecasById[action.pecaId];
return _extends({}, state, {
pecaSelecionada: _extends({}, peca),
numeroPaginaSelecionada: action.numeroPagina,
activePage: action.numeroPagina
});
}
function setPecaPdfUrl(action, state) {
let peca = state.pecasById[action.pecaId];
peca = _extends({}, peca);
if (peca.mimeType === _fileUtils.PecaMimeType.PDF) {
let url = _constants2.default.BACKEND + '/service/processo/:processoId/peca/:pecaId/pdf';
url = url.replace(':processoId', action.processoId).replace(':pecaId', peca.id);
peca.url = url;
}
return _extends({}, state, {
pecaSelecionada: peca
});
}
function fetchPecaConteudoHtmlSuccess(action, state) {
const pecasById = _extends({}, state.pecasById);
let pecaSelecionada = pecasById[action.pecaId];
const index = state.pecas.indexOf(pecaSelecionada);
pecaSelecionada = _extends({}, pecaSelecionada);
pecaSelecionada.conteudo = action.data;
const pecas = [...state.pecas];
pecas[index] = pecaSelecionada;
pecasById[action.pecaId] = pecaSelecionada;
return _extends({}, state, {
pecas: pecas,
pecasById: pecasById,
pecaSelecionada: pecaSelecionada
});
}
function deleteMarcacao(action, state) {
let newState = _extends({}, state);
let pecas = ReduxUtils.cloneProperty(newState, 'pecas');
let peca = ReduxUtils.cloneItemArrayById(pecas, action.pecaId);
let marcacoes = ReduxUtils.cloneProperty(peca, 'marcacoes');
ReduxUtils.deleteItemArrayById(marcacoes, action.marcacaoId);
let pecaSelecionada = ReduxUtils.cloneProperty(newState, 'pecaSelecionada');
if (pecaSelecionada.id === peca.id) {
pecaSelecionada.marcacoes = marcacoes;
}
let pecasById = ReduxUtils.cloneProperty(newState, 'pecasById');
pecasById[action.pecaId] = peca;
return newState;
}
function createMarcacaoSuccess(action, state) {
let newState = _extends({}, state);
const marcacao = action.data.marcacao;
let pecaSelecionada = ReduxUtils.cloneProperty(newState, 'pecaSelecionada');
let marcacoes = ReduxUtils.cloneProperty(pecaSelecionada, 'marcacoes');
marcacoes.push(marcacao);
pecaSelecionada.marcacoes = marcacoes;
newState.marcacaoSelecionada = marcacao;
newState.pecaSelecionada = pecaSelecionada;
let pecas = ReduxUtils.cloneProperty(newState, 'pecas');
let peca = ReduxUtils.cloneItemArrayById(pecas, action.data.peca.id);
const index = pecas.indexOf(peca);
pecas[index] = pecaSelecionada;
newState.pecas = pecas;
let pecasById = ReduxUtils.cloneProperty(newState, 'pecasById');
pecasById[action.data.peca.id] = pecaSelecionada;
newState.pecasById = pecasById;
return newState;
}
function selectMarcacao(action, state) {
const marcacoes = state.pecaSelecionada.marcacoes;
const marcacaoSelecionada = ReduxUtils.findItemById(marcacoes, action.marcacaoId);
return _extends({}, state, {
marcacaoSelecionada: marcacaoSelecionada
});
}
function fetchMovimentacoes(action, state) {
return _extends({}, state, {
movimentacoes: action.data
});
}
function removePeca(action, state) {
const peca = ReduxUtils.findItemById(state.pecas, action.pecaId);
const indexPeca = state.pecas.indexOf(peca);
const pecas = [...state.pecas];
pecas.splice(indexPeca, 1);
return _extends({}, state, {
pecas: pecas
});
}
function selectFirstPeca(action, state) {
const peca = _extends({}, state.pecas[0]);
return _extends({}, state, {
pecaSelecionada: peca
});
}
function setMarcacaoSelecionada(action, state) {
const pecaSelecionada = state.pecaSelecionada;
const marcacaoSelecionada = ReduxUtils.findItemById(pecaSelecionada.marcacoes, action.marcacaoId);
return _extends({}, state, {
marcacaoSelecionada: marcacaoSelecionada
});
}
function scrollToMarcacao(action, state) {
const pecaSelecionada = state.pecaSelecionada;
const marcacaoScroll = ReduxUtils.findItemById(pecaSelecionada.marcacoes, action.marcacaoId);
return _extends({}, state, {
marcacaoScroll: marcacaoScroll
});
}
function acceptMarcacaoSuccess(action, state) {
let marcacaoId = action.marcacaoId,
pecaId = action.pecaId;
let newState = _extends({}, state);
let pecas = ReduxUtils.cloneProperty(newState, 'pecas');
let peca = ReduxUtils.cloneItemArrayById(pecas, pecaId);
let marcacoes = ReduxUtils.cloneProperty(peca, 'marcacoes');
let marcacao = ReduxUtils.cloneItemArrayById(marcacoes, marcacaoId);
marcacao.sugerida = false;
peca.marcacoes = marcacoes;
newState.pecaSelecionada = peca;
let pecasById = ReduxUtils.cloneProperty(newState, 'pecasById');
pecasById[action.pecaId] = peca;
return newState;
}
function rejectMarcacaoSuccess(action, state) {
let marcacaoId = action.marcacaoId,
pecaId = action.pecaId;
let newState = _extends({}, state);
let pecas = ReduxUtils.cloneProperty(newState, 'pecas');
let peca = ReduxUtils.cloneItemArrayById(pecas, pecaId);
let marcacoes = ReduxUtils.cloneProperty(peca, 'marcacoes');
ReduxUtils.deleteItemArrayById(marcacoes, marcacaoId);
peca.marcacoes = marcacoes;
newState.pecaSelecionada = peca;
let pecasById = ReduxUtils.cloneProperty(newState, 'pecasById');
pecasById[action.pecaId] = peca;
newState.marcacaoSelecionada = null;
return newState;
}
function startLink(action, state) {
const linkEmConstrucao = {
pecaId: state.pecaSelecionada.id,
selecao: action.selecao,
totalAlvos: 0
};
return _extends({}, state, {
linkEmConstrucao: linkEmConstrucao
});
}
function cancelLink(action, state) {
removePaginasEmConstrucao(state);
const pecas = [...state.pecas];
return _extends({}, state, {
linkEmConstrucao: null,
pecas: pecas
});
}
function concluirLinkSuccess(action, state) {
const linkEmConstrucao = state.linkEmConstrucao;
const pecaId = linkEmConstrucao.pecaId;
const peca = state.pecasById[pecaId];
const link = action.data;
peca.links.push(link);
confirmPaginasEmConstrucao(state);
const pecas = [...state.pecas];
return _extends({}, state, {
linkEmConstrucao: null,
activeLinkToScroll: link,
pecas: pecas
});
}
function addPaginaToLink(action, state) {
const linkEmConstrucao = _extends({}, state.linkEmConstrucao);
const pecaSelecionada = _extends({}, state.pecaSelecionada);
if (!pecaSelecionada.paginasAlvo) {
pecaSelecionada.paginasAlvo = {};
} else {
pecaSelecionada.paginasAlvo = _extends({}, pecaSelecionada.paginasAlvo);
}
if (pecaSelecionada.paginasAlvo[action.numero]) {
pecaSelecionada.paginasAlvo[action.numero].emConstrucao = true;
} else {
const descricao = stringUtils.upperFirst(linkEmConstrucao.selecao.conteudo);
pecaSelecionada.paginasAlvo[action.numero] = {
descricao: descricao,
emConstrucao: true
};
}
const index = getIndexPecaSelecionada(state);
const pecas = [...state.pecas];
pecas[index] = pecaSelecionada;
const pecasById = getElementosById(pecas);
linkEmConstrucao.totalAlvos++;
return _extends({}, state, {
linkEmConstrucao: linkEmConstrucao,
pecaSelecionada: pecaSelecionada,
pecas: pecas,
pecasById: pecasById
});
}
function goLinkSuccess(action, state) {
const link = action.link;
const firstAlvo = link.alvos[0];
addPaginaInicialToAlvos(state, link.alvos);
return _extends({}, state, {
activeLink: link,
activeLinkPecaId: action.pecaId,
numeroPaginaSelecionada: firstAlvo.pagina,
activePage: firstAlvo.pagina
});
}
function closeLinkBar(action, state) {
return _extends({}, state, {
activeLink: null,
activeLinkPecaId: null
});
}
function backToLinkSuccess(action, state) {
const pecaId = state.activeLinkPecaId;
const pecasById = _extends({}, state.pecasById);
const pecaSelecionada = _extends({}, pecasById[pecaId]);
return _extends({}, state, {
activeLink: null,
activeLinkToScroll: state.activeLink,
activeLinkPecaId: null,
pecaSelecionada: pecaSelecionada
});
}
function clearActiveLinkToScroll(action, state) {
return _extends({}, state, {
activeLinkToScroll: null
});
}
function zoomIn(state) {
let zoom = state.zoom += 0.1;
zoom = zoom < 5 ? zoom : 5;
return _extends({}, state, {
zoom: zoom
});
}
function zoomOut(state) {
let zoom = state.zoom -= 0.1;
zoom = zoom > 0.2 ? zoom : 0.2;
return _extends({}, state, {
zoom: zoom
});
}
function activePage(action, state) {
return _extends({}, state, {
activePage: action.page
});
}
function startPecaEdit(action, state) {
return _extends({}, state, {
pecaEditingId: action.pecaId
});
}
function savePecaSuccess(action, state) {
const pecaEdited = findPecaById(state, state.pecaEditingId);
pecaEdited.descricao = action.descricao;
const pecas = [...state.pecas];
const index = pecas.indexOf(pecaEdited);
pecas[index] = _extends({}, pecaEdited);
const pecasById = getElementosById(pecas);
return _extends({}, state, {
pecaEditingId: null,
pecas: pecas,
pecasById: pecasById
});
}
function deleteLinkSuccess(action, state) {
const pecasAlvosDeletados = deletePaginaAlvo(action, state);
const pecasLinksDeletados = deletePecaLink(pecasAlvosDeletados, state);
return _extends({}, state, {
'pecas': pecasLinksDeletados,
'pecasById': getElementosById(pecasLinksDeletados),
activeLink: null
});
}
function createPecaAvulsaSuccess(action, state) {
const pecaAvulsa = action.pecaAvulsa;
const peca = {
id: action.pecaAvulsa.id,
descricao: 'Peca em Elaboração',
polo: 'JUIZ',
principal: true,
data: Date.now(),
marcacoes: []
};
const pecas = [...state.pecas];
pecas.push(peca);
return _extends({}, state, {
pecaAvulsa: pecaAvulsa,
pecas: pecas
});
}
function updatePecaAvulsa(action, state) {
const pecaAvulsa = action.pecaAvulsa;
return _extends({}, state, {
pecaAvulsa: pecaAvulsa
});
}
function deletePaginaAlvo(action, state) {
const alvosIdToDelete = action.data;
const pecas = [];
for (const peca of state.pecas) {
let pecaAlterada = false;
for (const pagina in peca.paginasAlvo) {
const alvo = peca.paginasAlvo[pagina];
if (alvosIdToDelete.includes(alvo.id)) {
delete peca.paginasAlvo[pagina];
pecaAlterada = true;
}
}
if (pecaAlterada) {
let pecaClone = _extends({}, peca);
pecas.push(pecaClone);
} else {
pecas.push(peca);
}
}
return pecas;
}
function deletePecaLink(pecas, state) {
const peca = pecas.find(p => p.id === state.activeLinkPecaId);
for (let i = 0; i < peca.links.length; i++) {
const link = peca.links[i];
if (link.id === state.activeLink.id) {
peca.links.splice(i, 1);
}
}
return pecas;
}
// uteis ====================
function getElementosById(elementos) {
let elementosById = {};
for (let i = 0; i < elementos.length; i++) {
let elemento = elementos[i];
elementosById[elemento.id] = elemento;
}
return elementosById;
}
function getIndexPecaSelecionada(state) {
const pecaSelecionadaId = state.pecaSelecionada.id;
for (let i = 0; i < state.pecas.length; i++) {
if (state.pecas[i].id === pecaSelecionadaId) {
return i;
}
}
throw {
type: 'ERROR',
title: 'Não existe peça selecionada'
};
}
function removePaginasEmConstrucao(state) {
for (let i = 0; i < state.pecas.length; i++) {
const peca = state.pecas[i];
if (!peca.paginasAlvo) {
continue;
}
for (const numero in peca.paginasAlvo) {
const pagina = peca.paginasAlvo[numero];
if (pagina.emConstrucao) {
if (pagina.id) {
delete pagina.emConstrucao;
} else {
delete peca.paginasAlvo[numero];
}
}
}
}
}
function confirmPaginasEmConstrucao(state) {
for (let i = 0; i < state.pecas.length; i++) {
const peca = state.pecas[i];
if (!peca.paginasAlvo) {
continue;
}
for (const numero in peca.paginasAlvo) {
const pagina = peca.paginasAlvo[numero];
if (pagina.emConstrucao) {
pagina.emConstrucao = false;
delete pagina.emConstrucao;
}
}
}
}
function addPaginaInicialToAlvos(state, alvos) {
const pecasById = state.pecasById;
alvos.forEach(item => {
item.paginaInicial = pecasById[item.pecaId].paginaInicial;
});
}
function findPecaById(state, pecaId) {
for (let i = 0; i < state.pecas.length; i++) {
const peca = state.pecas[i];
if (peca.id === pecaId) {
return peca;
}
}
return null;
}