From 23231a6e5bc3c39d16582cd23c5bc9d546c1ea8a Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Sun, 10 Apr 2022 17:15:08 +0200 Subject: [PATCH 01/34] feat: improve styling of saved section --- .../sections/results/table/ResultTable.jsx | 1 + .../sections/results/table/ResultTableRow.jsx | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/components/sections/results/table/ResultTable.jsx b/src/components/sections/results/table/ResultTable.jsx index 04c244439..29eab7eb2 100644 --- a/src/components/sections/results/table/ResultTable.jsx +++ b/src/components/sections/results/table/ResultTable.jsx @@ -250,6 +250,7 @@ const StickyHeadTable = () => { {saved.map((character, i) => { return ( Math.round(num * 100) / 100; const ResultTableRow = ({ @@ -22,6 +22,7 @@ const ResultTableRow = ({ compareByPercent, displayExtras, displayAttributes, + savedSection, }) => { const dispatch = useDispatch(); @@ -36,6 +37,16 @@ const ResultTableRow = ({ }` : ''; + const SavedComponent = React.memo( + savedSection + ? ({ onClick }) => ( + + + + ) + : StarRoundedIcon, + ); + return ( - Date: Sun, 10 Apr 2022 17:33:27 +0200 Subject: [PATCH 02/34] fix: pointer cursor correct image --- src/components/sections/results/table/ResultTable.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/sections/results/table/ResultTable.jsx b/src/components/sections/results/table/ResultTable.jsx index 29eab7eb2..2c70b474d 100644 --- a/src/components/sections/results/table/ResultTable.jsx +++ b/src/components/sections/results/table/ResultTable.jsx @@ -187,7 +187,7 @@ const StickyHeadTable = () => { {list.map((character, i) => { @@ -244,7 +244,7 @@ const StickyHeadTable = () => { {saved.map((character, i) => { From ee21eae73f04bca8937713f1052ce524da3d6e7c Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Sun, 10 Apr 2022 22:58:07 +0200 Subject: [PATCH 03/34] feat: initial draft for IO menu --- .../SavedResultManager/SavedResultManager.jsx | 222 ++++++++++++++++++ .../SavedResultManager/localStorage.js | 18 ++ .../sections/results/table/ResultTable.jsx | 18 +- .../sections/results/table/ResultTableRow.jsx | 9 +- src/state/slices/controlsSlice.js | 9 + 5 files changed, 271 insertions(+), 5 deletions(-) create mode 100644 src/components/sections/results/SavedResultManager/SavedResultManager.jsx create mode 100644 src/components/sections/results/SavedResultManager/localStorage.js diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx new file mode 100644 index 000000000..08d8526fc --- /dev/null +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -0,0 +1,222 @@ +import { Profession } from '@discretize/gw2-ui-new'; +import ArrowCircleUpIcon from '@mui/icons-material/ArrowCircleUp'; +import ClearIcon from '@mui/icons-material/Clear'; +import CloseIcon from '@mui/icons-material/Close'; +import ContentCopyIcon from '@mui/icons-material/ContentCopy'; +import SaveIcon from '@mui/icons-material/Save'; +import { + Button, + Checkbox, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Fade, + IconButton, + Input, + Table, + TableBody, + TableCell, + TableHead, + TableRow, + Tooltip, + Typography, +} from '@mui/material'; +import React from 'react'; +import { Trans, useTranslation } from 'react-i18next'; +import { useDispatch, useSelector } from 'react-redux'; +import { makeStyles } from 'tss-react/mui'; +import { + addToSaved, + getSaved, + getSelectedTemplate, + removeFromSaved, +} from '../../../../state/slices/controlsSlice'; +import { getAll, save } from './localStorage'; + +const useStyles = makeStyles()((theme) => ({})); + +export default function SavedResultManager({ isOpen, setOpen }) { + const { t } = useTranslation(); + const { classes } = useStyles(); + const dispatch = useDispatch(); + + const [stored, setStored] = React.useState(getAll()); + const [marked, setMarked] = React.useState(new Array(stored.length).fill(false)); + + const temporarySaved = useSelector(getSaved); + const selectedTemplate = useSelector(getSelectedTemplate); + + React.useEffect(() => { + save(stored); + }, [stored]); + + const handleClose = () => setOpen(false); + const handleNameChange = (index) => (event) => { + const newStored = [...stored]; + newStored[index].name = event.target.value; + setStored(newStored); + }; + const handleCopy = (character) => () => { + navigator.clipboard.writeText(JSON.stringify(character, null, 2)); + }; + const handleDelete = (character) => () => { + setStored(stored.filter((storedBuild) => storedBuild.character.id !== character.id)); + }; + const handleDeleteTemporary = (character) => () => { + dispatch(removeFromSaved(character)); + }; + const handleCopyToTemporary = (character) => () => { + dispatch(addToSaved(character)); + }; + const handleMarkChange = (index) => (event) => { + const newChecked = [...marked]; + newChecked[index] = event.target.checked; + setMarked(newChecked); + }; + const handleDownload = () => { + // https://gist.github.com/alexreiling/64a99f3b064ca0ad53db0ab153e6ee49 + const selected = stored.filter((_, index) => marked[index]); + const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(selected))}`; + const downloadAnchorNode = document.createElement('a'); + downloadAnchorNode.setAttribute('href', dataStr); + downloadAnchorNode.setAttribute('download', `GearOptimizerBuilds.json`); + document.body.appendChild(downloadAnchorNode); // required for firefox + downloadAnchorNode.click(); + downloadAnchorNode.remove(); + }; + return ( + + + + Saved Results Manager + + + + + + + + + Current temporary saved builds + + + + + + + Damage + + + + + {temporarySaved.map((character) => ( + + + + + {Math.round(character.results.value)} + + + { + setStored([ + ...stored, + { + name: selectedTemplate || character.settings.specialization, + character, + }, + ]); + }} + > + + + + + + + + + + + + ))} + +
+ + + Persistently saved builds + + + + + + + + Name + + + Damage + + + + + {stored.map(({ name, character }, index) => ( + + + + + + + + + + + {Math.round(character.results.value)} + + + + + + + + + + + + + + + + + + + + + ))} + +
+ + +
+ + + +
+ ); +} diff --git a/src/components/sections/results/SavedResultManager/localStorage.js b/src/components/sections/results/SavedResultManager/localStorage.js new file mode 100644 index 000000000..eb4a3952c --- /dev/null +++ b/src/components/sections/results/SavedResultManager/localStorage.js @@ -0,0 +1,18 @@ +/* eslint-disable import/prefer-default-export */ +const KEY = 'savedResults'; + +export function getAll() { + if (typeof window === 'undefined') return []; + let stored = []; + try { + stored = JSON.parse(localStorage.getItem(KEY) || '[]'); + } catch (e) { + console.warn('There was a problem loading the saved characters from your disk!'); + } + return stored; +} + +export function save(stored) { + if (typeof window === 'undefined') return; + localStorage.setItem(KEY, JSON.stringify(stored)); +} diff --git a/src/components/sections/results/table/ResultTable.jsx b/src/components/sections/results/table/ResultTable.jsx index 2c70b474d..df7078069 100644 --- a/src/components/sections/results/table/ResultTable.jsx +++ b/src/components/sections/results/table/ResultTable.jsx @@ -1,12 +1,13 @@ import { TextDivider } from '@discretize/react-discretize-components'; -import { Box } from '@mui/material'; +import ManageAccountsIcon from '@mui/icons-material/ManageAccounts'; +import { Box, IconButton, Typography } from '@mui/material'; import Table from '@mui/material/Table'; import TableBody from '@mui/material/TableBody'; import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; import classNames from 'classnames'; import React from 'react'; -import { useTranslation } from 'react-i18next'; +import { Trans, useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; import { @@ -19,6 +20,7 @@ import { getSelectedCharacter, getTallTable, } from '../../../../state/slices/controlsSlice'; +import SavedResultManager from '../SavedResultManager/SavedResultManager'; import ResultTableHeaderRow from './ResultTableHeaderRow'; import ResultTableRow from './ResultTableRow'; @@ -77,6 +79,8 @@ const emptyArray = []; const StickyHeadTable = () => { const { classes } = useStyles(); + const [managerOpen, setManagerOpen] = React.useState(false); + const { t } = useTranslation(); const selectedCharacter = useSelector(getSelectedCharacter); const normalList = useSelector(getList) || emptyArray; @@ -219,7 +223,15 @@ const StickyHeadTable = () => { {saved.length ? ( <> - + + + Saved Results + + setManagerOpen(true)}> + + + + Math.round(num * 100) / 100; @@ -71,7 +75,8 @@ const ResultTableRow = ({ } } onClick={(e) => { - dispatch(toggleSaved(character)); + if (savedSection) dispatch(removeFromSaved(character)); + else dispatch(toggleSaved(character)); e.stopPropagation(); }} /> diff --git a/src/state/slices/controlsSlice.js b/src/state/slices/controlsSlice.js index 4e4b3997f..c1ac1f4a5 100644 --- a/src/state/slices/controlsSlice.js +++ b/src/state/slices/controlsSlice.js @@ -115,6 +115,13 @@ export const controlSlice = createSlice({ state.saved.push(action.payload); } }, + addToSaved: (state, action) => { + state.saved.push(action.payload); + }, + removeFromSaved: (state, action) => { + const originalSaved = original(state.saved); + state.saved = originalSaved.filter((character) => character !== action.payload); + }, changeCompareByPercent: (state, action) => { state.compareByPercent = action.payload; }, @@ -167,6 +174,8 @@ export const { changeDisplayAttributes, changeTallTable, toggleSaved, + addToSaved, + removeFromSaved, changeCompareByPercent, setBuildTemplate, changeSelectedCharacter, From 340e91d2d88b221777cd83fd753d70cb0fc324de Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 00:31:53 +0200 Subject: [PATCH 04/34] feat: add profession icon to saved results --- src/components/sections/results/table/ResultTableRow.jsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/sections/results/table/ResultTableRow.jsx b/src/components/sections/results/table/ResultTableRow.jsx index d39f400e8..53ca1a457 100644 --- a/src/components/sections/results/table/ResultTableRow.jsx +++ b/src/components/sections/results/table/ResultTableRow.jsx @@ -1,4 +1,5 @@ -import { Item } from '@discretize/gw2-ui-new'; +import { Item, Profession } from '@discretize/gw2-ui-new'; +import CloseIcon from '@mui/icons-material/Close'; import StarRoundedIcon from '@mui/icons-material/StarRounded'; import { IconButton, Typography } from '@mui/material'; import TableCell from '@mui/material/TableCell'; @@ -13,7 +14,7 @@ import { toggleSaved, } from '../../../../state/slices/controlsSlice'; import { extrasTypes } from '../../../../state/slices/extras'; -import CloseIcon from '@mui/icons-material/Close'; + const roundTwo = (num) => Math.round(num * 100) / 100; const ResultTableRow = ({ @@ -82,6 +83,7 @@ const ResultTableRow = ({ />
+ {savedSection && }{' '} {value.toFixed(0)} {comparisonText ? ( @@ -103,6 +105,7 @@ const ResultTableRow = ({ ))} + {character.gear.length < 14 && } {character.infusions ? Object.values(character.infusions).map((element, index) => ( // eslint-disable-next-line react/no-array-index-key From e19ff12c659ab5b23b847aaf420d5b86549d4171 Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 00:56:18 +0200 Subject: [PATCH 05/34] styling: backgorund of tables --- .../SavedResultManager/SavedResultManager.jsx | 197 +++++++++--------- .../sections/results/table/ResultTable.jsx | 1 - 2 files changed, 104 insertions(+), 94 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 08d8526fc..38081237b 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -17,6 +17,7 @@ import { Table, TableBody, TableCell, + TableContainer, TableHead, TableRow, Tooltip, @@ -34,7 +35,13 @@ import { } from '../../../../state/slices/controlsSlice'; import { getAll, save } from './localStorage'; -const useStyles = makeStyles()((theme) => ({})); +const useStyles = makeStyles()((theme) => ({ + container: { + borderColor: theme.palette.background.paper, + border: '1px solid inherit', + backgroundColor: theme.palette.background.default, + }, +})); export default function SavedResultManager({ isOpen, setOpen }) { const { t } = useTranslation(); @@ -110,107 +117,111 @@ export default function SavedResultManager({ isOpen, setOpen }) { Current temporary saved builds - - - - - Damage - - - - - {temporarySaved.map((character) => ( - - - - - {Math.round(character.results.value)} - - - { - setStored([ - ...stored, - { - name: selectedTemplate || character.settings.specialization, - character, - }, - ]); - }} - > - - - + +
+ + + + Damage + + + + + {temporarySaved.map((character) => ( + + + + + {Math.round(character.results.value)} + + + { + setStored([ + ...stored, + { + name: selectedTemplate || character.settings.specialization, + character, + }, + ]); + }} + > + + + - - - - - - - - ))} - -
+ + + + + +
+
+ ))} + + + Persistently saved builds - - - - - - Name - - - Damage - - - - - {stored.map(({ name, character }, index) => ( - - - - - - - - - - - {Math.round(character.results.value)} - - - - - - + +
+ + + + + Name + + + Damage + + + + + {stored.map(({ name, character }, index) => ( + + + + + + + + + + + {Math.round(character.results.value)} + + + + + + - - - - - + + + + + - - - - - - - - ))} - -
+ + + + + + + + ))} + + + - diff --git a/src/components/sections/results/table/ResultTable.jsx b/src/components/sections/results/table/ResultTable.jsx index df7078069..dabe71cda 100644 --- a/src/components/sections/results/table/ResultTable.jsx +++ b/src/components/sections/results/table/ResultTable.jsx @@ -1,4 +1,3 @@ -import { TextDivider } from '@discretize/react-discretize-components'; import ManageAccountsIcon from '@mui/icons-material/ManageAccounts'; import { Box, IconButton, Typography } from '@mui/material'; import Table from '@mui/material/Table'; From 920015a8c1bfa9c729ab77cb2a47573f7dbf6edb Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 01:08:17 +0200 Subject: [PATCH 06/34] styling: adjust icon size --- .../SavedResultManager/SavedResultManager.jsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 38081237b..4f9923f39 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -146,13 +146,13 @@ export default function SavedResultManager({ isOpen, setOpen }) { ]); }} > - + - + @@ -198,20 +198,20 @@ export default function SavedResultManager({ isOpen, setOpen }) { {Math.round(character.results.value)} - - + + - - + + - + From aea54c96638dc39f93854145d8f4f2d974fbc135 Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 01:13:33 +0200 Subject: [PATCH 07/34] fix: add locally saved ones to the front of the existing list --- .../SavedResultManager/SavedResultManager.jsx | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 4f9923f39..1a7b1cf83 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -59,6 +59,15 @@ export default function SavedResultManager({ isOpen, setOpen }) { }, [stored]); const handleClose = () => setOpen(false); + const handleSaveLocally = (character) => () => { + setStored([ + { + name: selectedTemplate || character.settings.specialization, + character, + }, + ...stored, + ]); + }; const handleNameChange = (index) => (event) => { const newStored = [...stored]; newStored[index].name = event.target.value; @@ -128,24 +137,14 @@ export default function SavedResultManager({ isOpen, setOpen }) { {temporarySaved.map((character) => ( - + {Math.round(character.results.value)} - { - setStored([ - ...stored, - { - name: selectedTemplate || character.settings.specialization, - character, - }, - ]); - }} - > + @@ -181,7 +180,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { {stored.map(({ name, character }, index) => ( - + From f96f8e4ce97c84f0466e217232029b1a78982429 Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 12:51:37 +0200 Subject: [PATCH 08/34] feat: more infos shown in saved results manager --- .../SavedResultManager/SavedResultManager.jsx | 121 ++++++++++++++---- .../sections/results/table/ResultTable.jsx | 106 +++++++-------- 2 files changed, 142 insertions(+), 85 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 1a7b1cf83..a9e3459e3 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -1,10 +1,11 @@ -import { Profession } from '@discretize/gw2-ui-new'; +import { Item, Profession, Specialization, Tooltip as Gw2Tooltip } from '@discretize/gw2-ui-new'; import ArrowCircleUpIcon from '@mui/icons-material/ArrowCircleUp'; import ClearIcon from '@mui/icons-material/Clear'; import CloseIcon from '@mui/icons-material/Close'; import ContentCopyIcon from '@mui/icons-material/ContentCopy'; import SaveIcon from '@mui/icons-material/Save'; import { + Box, Button, Checkbox, Dialog, @@ -18,7 +19,6 @@ import { TableBody, TableCell, TableContainer, - TableHead, TableRow, Tooltip, Typography, @@ -27,6 +27,7 @@ import React from 'react'; import { Trans, useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; +import { allExtrasModifiersById } from '../../../../assets/modifierdata'; import { addToSaved, getSaved, @@ -41,8 +42,48 @@ const useStyles = makeStyles()((theme) => ({ border: '1px solid inherit', backgroundColor: theme.palette.background.default, }, + gw2icon: { + fontSize: '1.8rem', + }, + table: { marginBottom: 0 }, })); +function Gear({ gear }) { + return ( + + + Armor: + + {gear.slice(0, 6).map((affix) => `${affix.slice(0, 4)} `)} + + Trinkets: + + {gear.slice(6, 12).map((affix) => `${affix.slice(0, 4)} `)} + + Weapons: + + {gear.slice(12).map((affix) => `${affix.slice(0, 4)} `)} + + } + > + + Gear + + + ); +} + +function Extras({ classes, character }) { + return Object.entries(character.settings.extrasCombination).map(([key, value]) => { + console.log(allExtrasModifiersById); + return ( + + ); + }); +} + export default function SavedResultManager({ isOpen, setOpen }) { const { t } = useTranslation(); const { classes } = useStyles(); @@ -101,6 +142,8 @@ export default function SavedResultManager({ isOpen, setOpen }) { downloadAnchorNode.click(); downloadAnchorNode.remove(); }; + + console.log(stored); return ( @@ -123,26 +166,42 @@ export default function SavedResultManager({ isOpen, setOpen }) { - Current temporary saved builds + Temporary saved builds - - - - - Damage - - - +
{temporarySaved.map((character) => ( + + + + - + {character.settings.cachedFormState.traits.selectedLines.map( + (specializationId) => ( + + ), + )} - {Math.round(character.results.value)} - + + {Math.round(character.results.value)}{' '} + + + + + + + @@ -166,18 +225,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { -
- - - - - Name - - - Damage - - - +
{stored.map(({ name, character }, index) => ( @@ -186,15 +234,32 @@ export default function SavedResultManager({ isOpen, setOpen }) { + + {character.settings.cachedFormState.traits.selectedLines.map( + (specializationId) => ( + + ), + )} + {Math.round(character.results.value)} + + + + + + diff --git a/src/components/sections/results/table/ResultTable.jsx b/src/components/sections/results/table/ResultTable.jsx index dabe71cda..1f4608924 100644 --- a/src/components/sections/results/table/ResultTable.jsx +++ b/src/components/sections/results/table/ResultTable.jsx @@ -220,67 +220,59 @@ const StickyHeadTable = () => { - {saved.length ? ( - <> - - - Saved Results - - setManagerOpen(true)}> - - - - - - + + Saved Results + + setManagerOpen(true)}> + + + + + + +
+ + + + -
- - { + return ( + - - - {saved.map((character, i) => { - return ( - - ); - })} - -
-
- - - ) : null} + ); + })} +
+ + + ); }; From 2ac8611555eeeeb66fd8aa5ebeca8f55c6848310 Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 13:44:36 +0200 Subject: [PATCH 09/34] feat: add import --- .../SavedResultManager/SavedResultManager.jsx | 45 +++++++++++++++---- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index a9e3459e3..1ed4270d3 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -8,6 +8,7 @@ import { Box, Button, Checkbox, + Collapse, Dialog, DialogActions, DialogContent, @@ -20,6 +21,7 @@ import { TableCell, TableContainer, TableRow, + TextField, Tooltip, Typography, } from '@mui/material'; @@ -35,6 +37,7 @@ import { removeFromSaved, } from '../../../../state/slices/controlsSlice'; import { getAll, save } from './localStorage'; +import InputIcon from '@mui/icons-material/Input'; const useStyles = makeStyles()((theme) => ({ container: { @@ -76,8 +79,7 @@ function Gear({ gear }) { } function Extras({ classes, character }) { - return Object.entries(character.settings.extrasCombination).map(([key, value]) => { - console.log(allExtrasModifiersById); + return Object.entries(character.settings.extrasCombination).map(([_, value]) => { return ( ); @@ -91,6 +93,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { const [stored, setStored] = React.useState(getAll()); const [marked, setMarked] = React.useState(new Array(stored.length).fill(false)); + const [importText, setImportText] = React.useState(''); const temporarySaved = useSelector(getSaved); const selectedTemplate = useSelector(getSelectedTemplate); @@ -131,6 +134,15 @@ export default function SavedResultManager({ isOpen, setOpen }) { newChecked[index] = event.target.checked; setMarked(newChecked); }; + const handleImport = () => { + try { + const toImport = JSON.parse(importText); + dispatch(addToSaved(toImport.character)); + } catch (e) { + console.warn('Error while importing build!'); + // TODO add snackbar + } + }; const handleDownload = () => { // https://gist.github.com/alexreiling/64a99f3b064ca0ad53db0ab153e6ee49 const selected = stored.filter((_, index) => marked[index]); @@ -142,8 +154,10 @@ export default function SavedResultManager({ isOpen, setOpen }) { downloadAnchorNode.click(); downloadAnchorNode.remove(); }; + const handleImportTextChange = (event) => { + setImportText(event.target.value); + }; - console.log(stored); return ( - - Temporary saved builds - + + + Temporary saved builds + + + + + + + + + @@ -220,7 +249,7 @@ export default function SavedResultManager({ isOpen, setOpen }) {
- + Persistently saved builds @@ -262,7 +291,7 @@ export default function SavedResultManager({ isOpen, setOpen }) {
- + From 06f16dd93f3d0a7b9af7906af5d0f245cd4fb538 Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 14:49:25 +0200 Subject: [PATCH 10/34] feat: added infusions to gear hover --- .../SavedResultManager/SavedResultManager.jsx | 26 +++++++++++++------ .../sections/results/SpecialDurations.jsx | 2 +- .../sections/results/table/ResultTable.jsx | 3 +-- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 1ed4270d3..0d8ab7c96 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -3,12 +3,12 @@ import ArrowCircleUpIcon from '@mui/icons-material/ArrowCircleUp'; import ClearIcon from '@mui/icons-material/Clear'; import CloseIcon from '@mui/icons-material/Close'; import ContentCopyIcon from '@mui/icons-material/ContentCopy'; +import InputIcon from '@mui/icons-material/Input'; import SaveIcon from '@mui/icons-material/Save'; import { Box, Button, Checkbox, - Collapse, Dialog, DialogActions, DialogContent, @@ -36,8 +36,8 @@ import { getSelectedTemplate, removeFromSaved, } from '../../../../state/slices/controlsSlice'; +import { INFUSION_IDS } from '../../../../utils/gw2-data'; import { getAll, save } from './localStorage'; -import InputIcon from '@mui/icons-material/Input'; const useStyles = makeStyles()((theme) => ({ container: { @@ -51,23 +51,33 @@ const useStyles = makeStyles()((theme) => ({ table: { marginBottom: 0 }, })); -function Gear({ gear }) { +function Gear({ gear, infusions }) { return ( - + Armor: {gear.slice(0, 6).map((affix) => `${affix.slice(0, 4)} `)} - + Trinkets: {gear.slice(6, 12).map((affix) => `${affix.slice(0, 4)} `)} - + Weapons: {gear.slice(12).map((affix) => `${affix.slice(0, 4)} `)} + {infusions && ( + <> + + Infusions: + + {Object.entries(infusions).map(([name, count]) => ( + + ))} + + )} } > @@ -228,7 +238,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { - + @@ -287,7 +297,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { - + diff --git a/src/components/sections/results/SpecialDurations.jsx b/src/components/sections/results/SpecialDurations.jsx index 08181caf2..0a7856fca 100644 --- a/src/components/sections/results/SpecialDurations.jsx +++ b/src/components/sections/results/SpecialDurations.jsx @@ -5,7 +5,7 @@ import { Trans } from 'react-i18next'; import { makeStyles } from 'tss-react/mui'; import { boons, damagingConditions } from '../../../assets/modifierdata/metadata'; -const boonDurations = boons.map((name) => `${name} Duration`); +// const boonDurations = boons.map((name) => `${name} Duration`); const roundTwo = (num) => Math.round(num * 100) / 100; diff --git a/src/components/sections/results/table/ResultTable.jsx b/src/components/sections/results/table/ResultTable.jsx index 1f4608924..ea69e0e0d 100644 --- a/src/components/sections/results/table/ResultTable.jsx +++ b/src/components/sections/results/table/ResultTable.jsx @@ -6,7 +6,7 @@ import TableContainer from '@mui/material/TableContainer'; import TableHead from '@mui/material/TableHead'; import classNames from 'classnames'; import React from 'react'; -import { Trans, useTranslation } from 'react-i18next'; +import { Trans } from 'react-i18next'; import { useSelector } from 'react-redux'; import { makeStyles } from 'tss-react/mui'; import { @@ -80,7 +80,6 @@ const StickyHeadTable = () => { const [managerOpen, setManagerOpen] = React.useState(false); - const { t } = useTranslation(); const selectedCharacter = useSelector(getSelectedCharacter); const normalList = useSelector(getList) || emptyArray; const rawFilteredList = useSelector(getFilteredList) || emptyArray; From 1506f9ffae64bf58a8cc383f38a671ce201cc39a Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 16:01:21 +0200 Subject: [PATCH 11/34] styling: increase profession size --- src/components/sections/results/table/ResultTableRow.jsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/sections/results/table/ResultTableRow.jsx b/src/components/sections/results/table/ResultTableRow.jsx index 53ca1a457..d9d6d63e5 100644 --- a/src/components/sections/results/table/ResultTableRow.jsx +++ b/src/components/sections/results/table/ResultTableRow.jsx @@ -83,7 +83,13 @@ const ResultTableRow = ({ /> - {savedSection && }{' '} + {savedSection && ( + + )}{' '} {value.toFixed(0)} {comparisonText ? ( From eb7562dd21ae34f2548118b884a6f5e80c3fc82b Mon Sep 17 00:00:00 2001 From: gw2princeps <21026467+gw2princeps@users.noreply.github.com> Date: Mon, 11 Apr 2022 16:20:29 +0200 Subject: [PATCH 12/34] fix: bunch of react console errors --- .../results/BuildShareModal/ModalContent.jsx | 1 + .../SavedResultManager/SavedResultManager.jsx | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/sections/results/BuildShareModal/ModalContent.jsx b/src/components/sections/results/BuildShareModal/ModalContent.jsx index ba59e0c1d..d8e1f146d 100644 --- a/src/components/sections/results/BuildShareModal/ModalContent.jsx +++ b/src/components/sections/results/BuildShareModal/ModalContent.jsx @@ -190,6 +190,7 @@ export default function ModalContent({ character, buttons }) { {buttons.map(({ label, icon: ButtonIcon, onClick }, index) => ( From 16c60604b89c86194a1dcfe077a2ce435b1555b8 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 16:52:45 -0700 Subject: [PATCH 23/34] tweak UI copy --- locales/en/translation.json | 4 ++-- .../results/SavedResultManager/SavedResultManager.jsx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/locales/en/translation.json b/locales/en/translation.json index b3eb7b059..680d4cf64 100644 --- a/locales/en/translation.json +++ b/locales/en/translation.json @@ -136,7 +136,7 @@ "Optimize for:": "Optimize for:", "Optimizer Templates": "Optimizer Templates", "Outgoing Healing": "Outgoing Healing", - "Paste build to import": "Paste build to import", + "Paste build JSON to import": "Paste build JSON to import", "Per-Slot Exclusions": "Per-Slot Exclusions", "Persistently saved builds": "Persistently saved builds", "Phantasm Critical Chance": "Phantasm Critical Chance", @@ -157,7 +157,7 @@ "Resume": "Resume", "Runes": "Runes", "Runes & Sigils & Food": "Runes & Sigils & Food", - "Save locally": "Save locally", + "Save to persistent storage": "Save to persistent storage", "Saved Results": "Saved Results", "Saved Results Manager": "Saved Results Manager", "Select 'Dual wield' if you're using weapons in both hands or 'Two-handed' when using a two-handed weapon.": "Select 'Dual wield' if you're using weapons in both hands or 'Two-handed' when using a two-handed weapon.", diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 58f295a10..30eaabb0d 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -212,7 +212,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { - + @@ -354,7 +354,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { disabled={!marked.filter(Boolean).length} sx={{ mt: 1 }} > - Download {marked.filter(Boolean).length} saved + Download {marked.filter(Boolean).length} selected From 427145362025d7ec0912366418442180b5c4bab0 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 17:41:56 -0700 Subject: [PATCH 24/34] refactor checkmark system --- .../SavedResultManager/SavedResultManager.jsx | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 30eaabb0d..da9ceceff 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -109,15 +109,18 @@ export default function SavedResultManager({ isOpen, setOpen }) { const { classes } = useStyles(); const dispatch = useDispatch(); - const [stored, setStored] = React.useState(getAll()); - const [marked, setMarked] = React.useState(new Array(stored.length).fill(false)); + const [stored, setStored] = React.useState(() => + getAll().map(({ name, character }) => ({ name, character, checked: false })), + ); + const selected = stored.filter(({ checked }) => checked); + const [importText, setImportText] = React.useState(''); const temporarySaved = useSelector(getSaved); const selectedTemplate = useSelector(getSelectedTemplate); React.useEffect(() => { - save(stored); + save(stored.map(({ name, character }) => ({ name, character }))); }, [stored]); const handleClose = () => setOpen(false); @@ -126,14 +129,15 @@ export default function SavedResultManager({ isOpen, setOpen }) { { name: selectedTemplate || character.settings.specialization, character, + checked: false, }, ...stored, ]); }; const handleNameChange = (index) => (event) => { - const newStored = [...stored]; - newStored[index].name = event.target.value; - setStored(newStored); + setStored( + stored.map((entry, i) => (i === index ? { ...entry, name: event.target.value } : entry)), + ); }; const handleCopy = (character) => () => { navigator.clipboard.writeText(JSON.stringify(character, null, 2)); @@ -147,10 +151,10 @@ export default function SavedResultManager({ isOpen, setOpen }) { const handleCopyToTemporary = (character) => () => { dispatch(addToSaved(character)); }; - const handleMarkChange = (index) => (event) => { - const newChecked = [...marked]; - newChecked[index] = event.target.checked; - setMarked(newChecked); + const handleSelectedChange = (index) => (event) => { + setStored( + stored.map((entry, i) => (i === index ? { ...entry, checked: event.target.checked } : entry)), + ); }; const handleImport = () => { try { @@ -167,7 +171,6 @@ export default function SavedResultManager({ isOpen, setOpen }) { }; const handleDownload = () => { // https://gist.github.com/alexreiling/64a99f3b064ca0ad53db0ab153e6ee49 - const selected = stored.filter((_, index) => marked[index]); const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(selected))}`; const downloadAnchorNode = document.createElement('a'); downloadAnchorNode.setAttribute('href', dataStr); @@ -289,10 +292,10 @@ export default function SavedResultManager({ isOpen, setOpen }) { - {stored.map(({ name, character }, index) => ( - + {stored.map(({ name, character, checked }, index) => ( + - + - Download {marked.filter(Boolean).length} selected + Download {selected.length} selected From 813e2aafde164a7c9d4f9c026426f2b505509827 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 17:42:36 -0700 Subject: [PATCH 25/34] fix: text box loses focus when edited --- .../sections/results/SavedResultManager/SavedResultManager.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index da9ceceff..4469fad35 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -293,7 +293,7 @@ export default function SavedResultManager({ isOpen, setOpen }) {
{stored.map(({ name, character, checked }, index) => ( - + From 8f49267dbfb82efa9dfb7a9cd7c7a724dfecf314 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 17:43:44 -0700 Subject: [PATCH 26/34] fix "refactor checkmark system" --- .../sections/results/SavedResultManager/SavedResultManager.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 4469fad35..b9bfc5ed2 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -170,8 +170,9 @@ export default function SavedResultManager({ isOpen, setOpen }) { } }; const handleDownload = () => { + const data = JSON.stringify(selected.map(({ name, character }) => ({ name, character }))); // https://gist.github.com/alexreiling/64a99f3b064ca0ad53db0ab153e6ee49 - const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(selected))}`; + const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(data)}`; const downloadAnchorNode = document.createElement('a'); downloadAnchorNode.setAttribute('href', dataStr); downloadAnchorNode.setAttribute('download', `GearOptimizerBuilds.json`); From ac7975052f1313995a2ead7f63962341d686e204 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 17:50:33 -0700 Subject: [PATCH 27/34] use `createObjectURL` --- .../results/SavedResultManager/SavedResultManager.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index b9bfc5ed2..6f9b7cb03 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -171,14 +171,14 @@ export default function SavedResultManager({ isOpen, setOpen }) { }; const handleDownload = () => { const data = JSON.stringify(selected.map(({ name, character }) => ({ name, character }))); - // https://gist.github.com/alexreiling/64a99f3b064ca0ad53db0ab153e6ee49 - const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(data)}`; + const blobUrl = URL.createObjectURL(new Blob([data], { type: 'application/json' })); const downloadAnchorNode = document.createElement('a'); - downloadAnchorNode.setAttribute('href', dataStr); - downloadAnchorNode.setAttribute('download', `GearOptimizerBuilds.json`); + downloadAnchorNode.href = blobUrl; + downloadAnchorNode.download = `GearOptimizerBuilds.json`; document.body.appendChild(downloadAnchorNode); // required for firefox downloadAnchorNode.click(); downloadAnchorNode.remove(); + URL.revokeObjectURL(blobUrl); }; const handleImportTextChange = (event) => { setImportText(event.target.value); From 830a69d65cc2ede6438d3e124e7cbcd54e96dbc6 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 18:05:13 -0700 Subject: [PATCH 28/34] prevent importing junk --- .../SavedResultManager/SavedResultManager.jsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 6f9b7cb03..4bc8314ea 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -158,15 +158,17 @@ export default function SavedResultManager({ isOpen, setOpen }) { }; const handleImport = () => { try { - const toImport = JSON.parse(importText); - if (Array.isArray(toImport)) + const parsed = JSON.parse(importText); + const toImport = (Array.isArray(parsed) ? parsed : [parsed]).filter( + (importable) => typeof importable?.character === 'object', + ); + if (toImport.length) { toImport.forEach((importable) => dispatch(addToSaved(importable.character))); - else dispatch(addToSaved(toImport.character)); + setImportText(''); + } } catch (e) { console.warn('Error while importing build!'); // TODO add snackbar - } finally { - setImportText(''); } }; const handleDownload = () => { From 7ff14d9e14f2459d14ebef0996f4869d6575df5d Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 18:18:05 -0700 Subject: [PATCH 29/34] prevent saving the same build twice --- .../SavedResultManager/SavedResultManager.jsx | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 4bc8314ea..811714436 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -125,14 +125,16 @@ export default function SavedResultManager({ isOpen, setOpen }) { const handleClose = () => setOpen(false); const handleSaveLocally = (character) => () => { - setStored([ - { - name: selectedTemplate || character.settings.specialization, - character, - checked: false, - }, - ...stored, - ]); + if (!stored.some(({ character: { id } }) => character.id === id)) { + setStored([ + { + name: selectedTemplate || character.settings.specialization, + character, + checked: false, + }, + ...stored, + ]); + } }; const handleNameChange = (index) => (event) => { setStored( @@ -149,7 +151,9 @@ export default function SavedResultManager({ isOpen, setOpen }) { dispatch(removeFromSaved(character)); }; const handleCopyToTemporary = (character) => () => { - dispatch(addToSaved(character)); + if (!temporarySaved.some(({ id }) => character.id === id)) { + dispatch(addToSaved(character)); + } }; const handleSelectedChange = (index) => (event) => { setStored( From 7d6ba9dbaa30bce9b30f3599c7c7023bbcb68284 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 18:32:50 -0700 Subject: [PATCH 30/34] import pasted json to persistent build section --- .../SavedResultManager/SavedResultManager.jsx | 65 ++++++++++--------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 811714436..0ee570b19 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -124,11 +124,11 @@ export default function SavedResultManager({ isOpen, setOpen }) { }, [stored]); const handleClose = () => setOpen(false); - const handleSaveLocally = (character) => () => { + const handleSaveLocally = (character, name) => () => { if (!stored.some(({ character: { id } }) => character.id === id)) { setStored([ { - name: selectedTemplate || character.settings.specialization, + name: name || selectedTemplate || character.settings.specialization, character, checked: false, }, @@ -164,10 +164,13 @@ export default function SavedResultManager({ isOpen, setOpen }) { try { const parsed = JSON.parse(importText); const toImport = (Array.isArray(parsed) ? parsed : [parsed]).filter( - (importable) => typeof importable?.character === 'object', + (importable) => + typeof importable?.character === 'object' && typeof importable?.name === 'string', ); if (toImport.length) { - toImport.forEach((importable) => dispatch(addToSaved(importable.character))); + toImport.forEach((importable) => + dispatch(handleSaveLocally(importable.character, importable.name)), + ); setImportText(''); } } catch (e) { @@ -211,28 +214,13 @@ export default function SavedResultManager({ isOpen, setOpen }) { - - - Temporary saved builds{' '} - - - - + Temporary saved builds{' '} + - - - - - - +
@@ -286,15 +274,30 @@ export default function SavedResultManager({ isOpen, setOpen }) {
- - Persistently saved builds - + + Persistently saved builds + + + + - + + + + + + From ac50d74ca3dfb828b04310678486f048b3e65aa3 Mon Sep 17 00:00:00 2001 From: Marcus Date: Wed, 29 May 2024 19:00:00 -0700 Subject: [PATCH 31/34] tweak UI copy --- locales/en/translation.json | 4 ++-- .../results/SavedResultManager/SavedResultManager.jsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/en/translation.json b/locales/en/translation.json index 680d4cf64..2638b3ec0 100644 --- a/locales/en/translation.json +++ b/locales/en/translation.json @@ -138,7 +138,7 @@ "Outgoing Healing": "Outgoing Healing", "Paste build JSON to import": "Paste build JSON to import", "Per-Slot Exclusions": "Per-Slot Exclusions", - "Persistently saved builds": "Persistently saved builds", + "Persistent build storage": "Persistent build storage", "Phantasm Critical Chance": "Phantasm Critical Chance", "Phantasm Critical Damage": "Phantasm Critical Damage", "Phantasm Effective Power": "Phantasm Effective Power", @@ -157,7 +157,7 @@ "Resume": "Resume", "Runes": "Runes", "Runes & Sigils & Food": "Runes & Sigils & Food", - "Save to persistent storage": "Save to persistent storage", + "Save to persistent build storage": "Save to persistent build storage", "Saved Results": "Saved Results", "Saved Results Manager": "Saved Results Manager", "Select 'Dual wield' if you're using weapons in both hands or 'Two-handed' when using a two-handed weapon.": "Select 'Dual wield' if you're using weapons in both hands or 'Two-handed' when using a two-handed weapon.", diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 0ee570b19..fe90da650 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -256,7 +256,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { - + @@ -276,7 +276,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { - Persistently saved builds + Persistent build storage{' '} Date: Wed, 29 May 2024 19:16:52 -0700 Subject: [PATCH 32/34] tweak UI copy --- locales/en/translation.json | 4 ++-- .../results/SavedResultManager/SavedResultManager.jsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/locales/en/translation.json b/locales/en/translation.json index 2638b3ec0..9cefc5860 100644 --- a/locales/en/translation.json +++ b/locales/en/translation.json @@ -46,10 +46,10 @@ "Copied link to clipboard!": "Copied link to clipboard!", "Copied long link to clipboard! (Link shortener failed.)": "Copied long link to clipboard! (Link shortener failed.)", "Copied long link to clipboard! (Link shortener requires cloudflare environment.)": "Copied long link to clipboard! (Link shortener requires cloudflare environment.)", - "Copy JSON to clipboard": "Copy JSON to clipboard", "Copy Settings to clipboard": "Copy Settings to clipboard", "Copy build": "Copy build", "Copy build to temporary saved builds": "Copy build to temporary saved builds", + "Copy data to clipboard": "Copy data to clipboard", "Copy from selected character": "Copy from selected character", "Copy selected sigils to both slots": "Copy selected sigils to both slots", "Core game changes are updated for the March 19th game patch, but preset coefficients and trait selections may not yet be completely updated. Most gear results will be correctly optimized, but DPS estimates and comparisons may be wrong.

Templates not marked as Outdated are up to date.": "Core game changes are updated for the March 19th game patch, but preset coefficients and trait selections may not yet be completely updated. Most gear results will be correctly optimized, but DPS estimates and comparisons may be wrong.

Templates not marked as Outdated are up to date.", @@ -136,7 +136,7 @@ "Optimize for:": "Optimize for:", "Optimizer Templates": "Optimizer Templates", "Outgoing Healing": "Outgoing Healing", - "Paste build JSON to import": "Paste build JSON to import", + "Paste build data to import": "Paste build data to import", "Per-Slot Exclusions": "Per-Slot Exclusions", "Persistent build storage": "Persistent build storage", "Phantasm Critical Chance": "Phantasm Critical Chance", diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index fe90da650..510d6be04 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -287,7 +287,7 @@ export default function SavedResultManager({ isOpen, setOpen }) {
- + From f1d5b59a3ccdbb94f750d33f2ac90779dee3f4c2 Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 6 Aug 2024 13:55:26 -0700 Subject: [PATCH 33/34] Chore: Remove unused catch arguments --- .../sections/results/SavedResultManager/SavedResultManager.jsx | 2 +- .../sections/results/SavedResultManager/localStorage.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 510d6be04..6b2beefb5 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -173,7 +173,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { ); setImportText(''); } - } catch (e) { + } catch { console.warn('Error while importing build!'); // TODO add snackbar } diff --git a/src/components/sections/results/SavedResultManager/localStorage.js b/src/components/sections/results/SavedResultManager/localStorage.js index dfb2a51d2..47904edfa 100644 --- a/src/components/sections/results/SavedResultManager/localStorage.js +++ b/src/components/sections/results/SavedResultManager/localStorage.js @@ -5,7 +5,7 @@ export function getAll() { let stored = []; try { stored = JSON.parse(localStorage.getItem(KEY) || '[]'); - } catch (e) { + } catch { console.warn('There was a problem loading the saved characters from your disk!'); } return stored; From 713a817994ca02f92633c87bf7f946969cd4dd6b Mon Sep 17 00:00:00 2001 From: Marcus Date: Tue, 17 Sep 2024 12:32:21 -0700 Subject: [PATCH 34/34] chore: replace mui system props with sx --- .../SavedResultManager/SavedResultManager.jsx | 16 ++++++++-------- .../sections/results/table/ResultTable.jsx | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx index 6b2beefb5..89cd510ed 100644 --- a/src/components/sections/results/SavedResultManager/SavedResultManager.jsx +++ b/src/components/sections/results/SavedResultManager/SavedResultManager.jsx @@ -58,21 +58,21 @@ function Gear({ gear, infusions }) { - + Armor: {gear.slice(0, 6).map((affix) => `${affix.slice(0, 4)} `)} - + Trinkets: {gear.slice(6, 12).map((affix) => `${affix.slice(0, 4)} `)} - + Weapons: {gear.slice(12).map((affix) => `${affix.slice(0, 4)} `)} {infusions && ( <> - + Infusions: {Object.entries(infusions).map(([name, count]) => ( @@ -205,7 +205,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { PaperProps={{ elevation: 4 }} > - + Saved Results Manager @@ -214,7 +214,7 @@ export default function SavedResultManager({ isOpen, setOpen }) { - + Temporary saved builds{' '} - - + + Persistent build storage{' '} { - - + + Saved Results{' '}