diff --git a/src/components/DashBoard/Discord/Plugins/Leveling.js b/src/components/DashBoard/Discord/Plugins/Leveling.js index 6bdc0a5..f887bcb 100644 --- a/src/components/DashBoard/Discord/Plugins/Leveling.js +++ b/src/components/DashBoard/Discord/Plugins/Leveling.js @@ -4,38 +4,25 @@ import { DiscordContext } from "../../../../contexts/DiscordContext"; import { Link } from "react-router-dom"; import StyledSelect from "../../../../styled-components/StyledSelect"; import { Typography } from "@material-ui/core"; -import PrettoSlider from "../../../../styled-components/PrettoSlider"; -import FancySwitch from "../../../../styled-components/FancySwitch"; -import { - parseSelectValue, - TransformObjectToSelectValue, - channelLabel, -} from "../../../../utils/functions"; -import RoleItem from "../../../../styled-components/RoleItem"; +import PrettoSlider from "../../../../styled-components/PrettoSlider" -const marks = [...Array(7)].map((item, index) => ({ value: index / 2, label: `x${index / 2}` })); +const marks = [...Array(7)].map((item, index) => ({ value: (index / 2), label: `x${(index / 2)}` })); const Leveling = ({ location, guild: userConnectedGuildInfo }) => { - const [levelUpAnnouncement, setLevelUpAnnouncement] = useState(false); + const [levelUpAnnouncement, setLevelUpAnnouncement] = useState(); const [announcementChannel, setAnnouncementChannel] = useState(false); - const [noXpRoles, setNoXpRoles] = useState([]); - const [noXpChannels, setNoXpChannels] = useState([]); - const [generalScaling, setGeneralScaling] = useState(1); - const [levelUpMessage, setLevelUpMessage] = useState( - "Congrats {player}, you leveled up to level {level}!" - ); - const { setDashboardOpen, saveOnType } = useContext(DiscordContext); + const [levelUpMessage, setLevelUpMessage] = useState("Congrats {player}, you leveled up to level {level}!"); + const { setDashboardOpen, saveOnType } = useContext(DiscordContext); const guildId = userConnectedGuildInfo?.id; const handleTypeSelect = useCallback( async e => { const guildLevelRef = firebase.db.collection("Leveling").doc(guildId); - let value = e.target.checked ? 3 : 1; - setLevelUpAnnouncement(e.target.checked); + setLevelUpAnnouncement(e); try { - await guildLevelRef.update({ type: value }); + await guildLevelRef.update({ type: e.value }); } catch (err) { - await guildLevelRef.set({ type: value }); + await guildLevelRef.set({ type: e.value }); } setDashboardOpen(true); }, @@ -61,12 +48,10 @@ const Leveling = ({ location, guild: userConnectedGuildInfo }) => { async e => { const guildLevelRef = firebase.db.collection("Leveling").doc(guildId); setAnnouncementChannel(e); - const notifications = parseSelectValue(e); - console.log(notifications); try { - await guildLevelRef.update({ notifications }); + guildLevelRef.update({ notifications: e.value }); } catch (err) { - await guildLevelRef.set({ notifications }); + guildLevelRef.set({ notifications: e.value }); } setDashboardOpen(true); }, @@ -75,105 +60,36 @@ const Leveling = ({ location, guild: userConnectedGuildInfo }) => { useEffect(() => { (async () => { - try { - const guildRef = await firebase.db.collection("Leveling").doc(guildId || " "); - const guild = await guildRef.get(); - const settings = await guildRef.collection("settings").get(); - const data = guild.data(); - const settingsData = settings.docs - .map(doc => ({ id: doc.id, ...doc.data() })) - .reduce((acc, cur) => ({ [cur.id]: cur, ...acc }), {}); - if (settingsData) { - setGeneralScaling(settingsData.scaling.general || 1); - setNoXpRoles( - settingsData.bannedItems?.roles - ?.map(id => userConnectedGuildInfo.roles.find(role => role.id === id)) - ?.map(role => ({ - value: TransformObjectToSelectValue(role), - label: {role.name}, - })) || [] - ); - setNoXpChannels( - settingsData.bannedItems?.channels - ?.map(id => - userConnectedGuildInfo.channels.find(channel => channel.id === id) - ) - .map(channel => ({ - value: TransformObjectToSelectValue(channel), - label: channelLabel(channel), - })) || [] - ); - } - if (data) { - const id = data.notifications; - if (id) { - const apiUrl = `${process.env.REACT_APP_API_URL}/resolvechannel?guild=${guildId}&channel=${id}`; - const response = await fetch(apiUrl); - const channel = await response.json(); - setAnnouncementChannel({ - value: id, - label: channelLabel(channel), - }); - setLevelUpAnnouncement({ - value: data.type, - label: ["Disabled", "Current Channel", "Custom Channel"][data.type - 1], - }); - setLevelUpMessage(data.message); - } + const guild = await firebase.db + .collection("Leveling") + .doc(guildId || " ") + .get(); + const data = guild.data(); + if (data) { + const id = data.notifications; + if (id) { + const apiUrl = `${process.env.REACT_APP_API_URL}/resolvechannel?guild=${guildId}&channel=${id}`; + const response = await fetch(apiUrl); + const channel = await response.json(); + setAnnouncementChannel({ + value: id, + label: ( + <> + {channel.name} + {channel.parent} + + ), + }); + setLevelUpAnnouncement({ + value: data.type, + label: ["Disabled", "Current Channel", "Custom Channel"][data.type - 1], + }); + setLevelUpMessage(data.message); } - } catch (err) { - console.log(err.message); } })(); }, [location, guildId]); - const handleGeneralScaling = async (e, value) => { - const guildLevelRef = firebase.db - .collection("Leveling") - .doc(guildId) - .collection("settings") - .doc("scaling"); - setGeneralScaling(value); - try { - await guildLevelRef.update({ general: value }); - } catch (err) { - await guildLevelRef.set({ general: value }); - } - setDashboardOpen(true); - }; - - const handleNoXpRoleSelect = async e => { - const guildLevelRef = firebase.db - .collection("Leveling") - .doc(guildId) - .collection("settings") - .doc("bannedItems"); - setNoXpRoles(e); - const value = parseSelectValue(e); - try { - await guildLevelRef.update({ roles: value }); - } catch (err) { - await guildLevelRef.set({ roles: value }); - } - setDashboardOpen(true); - }; - - const handleNoXpChannelSelect = async e => { - const guildLevelRef = firebase.db - .collection("Leveling") - .doc(guildId) - .collection("settings") - .doc("bannedItems"); - setNoXpChannels(e); - const value = parseSelectValue(e); - try { - await guildLevelRef.update({ channels: value }); - } catch (err) { - await guildLevelRef.set({ channels: value }); - } - setDashboardOpen(true); - }; - return (
@@ -186,14 +102,9 @@ const Leveling = ({ location, guild: userConnectedGuildInfo }) => {

Leveling Up

-

- Whenever a user gains a level, DisStreamBot can send a personalized message. -

+

Whenever a user gains a level, DisStreamBot can send a personalized message.

- + Leaderboard
@@ -202,36 +113,43 @@ const Leveling = ({ location, guild: userConnectedGuildInfo }) => {
Level up announcement
- -
-
-
ANNOUNCEMENT CHANNEL
a.parent.localeCompare(b.parent)) - ?.map(channel => ({ - value: TransformObjectToSelectValue(channel), - label: channelLabel(channel), - }))} + onChange={handleTypeSelect} + placeholder="Select Annoucement type" + value={levelUpAnnouncement} + options={[ + { value: 1, label: "Disabled" }, + { value: 3, label: "Custom Channel" }, + ].map(type => type)} />
+ {levelUpAnnouncement?.value === 3 && ( +
+
ANNOUNCEMENT CHANNEL
+ a.parent.localeCompare(b.parent)) + ?.map(channel => ({ + value: channel.id, + label: ( + <> + {channel.name} + {channel.parent} + + ), + }))} + /> +
+ )}
LEVEL UP ANNOUNCEMENT MESSAGE
- +
@@ -242,59 +160,58 @@ const Leveling = ({ location, guild: userConnectedGuildInfo }) => { General XP Scaling `${value}xp`} - aria-labelledby="xp scaling" + aria-labelledby="discrete-slider" valueLabelDisplay="auto" step={0.5} + // marks min={0} max={3} marks={marks} />
- +

No Rank Items

-
-

No XP Roles

-

No XP Channels

+ {}} + placeholder="No XP Roles" + value={""} + options={userConnectedGuildInfo?.channels + ?.sort((a, b) => a.parent.localeCompare(b.parent)) + ?.map(channel => ({ + value: channel.id, + label: ( + <> + {channel.name} + {channel.parent} + + ), + }))} + />
-
- b.rawPosition - a.rawPosition) - ?.map(role => ({ - value: TransformObjectToSelectValue(role), - label: {role.name}, - }))} - /> -
- -
- a.parent.localeCompare(b.parent)) - ?.map(channel => ({ - value: TransformObjectToSelectValue(channel), - label: channelLabel(channel), - }))} - /> -
+ {}} + placeholder="No XP Channels" + value={""} + options={userConnectedGuildInfo?.channels + ?.sort((a, b) => a.parent.localeCompare(b.parent)) + ?.map(channel => ({ + value: channel.id, + label: ( + <> + {channel.name} + {channel.parent} + + ), + }))} + />
diff --git a/src/components/DashBoard/Discord/Plugins/PluginCard.scss b/src/components/DashBoard/Discord/Plugins/PluginCard.scss index b95c437..29fb1c6 100644 --- a/src/components/DashBoard/Discord/Plugins/PluginCard.scss +++ b/src/components/DashBoard/Discord/Plugins/PluginCard.scss @@ -2,51 +2,52 @@ $background-color: #212121; background: $background-color; transition: 0.25s; - margin: 0.5rem; - cursor: pointer; - position: relative; - &.disabled { - background: lighten($background-color, 2); - opacity: 0.45; - &:after { + margin: 0.5rem; + cursor: pointer; + position: relative; + &.disabled{ + background: lighten($background-color, 2); + opacity: .45; + &:after { content: "Click to Enable"; background: #b92838; - width: fit-content; - position: absolute; - top: 0; - right: 0; - transform: translate(10%, -25%); - padding: 0.25rem 0.4rem; - border-radius: 5rem; + width: fit-content; + position: absolute; + top: 0; + right: 0; + transform: translate(10%, -25%); + padding: .25rem .4rem; + border-radius: 5rem; } - } + } &.coming-soon { - cursor: initial; - position: relative; - opacity: 0.8; + cursor: initial; + position: relative; + opacity: .8; &:after { content: "Coming Soon"; background: var(--disstreamchat-blue); - width: fit-content; - position: absolute; - top: 0; - right: 0; - transform: translate(10%, -25%); - padding: 0.25rem 0.4rem; - border-radius: 5rem; + width: fit-content; + position: absolute; + top: 0; + right: 0; + transform: translate(10%, -25%); + padding: .25rem .4rem; + border-radius: 5rem; } } &:not(.coming-soon):hover { background: lighten($color: $background-color, $amount: 3); - } - a { - display: flex; - width: 300px; - height: 100px; - } - display: flex; - width: 300px; - height: 100px; + } + a{ + + display: flex; + width: 300px; + height: 100px; + } + display: flex; + width: 300px; + height: 100px; padding: 20px; align-items: center; box-sizing: content-box !important; @@ -72,134 +73,121 @@ color: #aaa; margin-top: 0.25rem; line-height: 1.5rem; - } - @media screen and (max-width: 440px) { - width: 200px; - h4 { - font-size: 0.75rem; - line-height: 1rem; - } - } + } + @media screen and (max-width: 440px) { + width: 200px; + h4{ + font-size: .75rem; + line-height: 1rem;; + } + } } -.plugin-overlay { - background: lighten(#21212133, 10) !important; +.plugin-overlay{ + background: lighten(#21212133, 10) !important; } -.plugin-modal { - // display: flex; - padding: 0 !important; - overflow: hidden; - min-width: fit-content; - button { - outline: none !important; - } - .top-portion { - width: 580px; - height: 75px; - background: #2e3235; - display: flex; - align-items: center; - padding: 0 1rem; - box-sizing: border-box !important; - justify-content: space-between; - h2 { - font-size: 1.25rem; - text-transform: uppercase; - } - button { - background: #212121; - border: none; - color: white; - border-radius: 0.125rem; - display: flex; - align-items: center; - justify-content: center; - padding: 0.25rem; - } - } - .bottom-buttons { - padding: 0 1rem; - box-sizing: border-box !important; - justify-content: space-between; - width: 580px; - height: 75px; - background: #212121; - display: flex; - align-items: center; - justify-content: flex-end; - button { - $blue: #2d688d; - padding: 0.5rem 1rem; - background: $blue; - color: white; - border: none; - border-radius: 0.125rem; - &:hover { - background: darken($blue, 5); - } - } - } +.plugin-modal{ + // display: flex; + padding: 0 !important; + overflow: hidden; + min-width: fit-content; + button{ + outline: none !important + } + .top-portion{ + width: 580px; + height: 75px; + background: #2e3235; + display: flex; + align-items: center; + padding: 0 1rem; + box-sizing: border-box !important; + justify-content: space-between; + h2{ + font-size: 1.25rem; + text-transform: uppercase; + } + button{ + background: #212121; + border: none; + color: white; + border-radius: .125rem; + display: flex; + align-items: center; + justify-content: center; + padding: .25rem; + } + }; + .bottom-buttons{ + padding: 0 1rem; + box-sizing: border-box !important; + justify-content: space-between; + width: 580px; + height: 75px; + background: #212121; + display: flex; + align-items: center; + justify-content: flex-end; + button{ + $blue: #2d688d; + padding: .5rem 1rem; + background: $blue; + color: white; + border: none; + border-radius: .125rem; + &:hover{ + background: darken($blue, 5) + } + } + } } -.scaling-div { - padding: 0 1.5rem; +.scaling-div{ + padding: 0 1.5rem } #root { - .MuiSlider-markLabelActive, - .MuiSlider-markLabel { - color: white; - } - .MuiSlider-markActive, - .MuiSlider-mark { - opacity: 0; - } + .MuiSlider-markLabelActive, .MuiSlider-markLabel{ + color: white; + } + .MuiSlider-markActive, .MuiSlider-mark{ + opacity: 0; + + } } -.no-rank-items { - display: flex; - justify-content: space-between; - align-items: center; - flex-direction: column; - width: 100% !important; - & > div { - flex: 1; - width: 100%; - display: flex; - justify-content: space-between; - &:first-child { - display: grid; - grid-template-columns: 1fr 1fr; - } - } - & > div > div { - // margin: 0 1rem; - &:first-child { - margin-left: 0; - } - &:last-child { - margin-right: 0; - } - width: 100%; - flex: 1; - } - @media screen and (max-width: 700px) { - flex-direction: column; - align-items: center; - & > div { - margin: 0.5rem 0; - } - } +.no-rank-items{ + display: flex; + justify-content: space-between; + width: 100% !important; + & > div{ + margin: 0 1rem; + &:first-child{ + margin-left: 0; + } + &:last-child{ + margin-right: 0; + } + width: 100% + } + @media screen and (max-width: 700px) { + flex-direction: column; + align-items: center; + & > div{ + margin: .5rem 0; + } + } } -.MuiSvgIcon-root { - font-size: inherit !important +.MuiSvgIcon-root{ + font-size: inherit !important ; } -.plugin-switch { - position: absolute; - top: -16px; - right: -25px; +.plugin-switch{ + position: absolute; + top: -16px; + right: -25px; } + diff --git a/src/styled-components/FancySwitch.js b/src/styled-components/FancySwitch.js index deeac97..0cf5e98 100644 --- a/src/styled-components/FancySwitch.js +++ b/src/styled-components/FancySwitch.js @@ -28,6 +28,6 @@ const FancySwitch = withStyles({ opacity: "1 !important", }, }, -})(props => ); +})(Switch); export default FancySwitch \ No newline at end of file