feat: Add internal runtime configuration

This commit is contained in:
Maksim Eltyshev
2026-01-22 18:02:42 +01:00
parent b852481850
commit 1264fd5715
79 changed files with 561 additions and 122 deletions
+16
View File
@@ -0,0 +1,16 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import { put } from 'redux-saga/effects';
import actions from '../../../actions';
export function* handleBootstrapUpdate(bootstrap) {
yield put(actions.handleBootstrapUpdate(bootstrap));
}
export default {
handleBootstrapUpdate,
};
+2
View File
@@ -5,6 +5,7 @@
import router from './router';
import socket from './socket';
import bootstrap from './bootstrap';
import core from './core';
import modals from './modals';
import config from './config';
@@ -33,6 +34,7 @@ import notificationServices from './notification-services';
export default {
...router,
...socket,
...bootstrap,
...core,
...modals,
...config,
+12
View File
@@ -16,6 +16,17 @@ import mergeRecords from '../../../utils/merge-records';
import { isUserAdminOrProjectOwner } from '../../../utils/record-helpers';
import { UserRoles } from '../../../constants/Enums';
export function* handleUsersReset() {
let users;
try {
({ items: users } = yield call(request, api.getUsers));
} catch {
return;
}
yield put(actions.handleUsersReset(users));
}
export function* createUser(data) {
yield put(actions.createUser(data));
@@ -491,6 +502,7 @@ export function* removeUserFromFilterInCurrentBoard(id) {
}
export default {
handleUsersReset,
createUser,
handleUserCreate,
clearUserCreateError,
+17
View File
@@ -0,0 +1,17 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import { all, takeEvery } from 'redux-saga/effects';
import services from '../services';
import EntryActionTypes from '../../../constants/EntryActionTypes';
export default function* bootstrapWatchers() {
yield all([
takeEvery(EntryActionTypes.BOOTSTRAP_UPDATE_HANDLE, ({ payload: { bootstrap } }) =>
services.handleBootstrapUpdate(bootstrap),
),
]);
}
+2
View File
@@ -5,6 +5,7 @@
import router from './router';
import socket from './socket';
import bootstrap from './bootstrap';
import core from './core';
import modals from './modals';
import config from './config';
@@ -33,6 +34,7 @@ import notificationServices from './notification-services';
export default [
router,
socket,
bootstrap,
core,
modals,
config,
+14
View File
@@ -25,6 +25,10 @@ const createSocketEventsChannel = () =>
emit(entryActions.logout(false));
};
const handleBootstrapUpdate = ({ item }) => {
emit(entryActions.handleBootstrapUpdate(item));
};
const handleConfigUpdate = ({ item }) => {
emit(entryActions.handleConfigUpdate(item));
};
@@ -41,6 +45,10 @@ const createSocketEventsChannel = () =>
emit(entryActions.handleWebhookDelete(item));
};
const handleUsersReset = () => {
emit(entryActions.handleUsersReset());
};
const handleUserCreate = ({ item }) => {
emit(entryActions.handleUserCreate(item));
};
@@ -290,12 +298,15 @@ const createSocketEventsChannel = () =>
socket.on('logout', handleLogout);
socket.on('bootstrapUpdate', handleBootstrapUpdate);
socket.on('configUpdate', handleConfigUpdate);
socket.on('webhookCreate', handleWebhookCreate);
socket.on('webhookUpdate', handleWebhookUpdate);
socket.on('webhookDelete', handleWebhookDelete);
socket.on('usersReset', handleUsersReset);
socket.on('userCreate', handleUserCreate);
socket.on('userUpdate', handleUserUpdate);
socket.on('userDelete', handleUserDelete);
@@ -384,12 +395,15 @@ const createSocketEventsChannel = () =>
socket.off('logout', handleLogout);
socket.off('bootstrapUpdate', handleBootstrapUpdate);
socket.off('configUpdate', handleConfigUpdate);
socket.off('webhookCreate', handleWebhookCreate);
socket.off('webhookUpdate', handleWebhookUpdate);
socket.off('webhookDelete', handleWebhookDelete);
socket.off('usersReset', handleUsersReset);
socket.off('userCreate', handleUserCreate);
socket.off('userUpdate', handleUserUpdate);
socket.off('userDelete', handleUserDelete);
+1
View File
@@ -10,6 +10,7 @@ import EntryActionTypes from '../../../constants/EntryActionTypes';
export default function* usersWatchers() {
yield all([
takeEvery(EntryActionTypes.USERS_RESET_HANDLE, () => services.handleUsersReset()),
takeEvery(EntryActionTypes.USER_CREATE, ({ payload: { data } }) => services.createUser(data)),
takeEvery(EntryActionTypes.USER_CREATE_HANDLE, ({ payload: { user } }) =>
services.handleUserCreate(user),