diff --git a/src/components/Window.jsx b/src/components/Window.jsx index 9e78b25..1c2d5df 100644 --- a/src/components/Window.jsx +++ b/src/components/Window.jsx @@ -153,7 +153,7 @@ const Window = ({ id }) => { title={t`Close`} tabIndex={-1} >✕ - {(popUpTypes[windowType]) && ( + {popUpTypes.includes(windowType) && (
{ openPopUp( @@ -224,7 +224,7 @@ const Window = ({ id }) => { > {windowTitle} - {(popUpTypes[windowType]) && ( + {popUpTypes.includes(windowType) && ( import(/* webpackChunkName: "converter" */ '. // eslint-disable-next-line max-len const Modtools = React.lazy(() => import(/* webpackChunkName: "modtools" */ '../Modtools')); -const UserArea = ({ windowId }) => { +const UserArea = ({ args, setArgs, setTitle }) => { const name = useSelector((state) => state.user.name); const userlvl = useSelector((state) => state.user.userlvl); const lastStatsFetch = useSelector((state) => state.ranks.lastFetch); const { activeTab = t`Profile`, - } = useSelector((state) => state.windows.args[windowId] || {}); + } = args; const dispatch = useDispatch(); const setActiveTab = useCallback((label) => { - dispatch(setWindowArgs(windowId, { + setArgs({ activeTab: label, - })); - }, [dispatch]); + }); + }, [setArgs]); useInterval(() => { if (Date.now() - 300000 > lastStatsFetch) { @@ -48,7 +45,7 @@ const UserArea = ({ windowId }) => {
- {(name) ? : } + {(name) ? : }
diff --git a/src/components/windows/popUpAvailable.js b/src/components/windows/popUpAvailable.js index da13d7f..1e6dc0f 100644 --- a/src/components/windows/popUpAvailable.js +++ b/src/components/windows/popUpAvailable.js @@ -7,14 +7,17 @@ export const argsTypes = { CHAT: ['chatChannel'], }; -export function buildPopUpUrl(windowType, args) { +export function buildPopUpUrl(windowType, argsIn) { + const args = { ...argsIn }; let path = `/${windowType.toLowerCase()}`; const typeArr = argsTypes[windowType]; - for (let i = 0; i < typeArr.length; i += 1) { - const key = typeArr[i]; - if (args[key]) { - path += `/${args[key]}`; - delete args[key]; + if (typeArr) { + for (let i = 0; i < typeArr.length; i += 1) { + const key = typeArr[i]; + if (args[key]) { + path += `/${args[key]}`; + delete args[key]; + } } } let searchParams = new URLSearchParams(); diff --git a/src/ssr/PopUp.jsx b/src/ssr/PopUp.jsx index f50d3c0..419ab0d 100644 --- a/src/ssr/PopUp.jsx +++ b/src/ssr/PopUp.jsx @@ -52,7 +52,7 @@ function generatePopUpPage(lang) { - ${t`PixelPlanet.Fun PopUp`} + ${t`ppfun`} diff --git a/src/store/actions/index.js b/src/store/actions/index.js index 1d1ac6a..25fd1cc 100644 --- a/src/store/actions/index.js +++ b/src/store/actions/index.js @@ -147,7 +147,7 @@ export function selectColor(color) { export function selectCanvas(canvasId) { return { - type: 'SELECT_CANVAS', + type: 's/SELECT_CANVAS', canvasId, }; } @@ -286,6 +286,17 @@ export function receiveOnline(online) { }; } +export function sendChatMessage( + text, + channel, +) { + return { + type: 's/REQ_CHAT_MESSAGE', + text, + channel, + }; +} + export function receiveChatMessage( name, text, @@ -463,7 +474,7 @@ export function muteChatChannel(cid) { export function unmuteChatChannel(cid) { return { - type: 'UNs/MUTE_CHAT_CHANNEL', + type: 's/UNMUTE_CHAT_CHANNEL', cid, }; } diff --git a/src/store/actions/windows.js b/src/store/actions/windows.js index 54f2373..c24210b 100644 --- a/src/store/actions/windows.js +++ b/src/store/actions/windows.js @@ -156,7 +156,7 @@ export function cloneWindow(windowId) { export function toggleMaximizeWindow(windowId) { return { - type: 's/TGL_MAXIMIZE_WIN', + type: 'TGL_MAXIMIZE_WIN', windowId, }; } diff --git a/src/store/middleware/extensions.js b/src/store/middleware/extensions.js index cda3b97..5005f05 100644 --- a/src/store/middleware/extensions.js +++ b/src/store/middleware/extensions.js @@ -10,7 +10,7 @@ const pixelPlanetEvents = new EventEmitter(); export default () => (next) => (action) => { switch (action.type) { - case 'SELECT_CANVAS': { + case 's/SELECT_CANVAS': { pixelPlanetEvents.emit('selectcanvas', action.canvasId); break; } diff --git a/src/store/middleware/rendererHook.js b/src/store/middleware/rendererHook.js index 956d484..42a97f5 100644 --- a/src/store/middleware/rendererHook.js +++ b/src/store/middleware/rendererHook.js @@ -48,7 +48,7 @@ export default (store) => (next) => (action) => { switch (type) { case 'RELOAD_URL': - case 'SELECT_CANVAS': + case 's/SELECT_CANVAS': case 'REC_ME': { const renderer = getRenderer(); const { is3D } = state.canvas; diff --git a/src/store/middleware/socketClientHook.js b/src/store/middleware/socketClientHook.js index 40b7939..f4cbb85 100644 --- a/src/store/middleware/socketClientHook.js +++ b/src/store/middleware/socketClientHook.js @@ -32,6 +32,15 @@ export default (store) => (next) => (action) => { break; } + case 's/REQ_CHAT_MESSAGE': { + const { + text, + channel, + } = action; + SocketClient.sendChatMessage(text, channel); + break; + } + default: // nothing } @@ -41,7 +50,7 @@ export default (store) => (next) => (action) => { // executed after reducers switch (action.type) { case 'RELOAD_URL': - case 'SELECT_CANVAS': + case 's/SELECT_CANVAS': case 'REC_ME': { const state = store.getState(); const { canvasId } = state.canvas; diff --git a/src/store/middleware/title.js b/src/store/middleware/title.js index 1883fce..638b4a4 100644 --- a/src/store/middleware/title.js +++ b/src/store/middleware/title.js @@ -40,7 +40,7 @@ export default (store) => (next) => (action) => { } - case 'SELECT_CANVAS': + case 's/SELECT_CANVAS': case 'REC_ME': case 'RELOAD_URL': case 'ON_VIEW_FINISH_CHANGE': { diff --git a/src/store/reducers/canvas.js b/src/store/reducers/canvas.js index 3fab700..47d5ef8 100644 --- a/src/store/reducers/canvas.js +++ b/src/store/reducers/canvas.js @@ -278,7 +278,7 @@ export default function canvasReducer( }; } - case 'SELECT_CANVAS': { + case 's/SELECT_CANVAS': { let { canvasId } = action; const { canvases, prevCanvasCoords, canvasId: prevCanvasId } = state; let canvas = canvases[canvasId]; diff --git a/src/store/reducers/chatRead.js b/src/store/reducers/chatRead.js index 0742db8..1366903 100644 --- a/src/store/reducers/chatRead.js +++ b/src/store/reducers/chatRead.js @@ -142,7 +142,7 @@ export default function chatRead( }; } - case 'UNs/MUTE_CHAT_CHANNEL': { + case 's/UNMUTE_CHAT_CHANNEL': { const { cid } = action; const mute = state.mute.filter((id) => (id !== cid)); return { diff --git a/src/store/reducers/windows.js b/src/store/reducers/windows.js index 1b22d21..4409a43 100644 --- a/src/store/reducers/windows.js +++ b/src/store/reducers/windows.js @@ -409,7 +409,7 @@ export default function windows( }); } - case 's/TGL_MAXIMIZE_WIN': { + case 'TGL_MAXIMIZE_WIN': { const { windowId, } = action; diff --git a/src/store/selectors/popup.js b/src/store/selectors/popup.js index 56f9302..72718a6 100644 --- a/src/store/selectors/popup.js +++ b/src/store/selectors/popup.js @@ -2,6 +2,6 @@ * selectors for single window / popup */ -export const selectWindowType = (state) => state.win.windowType; +export const selectWindowType = (state) => state.popup.windowType; -export const selectWIndowArgs = (state) => state.win.args; +export const selectWIndowArgs = (state) => state.popup.args; diff --git a/src/store/storePopUp.js b/src/store/storePopUp.js index dc83669..68273c6 100644 --- a/src/store/storePopUp.js +++ b/src/store/storePopUp.js @@ -16,16 +16,23 @@ import { persistStore } from 'redux-persist'; import sharedReducers from './sharedReducers'; import canvas from './reducers/canvas'; import popup from './reducers/popup'; +import user from './reducers/user'; +import chat from './reducers/chat'; +import fetching from './reducers/fetching'; /* * middleware */ import parent from './middleware/parent'; +import titlePopUp from './middleware/titlePopUp'; const reducers = combineReducers({ ...sharedReducers, canvas, popup, + user, + chat, + fetching, }); const store = createStore( @@ -33,6 +40,7 @@ const store = createStore( applyMiddleware( thunk, parent, + titlePopUp, ), );