diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a1e549..7991715 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] ### Added +- `Custom Share` button - Add `ServiceName` enum ### Changed +- Update `ShareModal` display settings to handle `Custom Share` button action - Update naming conventions - GitHub action versions updated ## [0.5] - 2025-01-15 diff --git a/src/Assets/icons/services/custom-share.svg b/src/Assets/icons/services/custom-share.svg new file mode 100644 index 0000000..df7d269 --- /dev/null +++ b/src/Assets/icons/services/custom-share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/Data/constants.data.ts b/src/Data/constants.data.ts index a306455..45da0aa 100644 --- a/src/Data/constants.data.ts +++ b/src/Data/constants.data.ts @@ -14,3 +14,8 @@ export enum ServiceName { Pinterest = 'Pinterest', HackerNews = 'Hacker News', } + +export enum SharingMode { + Direct = 'direct', + Indirect = 'indirect', +} diff --git a/src/Data/services.data.ts b/src/Data/services.data.ts index 5e1930b..f13d23a 100644 --- a/src/Data/services.data.ts +++ b/src/Data/services.data.ts @@ -1,4 +1,6 @@ import X from '@assets/icons/services/x.svg'; +import { ServiceName } from './constants.data'; +import { CONFIG } from '@src/App/Config/constants'; import Email from '@assets/icons/services/email.svg'; import Gmail from '@assets/icons/services/gmail.svg'; import Yahoo from '@assets/icons/services/yahoo.svg'; @@ -11,10 +13,11 @@ import Facebook from '@assets/icons/services/facebook.svg'; import Linkedin from '@assets/icons/services/linkedin.svg'; import Pinterest from '@assets/icons/services/pinterest.svg'; import HackerNews from '@assets/icons/services/hacker-news.svg'; -import { ServiceName } from './constants.data'; +import CustomShare from '@assets/icons/services/custom-share.svg'; export const getServiceURL = (url: string, subject?: string): { [key: string]: string } => { return { + [ServiceName.Custom]: `${CONFIG.FRONT_DOMAIN}/?path=custom_share&link=${url}&subject=${subject}`, [ServiceName.Email]: `mailto:?subject=${subject}&body=${url}`, [ServiceName.Gmail]: `https://mail.google.com/mail/u/0/?ui=2&fs=1&tf=cm&su=${subject}&body=${url}`, [ServiceName.Telegram]: `https://telegram.me/share/url?url=${url}&text=${subject}`, @@ -32,6 +35,12 @@ export const getServiceURL = (url: string, subject?: string): { [key: string]: s }; export const SERVICES = [ + { + title: ServiceName.Custom, + icon: CustomShare, + iconUrl: 'https://github.com/openscilab/mybutton/raw/main/src/Assets/icons/services/custom-share.svg', + bg: '#4b2b79', + }, { title: ServiceName.Email, icon: Email, diff --git a/src/Tools/Store/slices/LocalCacheSlice.ts b/src/Tools/Store/slices/LocalCacheSlice.ts index dc572d4..b773c42 100644 --- a/src/Tools/Store/slices/LocalCacheSlice.ts +++ b/src/Tools/Store/slices/LocalCacheSlice.ts @@ -1,16 +1,16 @@ import { createSlice } from '@reduxjs/toolkit'; import useStore from '../useStore'; -type InitStateType = { openShareModal: boolean; activePage: string }; +type InitStateType = { shareModal: { open: boolean; url?: string; subject?: string }; activePage: string }; -const initialState: InitStateType = { openShareModal: false, activePage: 'home' }; +const initialState: InitStateType = { shareModal: { open: false }, activePage: 'home' }; const localCacheSlice = createSlice({ name: 'localCache', initialState, reducers: { - setOpenShareModal(state, { payload }) { - state.openShareModal = payload; + setShareModal(state, { payload }) { + state.shareModal = payload; }, setActivePage(state, { payload }) { state.activePage = payload; @@ -23,6 +23,6 @@ export const useLocalCache = () => { return selector(s => s?.localStorage); }; -export const { setOpenShareModal, setActivePage } = localCacheSlice.actions; +export const { setShareModal, setActivePage } = localCacheSlice.actions; export default localCacheSlice; diff --git a/src/Views/Layout/Navbar/NavBar.tsx b/src/Views/Layout/Navbar/NavBar.tsx index 9a8fe9b..afad966 100644 --- a/src/Views/Layout/Navbar/NavBar.tsx +++ b/src/Views/Layout/Navbar/NavBar.tsx @@ -4,7 +4,7 @@ import useStore from '@src/Tools/Store/useStore'; import { classes } from '@src/Tools/Utils/React'; import { useSearchParams } from 'react-router-dom'; import { ReactComponent as Logo } from '@assets/Images/logo-text.svg'; -import { setOpenShareModal, useLocalCache } from '@src/Tools/Store/slices/LocalCacheSlice'; +import { setShareModal, useLocalCache } from '@src/Tools/Store/slices/LocalCacheSlice'; const NavBar = () => { const { activePage } = useLocalCache(); @@ -27,7 +27,7 @@ const NavBar = () => {