{"version":3,"sources":["app/history.js","constants/routePaths.js","components/ToastNotifications/Toast/styles.module.css","components/form/FormInputButton.js","components/Heading2.js","utils/commonUtils.js","contexts/SocketContext.js","constants/colors.js","contexts/ModalContext.js","contexts/ToastContext.js","hooks/useToastAutoClose.js","hooks/useModal.js","hooks/useToast.js","components/form/css/buttonCommon.js","components/RowContainer.js","components/form/css/formInputCommon.js","api/wfsAPI/user-profile.js","components/css/rowCommon.js","hooks/useGlobalNotification.js","components/PageLoading.js","components/typography/H3.js","components/ShipProfileBox.js","constants/user.js","components/ToastNotifications/ToastPortal/styles.module.css","api/wfsAPI/base.js","api/wfsAPI/notifications.js","api/wfsAPI/global-notifications.js","features/notification/notificationSlice.js","components/Heading3.js","features/user/userSlice.js","components/Menu.js","components/includes/SideMenu.js","components/includes/Footer.js","components/GlobalNotification.js","components/includes/Navbar.js","components/ScrollToTop.js","components/Modal.js","components/routes/PrivateRoute.js","components/routes/PublicRoute.js","components/ToastNotifications/Toast/Toast.js","components/ToastNotifications/ToastPortal/ToastPortal.js","hooks/useToastPortal.js","hooks/useScrollPosition.js","pages/ErrorFallback.js","pages/Privacy.js","components/componentLoader.js","pages/ShipsList.js","App.js","reportWebVitals.js","index.js","hooks/useAuth.js","constants/breakpoints.js","features/error/errorSlice.js","app/store.js","components/typography/H2.js","hooks/useNotification.js","contexts/createNamedContext.js","api/wfsAPI/auth.js","components/Container.js"],"names":["createBrowserHistory","basename","process","ROUTE_PATH","HOME","ORGANIZER_INFO","STORE_INFO","PROVIDE_ORGANIZER_INFO","PROVIDE_STORE_INFO","ABOUT_US","CONTACT_US","TERMS_AND_CONDITIONS","TERMS_OF_USE","PRIVACY","BENEFITS_MEMBER","BENEFITS_ORGANIZER","EVENT_INFO","FISHING_APP_HOME","SEARCH_EVENT_INFO","SEARCH_USER","OPERATION_FLOW","RESERVATION_FLOW","CANCEL_FLOW","IMPORTANT_DATES","CHECK_EMAIL","EMAIL_CONFIRMATION","PROFILE","SHIP_INFO","FISHING_LOCATION_PROFILE_INFO","LOGIN","SIGNUP","PASSWORD_RESET","PASSWORD_RESET_REENTER_PASSWORD","CREATE_STRIPE_ACCOUNT","SHIP_MANAGEMENT_FORM","FISHING_LOCATION","SHIPS_LIST","EVENTS_LIST","EVENT_MANAGEMENT","CREATE_EVENT","ORGANIZER_INVOICE","PARTICIPANT_RESERVATION_FORM","RESERVATIONS_LIST","PARTICIPANT_RESERVATION","EDIT_PROFILE","NOTIFICATION","module","exports","FormInputButton","styled","button","formInputCommon","buttonCommon","Heading2","H2","COLORS","BACKGROUND_COLOR","greyBlues","phoneFormat","phone","slice","currencyFormat","price","Intl","NumberFormat","style","currency","format","replace","transformFilters","filters","Object","fromEntries","entries","filter","value","undefined","uuid","dt","Date","getTime","c","r","Math","random","floor","toString","socket","io","autoConnect","transports","path","SocketContext","createNamedContext","SocketProvider","children","Provider","RESERVATION_STATUS","AVAILABLE","RESERVED","WAITING_FOR_CONFIRM","CONFIRMED_RESERVATION","WAITING_FOR_PAYMENT","E_PAID","CASH_PAID","WAITING_FOR_CANCEL","NO_SHOW","EVENT_STATUS","NOT_FORMED","FORMED","FULL","FINISHED","primarys","dangers","riceYellows","yellows","greens","purples","greys","ModalContext","ModalProvider","useState","isShow","setIsShow","title","setTitle","body","setBody","actions","setActions","show","useCallback","close","contextValue","showLoading","display","alignItems","justifyContent","flexDirection","padding","height","width","animation","variant","fontSize","marginTop","ToastContext","ToastProvider","toasts","setToasts","autoCloseTime","setAutoCloseTime","autoClose","setAutoClose","addMessage","useRef","current","toast","mode","message","sender","goToUrl","prevToasts","id","removing","setRemoving","useEffect","t","_t","length","setTimeout","useToastAutoClose","removeToast","useModal","useContext","useToast","css","props","invert","disabled","RowContainer","div","rowCommon","resourceName","getUserProfileById","a","wfsAPIBase","get","getUserProfile","updateUserProfile","data","put","getUsersByQuery","query","params","paramsSerializer","qs","stringify","useGlobalNotification","dispatch","useDispatch","getLatestNotificationRef","globalNotification","useSelector","selectGlobalNotification","getLatestGlobalNotification","showGlobalNotification","hide","hideGlobalNotification","Content","Loading","PageLoading","H3","h3","Container","ImageContainer","backgroundImage","ContentContainer","ContentRowContainer","ShipProfileBox","canBeChartered","seatAmount","shipName","imageURIs","justifySelf","size","USER_ACCOUNT_STATUS","PROVISIONED","ACTIVE","RECOVERY","instance","axios","create","baseURL","interceptors","request","use","req","response","res","error","errorObject","status","store","setError","window","scrollTo","getState","user","getNewAccessToken","unwrap","then","result","defaults","headers","common","accessToken","config","Promise","reject","getUnReadCount","getFiniteNotifications","getLatestNotification","notificationsAdapter","createEntityAdapter","selectId","notification","_id","sortComparer","b","dateA","createdAt","dateB","isBefore","isEqual","errorResponse","err","getNotifications","createAsyncThunk","page","perPage","rejectWithValue","wfsNotificationsAPI","wfsGlobalNotificationsAPI","loading","state","notificationSlice","createSlice","name","initialState","getInitialState","totalPageCount","unReadCount","reducers","addOne","action","payload","upsertMany","addOneUnReadCount","updateUnReadCount","max","resetNotification","extraReducers","builder","addCase","pending","fulfilled","addMany","notifications","rejected","getSelectors","selectNotifications","selectAll","selectNotificationPage","sele","selectNotificationsTotalPageCount","selectNotificationsUnReadCount","Heading3","username","nickname","role","expiresIn","signup","wfsAuthAPI","login","logout","authSuccess","userSlice","authSucceeded","selectAuthStatus","selectUser","selectAccessToken","selectRefreshToken","refreshToken","StyledMenu","ul","Menu","StyledHeaderRowContainer","HeaderRow","isOpen","marginLeft","StyledSubMenuUl","StyledSubMenu","li","listItemCommonCss","listItemCss","ListItem","ListItemWithComponentInside","SubMenu","closeOnRouteChange","setOpen","location","useLocation","key","onClick","Item","component","Component","StyledSideMenu","isSideMenuShow","BREAKPOINTS","sm","ScrollContainer","ScrollContent","SideMenuHeader","CloseButton","span","Image","img","md","SideMenu","onCloseButtonClick","useAuth","useNotification","document","overflow","src","Link","to","FooterContainer","FooterLinksContainer","lg","FooterLinksColumn","FooterLink","FooterALink","FooterLinkIcon","FontAwesomeIcon","CopyRightContainer","CopyRightText","Footer","marginBottom","fontWeight","href","target","icon","faEnvelope","rel","faFacebook","faWhatsapp","Dismissible","GlobalNotification","HeaderContainer","fixedPosition","NavbarContainer","visible","IconButton","StyledSideBarIcon","SideBarIcon","isSidebarOpen","Brand","Toggle","NavDropdown","NavLink1","NavLink","Navbar","onSideBarIconClick","history","useHistory","resetNotificationRef","pathname","Nav","onSelect","eventKey","push","search","isLogin","marginRight","position","color","right","top","backgroundColor","borderRadius","faUser","className","ScrollToTop","CustomModal","showModal","handleClose","footerPropsArray","manager","_actions","text","Modal","restoreFocus","onHide","centered","Header","Title","map","index","actionButtonBackgroundColor","Button","PrivateRoute","roles","rest","indexOf","from","PublicRoute","restricted","Toast","onClose","classes","useMemo","styles","join","ToastPortal","loaded","setLoaded","portalId","createElement","getElementsByTagName","prepend","removeChild","useToastPortal","ReactDOM","createPortal","toastContainer","getElementById","isBrowser","getScrollPosition","element","useWindow","x","y","getBoundingClientRect","scrollX","scrollY","left","useScrollPosition","effect","deps","wait","callBack","currPos","prevPos","useLayoutEffect","handleScroll","addEventListener","removeEventListener","Heading","h1","ErrorFallback","resetErrorBoundary","Ul","Li","P","p","Privacy","paddingLeft","componentLoader","lazyComponent","attemptsLeft","resolve","catch","reload","ActionContainer","ShipProfileContainer","ShipsList","fetchUserProfile","wfsUserProfileAPI","userProfile","useQuery","shipProfiles","shipProfile","Home","lazy","Login","SignUp","OrganizerInfo","StoreInfo","ProvideOrganizerInfo","ProvideStoreInfo","TermsAndConditions","TermsOfUse","EventInfo","OrganizerLocationManagement","ShipManagementForm","CreateEventInfoForm","EventManagement","FlowOperation","FlowReservation","FlowCancel","AboutUs","ContactUs","ShipInfo","NotFound","ParticipantReservationForm","ParticipantCancelReservationForm","EditProfile","FishingLocationProfileInfo","Notification","BenefitsMember","BenefitsOrganizer","Profile","FishingAppHome","ReservationsList","EventsList","SearchEventInfo","EmailConfirmation","CheckEmailAcknowledgement","Checkout","StripeAccountLink","SuccessPayment","PasswordResetForm","PasswordResetReenterPassword","SearchUser","CreateStripeAccount","OrganizerInvoice","ImportantDates","CheckOrganizerInvoice","queryClient","QueryClient","Overlay","Message","App","selectError","loginIfToken","isAppLoading","setIsApploading","showNavbar","setShowNavbar","isNavbarVisible","setIsNavbarVisible","showSideMenu","setShowSideMenu","isVisible","checkTokenBeforeAppLoad","resetError","addOneNotification","getUnReadCountRef","addOneUnReadCountRef","auth","token","connect","removeAllListeners","on","savedNotification","console","disconnect","minHeight","paddingBottom","exact","WrappedApp","QueryClientProvider","client","FallbackComponent","onError","errorInfo","fallback","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","render","StrictMode","authStatus","setUserLoginInfo","logoutAction","isOrganizer","isParticipant","signupAction","loginAction","xl","errorSlice","configureStore","reducer","router","connectRouter","errorReducer","userReducer","notificationReducer","middleware","getDefaultMiddleware","concat","routerMiddleware","h2","notificationsPage","notificationsTotalPageCount","fetchNotifications","upsertManyNotification","hasMoreNotifications","updateUnReadCountRef","updatedNotifications","unReadNotifications","obj","some","read_by","readerId","context","createContext","displayName","post","withCredentials","resendEmailToken","confirmEmail","emailToken","updatePassword","resetPassword","resetPasswordReenterPassword","passwordResetToken","delete"],"mappings":"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","file":"static/js/main.fd22b635.chunk.js","sourcesContent":["import { createBrowserHistory } from \"history\";\n\nexport default createBrowserHistory({ basename: process.env.REACT_APP_PUBLIC_URL });","export const ROUTE_PATH = {\n\t/**\n\t * Public\n\t */\n\tHOME: \"\",\n\tORGANIZER_INFO: \"organizer-info\",\n\tSTORE_INFO: \"store-info\",\n\tPROVIDE_ORGANIZER_INFO: \"provide-organizer-info\",\n\tPROVIDE_STORE_INFO: \"provide-store-info\",\n\tABOUT_US: \"about-us\",\n\tCONTACT_US: \"contact-us\",\n\tTERMS_AND_CONDITIONS: \"terms-and-conditions\",\n\tTERMS_OF_USE: \"terms-of-use\",\n\tPRIVACY: \"privacy\",\n\tBENEFITS_MEMBER: \"member-benefits\",\n\tBENEFITS_ORGANIZER: \"organizer-benefits\",\n\tEVENT_INFO: \"event-info\",\n\tFISHING_APP_HOME: \"fishing-app-home\",\n\tSEARCH_EVENT_INFO: \"search-event-info\",\n\tSEARCH_USER: \"search-user\",\n\n\tOPERATION_FLOW: \"operation-flow\",\n\tRESERVATION_FLOW: \"reservation-flow\",\n\tCANCEL_FLOW: \"cancel-flow\",\n\n IMPORTANT_DATES: \"important-dates\",\n\n\tCHECK_EMAIL: \"check-email\",\n\tEMAIL_CONFIRMATION: \"email-confirmation\",\n\n\tPROFILE: \"profile\",\n SHIP_INFO: \"ship-info\",\n\tFISHING_LOCATION_PROFILE_INFO: \"event-template\",\n\n\t/**\n\t * Auth\n\t */\n\tLOGIN: \"login\",\n\tSIGNUP: \"signup\",\n PASSWORD_RESET: \"reset-password\",\n PASSWORD_RESET_REENTER_PASSWORD: \"reset-password-update\",\n CREATE_STRIPE_ACCOUNT: \"create-stripe-account\",\n\n\t/**\n\t * Organizer\n\t */\n\tSHIP_MANAGEMENT_FORM: \"ship-management-form\",\n\tFISHING_LOCATION: \"fishing-location\",\n\tSHIPS_LIST: \"ships-list\",\n\n\tEVENTS_LIST: \"events-list\",\n\tEVENT_MANAGEMENT: \"event-management\",\n\tCREATE_EVENT: \"create-event\",\n\n ORGANIZER_INVOICE: \"organizer-invoice\",\n\n\t/**\n\t * Participant\n\t */\n\tPARTICIPANT_RESERVATION_FORM: \"participant-reservation-form\",\n\tRESERVATIONS_LIST: \"reservations-list\",\n\tPARTICIPANT_RESERVATION: \"participant-reservation\",\n\n\t/**\n\t * Participant and Organizer\n\t */\n\tEDIT_PROFILE: \"edit-profile\",\n\tNOTIFICATION: \"notification\",\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"toast\":\"styles_toast__OW0bK\",\"fadeIn\":\"styles_fadeIn__3qk9f\",\"success\":\"styles_success__7BCVd\",\"warning\":\"styles_warning__1Waiw\",\"error\":\"styles_error__2ZOYI\",\"info\":\"styles_info__2x6Z6\",\"message\":\"styles_message__3cKK-\"};","import styled from \"styled-components\";\nimport formInputCommon from \"./css/formInputCommon\";\nimport buttonCommon from \"./css/buttonCommon\";\n\nconst FormInputButton = styled.button`\n ${formInputCommon}\n ${buttonCommon}\n`;\n\nexport default FormInputButton;","import styled from \"styled-components\";\nimport H2 from \"./typography/H2\";\nimport { COLORS } from \"../constants/colors\";\n\nconst Heading2 = styled(H2)`\n position: relative;\n padding: 1rem;\n /* background-color: ${COLORS.BACKGROUND_COLOR}; */\n border-bottom: 6px solid ${COLORS.greyBlues[5]};\n max-width: 1200px;\n margin: 2rem auto 0;\n /* z-index: -1; */\n\n :before {\n position: absolute;\n bottom: -6px;\n left: 0;\n width: 30%;\n height: 6px;\n content: \"\";\n background-color: ${COLORS.greyBlues[3]};\n }\n`;\n\n\nexport default Heading2;\n","export const phoneFormat = (phone) => {\n\treturn phone.slice(0, 4) + \" \" + phone.slice(4);\n};\n\nexport const currencyFormat = (price) => {\n\tconst formatter = new Intl.NumberFormat(\"zh-HK\", {\n\t\tstyle: \"currency\",\n\t\tcurrency: \"HKD\",\n\t});\n\n\treturn formatter.format(price).replace(\"HK\", \"\");\n};\n\nexport const transformFilters = (filters) => {\n\treturn Object.fromEntries(\n\t\tObject.entries(filters).filter(([field, value]) => {\n\t\t\treturn value !== false && value !== undefined;\n\t\t})\n\t);\n};\n\n// Generate unique id\nexport const uuid = () => {\n\tlet dt = new Date().getTime();\n\n\treturn \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n\t\tvar r = (dt + Math.random() * 16) % 16 | 0;\n\t\tdt = Math.floor(dt / 16);\n\t\treturn (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n\t});\n};\n","import { io } from \"socket.io-client\";\nimport createNamedContext from \"./createNamedContext\";\n\nconst SOCKET_URL = \"/\";\n\nconst socket = io(SOCKET_URL, {\n autoConnect: false,\n transports: [\"websocket\", \"polling\"],\n path: `${process.env.REACT_APP_PUBLIC_URL}/socket`,\n});\nconst SocketContext = createNamedContext(\"socket\");\n\nexport const SocketProvider = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n\nexport default SocketContext;\n","export const COLORS = {\n RESERVATION_STATUS: {\n AVAILABLE: \"#fff\",\n RESERVED: \"#C1C1C1\",\n WAITING_FOR_CONFIRM: \"#F77272\",\n CONFIRMED_RESERVATION: \"#FFA803\",\n WAITING_FOR_PAYMENT: \"#ECFF03\",\n E_PAID: \"#4AAF00\",\n CASH_PAID: \"#577DFF\",\n WAITING_FOR_CANCEL: \"#B07BFF\",\n NO_SHOW: \"#ECFF03\",\n },\n\n BACKGROUND_COLOR: \"#fdfdfd\",\n\n EVENT_STATUS: {\n NOT_FORMED: \"#FFA803\",\n FORMED: \"#F8F4A6\",\n FULL: \"#F8F4A6\",\n // CHARTER: \"#F194B4\",\n // CANCEL: \"#EF7A85\",\n FINISHED: \"#B2C3FF\",\n },\n\n primarys: [\n \"#EEF2FF\",\n \"#D0DBFF\",\n \"#B2C3FF\",\n \"#94ACFF\",\n \"#7594FF\",\n \"#577DFF\",\n \"#4361C6\",\n \"#30458C\",\n \"#1C2953\",\n \"#090D1A\",\n ],\n\n dangers: [\n \"#FEF1F1\",\n \"#FDD8D8\",\n \"#FBBEBE\",\n \"#FAA5A5\",\n \"#F88B8B\",\n \"#F77272\",\n \"#BF5858\",\n \"#883F3F\",\n \"#502525\",\n \"#190B0B\",\n ],\n\n riceYellows: [\n \"#FFFEFD\",\n \"#FEFCF8\",\n \"#FEFAF4\",\n \"#FEF9EF\",\n \"#FDF7EB\",\n \"#FDF5E6\",\n \"#C4BEB2\",\n \"#8B877F\",\n \"#52504B\",\n \"#191917\",\n ],\n\n yellows: [\n \"#FDFFE6\",\n \"#FAFFB8\",\n \"#F6FF8B\",\n \"#F3FF5E\",\n \"#EFFF30\",\n \"#ECFF03\",\n \"#B7C602\",\n \"#828C02\",\n \"#4D5301\",\n \"#181A00\",\n ],\n\n greens: [\n \"#EDF7E6\",\n \"#CCE9B8\",\n \"#ACDA8A\",\n \"#8BCC5C\",\n \"#6BBD2E\",\n \"#4AAF00\",\n \"#398800\",\n \"#296000\",\n \"#183900\",\n \"#071200\",\n ],\n\n purples: [\n \"#F7F2FF\",\n \"#E9DAFF\",\n \"#DBC2FF\",\n \"#CCABFF\",\n \"#BE93FF\",\n \"#B07BFF\",\n \"#885FC6\",\n \"#61448C\",\n \"#392853\",\n \"#120C1A\",\n ],\n\n greys: [\n \"#F1F1F1\",\n \"#D7D7D7\",\n \"#BDBDBD\",\n \"#A4A4A4\",\n \"#8A8A8A\",\n \"#707070\",\n \"#575757\",\n \"#3E3E3E\",\n \"#242424\",\n \"#0B0B0B\",\n ],\n greyBlues: [\n \"#ECEDF2\",\n \"#CACDDA\",\n \"#A7ADC2\",\n \"#858DAA\",\n \"#626D92\",\n \"#404D7A\",\n \"#323C5F\",\n \"#232A43\",\n \"#151928\",\n \"#06080C\",\n ],\n};\n","import { useState, useCallback } from \"react\";\nimport createNamedContext from \"./createNamedContext\";\nimport Spinner from \"react-bootstrap/Spinner\";\n\nconst ModalContext = createNamedContext(\"modal\");\n\nexport const ModalProvider = ({ children }) => {\n\tconst [isShow, setIsShow] = useState(false);\n\tconst [title, setTitle] = useState(\"\");\n\tconst [body, setBody] = useState(() => {\n\t\treturn null;\n\t});\n\tconst [actions, setActions] = useState([]);\n\n\tconst show = useCallback(() => setIsShow(true), [setIsShow]);\n\tconst close = useCallback(() => setIsShow(false), [setIsShow]);\n\n\tconst showLoading = useCallback(() => {\n\t\tsetTitle(\"正在處理中\");\n\t\tsetBody(() => {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t處理中...\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t);\n\t\t});\n\t\tsetIsShow(true);\n\t}, [setIsShow]);\n\n\tconst contextValue = {\n\t\tisShow,\n\t\ttitle,\n\t\tbody,\n\t\tactions,\n\t\tshow,\n\t\tshowLoading,\n\t\tclose,\n\t\tsetTitle,\n\t\tsetBody,\n\t\tsetActions,\n\t};\n\n\treturn {children};\n};\n\nexport default ModalContext;\n","import { useState, useRef } from \"react\";\nimport createNamedContext from \"./createNamedContext\";\nimport { useToastAutoClose } from \"../hooks/useToastAutoClose\";\nimport { uuid } from \"../utils/commonUtils\";\n\nconst ToastContext = createNamedContext(\"toast\");\n\nexport const ToastProvider = ({ children }) => {\n\tconst [toasts, setToasts] = useState([]);\n\n\tconst [autoCloseTime, setAutoCloseTime] = useState(10000);\n\tconst [autoClose, setAutoClose] = useState(true);\n\n\tconst addMessage = useRef(() => {});\n\n\taddMessage.current = ({ mode, message, sender, goToUrl }) => {\n\t\tconst toast = { mode, message, sender, goToUrl };\n\t\tsetToasts((prevToasts) => {\n\t\t\treturn [...prevToasts, { ...toast, id: uuid() }];\n\t\t});\n\t};\n\n\tuseToastAutoClose({\n\t\ttoasts,\n\t\tsetToasts,\n\t\tautoClose,\n\t\tautoCloseTime,\n\t});\n\n\tconst removeToast = (id) => {\n\t\tsetToasts(toasts.filter((t) => t.id !== id));\n\t};\n\n\tconst contextValue = {\n\t\tsetAutoClose,\n\t\tsetAutoCloseTime,\n\t\tremoveToast,\n\t\taddMessage: addMessage,\n\t\ttoasts,\n\t};\n\n\treturn {children};\n};\n\nexport default ToastContext;\n","import { useEffect, useState } from \"react\";\n\nexport const useToastAutoClose = ({ toasts, setToasts, autoClose, autoCloseTime }) => {\n\tconst [removing, setRemoving] = useState(\"\");\n\n\tuseEffect(() => {\n\t\tif (removing) {\n\t\t\tsetToasts((t) => t.filter((_t) => _t.id !== removing));\n\t\t}\n\t}, [removing, setToasts]);\n\n\tuseEffect(() => {\n\t\tif (autoClose && toasts.length) {\n\t\t\tconst id = toasts[toasts.length - 1].id;\n\t\t\tsetTimeout(() => setRemoving(id), autoCloseTime);\n\t\t}\n\t}, [toasts, autoClose, autoCloseTime]);\n};\n","import { useContext } from \"react\";\nimport ModalContext from \"../contexts/ModalContext\";\n\nconst useModal = () => {\n return useContext(ModalContext);\n};\n\nexport default useModal;","import { useContext } from \"react\";\nimport ToastContext from \"../contexts/ToastContext\";\n\nconst useToast = () => {\n\treturn useContext(ToastContext);\n};\n\nexport default useToast;\n","import { css } from \"styled-components\";\nimport { COLORS } from \"../../../constants/colors\";\n\nexport default css`\n display: flex;\n align-items: center;\n justify-content: center;\n\n border: ${props => props.invert ? `1px solid ${COLORS.primarys[5]}` : \"none\"};\n border-radius: 3px;\n color: ${props => props.invert ? `${COLORS.primarys[5]}` : \"white\"};\n font-weight: 500;\n letter-spacing: .1em;\n background-color: ${props => props.invert ? \n props.disabled ? COLORS.greys[2] : `white` : \n props.disabled ? COLORS.greys[2] : COLORS.primarys[5]};\n cursor: pointer;\n\n font-size: 1.6rem;\n line-height: 1.6rem;\n padding: .8rem 1.6rem;\n\n .btn:active, .btn:focus {\n outline: none;\n box-shadow: none;\n }\n`;","import styled from \"styled-components\";\nimport rowCommon from \"./css/rowCommon\";\n\nconst RowContainer = styled.div`\n\t${rowCommon}\n`;\n\nexport default RowContainer;\n","import { css } from \"styled-components\";\n\nexport default css`\n padding: 0.5rem 1rem;\n`;\n","import wfsAPIBase from \"./base\";\nimport qs from \"qs\";\n\nexport const resourceName = \"user-profile\";\n\nexport const getUserProfileById = async (id) => {\n\treturn await wfsAPIBase.get(`/${resourceName}/${id}`);\n};\n\nexport const getUserProfile = async () => {\n\treturn await wfsAPIBase.get(`/${resourceName}`);\n};\n\nexport const updateUserProfile = async (data) => {\n\treturn await wfsAPIBase.put(`/${resourceName}/`, data);\n};\n\nexport const getUsersByQuery = async (query = {}) => {\n\treturn await wfsAPIBase.get(`/${resourceName}/search`, {\n\t\tparams: query,\n\t\tparamsSerializer: (params) => {\n\t\t\treturn qs.stringify(params);\n\t\t},\n\t});\n};\n","import { css } from \"styled-components\"\nimport { COLORS } from \"../../constants/colors\";\n\nexport default css`\n display: block;\n\tbackground-color: #fff;\n\tpadding: 1rem 0 1.5rem;\n\n\t:not(:last-child) {\n border-bottom: 1px solid ${COLORS.greys[2]};\n\t}\n`;","import { useRef } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport {\n showGlobalNotification,\n hideGlobalNotification,\n getLatestGlobalNotification,\n selectGlobalNotification,\n} from \"../features/notification/notificationSlice\";\n\nconst useGlobalNotification = () => {\n const dispatch = useDispatch();\n\n const getLatestNotificationRef = useRef(() => {});\n\n const globalNotification = useSelector(selectGlobalNotification);\n\n getLatestNotificationRef.current = () =>\n dispatch(getLatestGlobalNotification());\n\n const show = () => {\n dispatch(showGlobalNotification());\n };\n\n const hide = () => {\n dispatch(hideGlobalNotification());\n };\n\n return {\n ...globalNotification,\n getLatestNotificationRef,\n show,\n hide,\n };\n};\n\nexport default useGlobalNotification;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { COLORS } from \"../constants/colors\";\n\nconst Content = styled.div`\n width: 100%;\n height: 100vh;\n background-color: ${COLORS.BACKGROUND_COLOR};\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst Loading = styled.div`\n width: 150px;\n height: 50px;\n position: relative;\n\n p {\n top: 0;\n padding: 0;\n margin: 0;\n color: $c-01;\n font-family: $font-01;\n animation: text 3.5s ease both infinite;\n font-size: 24px;\n letter-spacing: 1px;\n\n @keyframes text {\n 0% {\n letter-spacing: 1px;\n transform: translateX(0px);\n }\n\n 40% {\n letter-spacing: 2px;\n transform: translateX(26px);\n }\n\n 80% {\n letter-spacing: 1px;\n transform: translateX(32px);\n }\n\n 90% {\n letter-spacing: 2px;\n transform: translateX(0px);\n }\n\n 100% {\n letter-spacing: 1px;\n transform: translateX(0px);\n }\n }\n }\n span {\n background-color: ${COLORS.greyBlues[5]};\n border-radius: 50px;\n display: block;\n height: 16px;\n width: 16px;\n bottom: 0;\n position: absolute;\n transform: translateX(64px);\n animation: loading 3.5s ease both infinite;\n\n &:before {\n position: absolute;\n content: \"\";\n width: 100%;\n height: 100%;\n background-color: ${COLORS.greyBlues[1]};\n border-radius: inherit;\n animation: loading2 3.5s ease both infinite;\n }\n\n @keyframes loading {\n 0% {\n width: 30px;\n transform: translateX(0px);\n }\n\n 40% {\n width: 100%;\n transform: translateX(0px);\n }\n\n 80% {\n width: 30px;\n transform: translateX(120px);\n }\n\n 90% {\n width: 100%;\n transform: translateX(0px);\n }\n\n 100% {\n width: 30px;\n transform: translateX(0px);\n }\n }\n @keyframes loading2 {\n 0% {\n transform: translateX(0px);\n width: 30px;\n }\n\n 40% {\n transform: translateX(0%);\n width: 80%;\n }\n\n 80% {\n width: 100%;\n transform: translateX(0px);\n }\n\n 90% {\n width: 80%;\n transform: translateX(30px);\n }\n 100% {\n transform: translateX(0px);\n width: 30px;\n }\n }\n }\n`;\n\nconst PageLoading = () => {\n return (\n \n \n

loading...

\n \n
\n
\n );\n};\n\nexport default PageLoading;\n","import styled from 'styled-components';\n\nconst H3 = styled.h3`\n font-size: 1.6rem;\n font-weight: 500;\n`;\n\nexport default H3;","import React from \"react\";\nimport styled from \"styled-components\";\nimport { BsFillPersonFill } from \"react-icons/bs\";\nimport { COLORS } from \"../constants/colors\";\n\nconst Container = styled.div`\n background-color: ${COLORS.riceYellows[1]};\n box-shadow: rgba(0, 0, 0, 0.16) 0px 0.1rem 0.4rem;\n`;\n\nconst ImageContainer = styled.div`\n background-image: ${(props) => `url(${props.backgroundImage})`};\n background-size: cover;\n background-position: center center;\n height: 10rem;\n`;\n\nconst ContentContainer = styled.div`\n display: flex;\n flex-direction: column;\n padding: 5px;\n width: 100%;\n height: 100%;\n font-size: 1.4rem;\n`;\n\nconst ContentRowContainer = styled.div`\n display: flex;\n align-items: center;\n flex-direction: row;\n`;\n\nconst ShipProfileBox = ({ canBeChartered, seatAmount, shipName, imageURIs }) => {\n const imageUrl = \"https://via.placeholder.com/80\";\n\n return (\n \n \n \n {shipName}\n \n \n {seatAmount}位\n \n {/* \n {canBeChartered ? : }\n 包船\n */}\n \n \n );\n};\n\nexport default ShipProfileBox;\n","export const USER_ROLES = {\n\tPARTICIPANT: \"會員\",\n ORGANIZER: \"主辦單位\"\n};\n\n// !!! Do strict checking in server, this \"status\" is for display purpose\nexport const USER_ACCOUNT_STATUS = {\n PROVISIONED: \"PROVISIONED\",\n ACTIVE: \"ACTIVE\",\n RECOVERY: \"RECOVERY\"\n};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"toastContainer\":\"styles_toastContainer__20GFV\"};","import axios from \"axios\";\nimport store from \"../../app/store\";\nimport { USER_ACCOUNT_STATUS } from \"../../constants/user\";\n// import history from \"../../app/history\";\nimport { setError } from \"../../features/error/errorSlice\";\nimport { getNewAccessToken } from \"../../features/user/userSlice\";\n\nconst instance = axios.create({\n baseURL: `${process.env.REACT_APP_PUBLIC_URL}/api/v1/`,\n});\n\n// log send request\ninstance.interceptors.request.use((req) => {\n // console.log(\"Starting Request\", JSON.stringify(req, null, 2));\n return req;\n});\n\ninstance.interceptors.response.use(\n (res) => {\n // console.log(\"RECEIVING res:\");\n // console.log(res);\n\n return res;\n },\n (error) => {\n // console.log(\"AXIOS ERROR: response error:\");\n\n let errorObject = {\n message: \"出現了未知的錯誤\",\n };\n\n if (error.response) {\n // 5xx / 4xx error\n\n // console.log(error.response.data);\n // console.log(error.response.status);\n // console.log(error.response.headers);\n\n const { status } = error.response;\n\n // custom error handling\n if (status === 500) {\n // error.response.message = error.response.data;\n\n store.dispatch(setError(errorObject));\n window.scrollTo(0, 0);\n }\n if (status === 404) {\n // store.dispatch(setError(error.response.data.error));\n store.dispatch(setError(errorObject));\n window.scrollTo(0, 0);\n }\n\n if (status === 403) {\n if (\n store.getState().user?.user.status ===\n USER_ACCOUNT_STATUS.PROVISIONED\n ) {\n store.dispatch(\n setError({ message: \"請先激活你的帳戶以完成操作\" })\n );\n window.scrollTo(0, 0);\n }\n }\n\n if (status === 401) {\n return store\n .dispatch(getNewAccessToken())\n .unwrap()\n .then((result) => {\n // console.log({ result });\n\n instance.defaults.headers.common[\n \"Authorization\"\n ] = `Bearer ${result.accessToken}`;\n error.config.headers[\n \"Authorization\"\n ] = `Bearer ${result.accessToken}`;\n\n return instance.request(error.config);\n });\n }\n\n // if (error.response.status === 422) {\n // errorObject.message = \"資料輸入錯誤\";\n // store.dispatch(setError(errorObject));\n // }\n } else if (error.request) {\n // never received a response, or request never left\n // console.log({ \"error.request\": error.request });\n } else {\n // console.log(\"Error: error.message\", error.message);\n }\n\n return Promise.reject(error);\n }\n);\n\nexport default instance;\n","import wfsAPIBase from \"./base\";\nimport qs from \"qs\";\n\nconst resourceName = \"notifications\";\n\n/**\n *\n * @param {*} data: {\"sender\": senderId, \"receiver\": receiverId, \"message\": message}\n * @returns\n */\nexport const createNotification = async (data) => {\n return await wfsAPIBase.post(`/${resourceName}/`, data);\n};\n\nexport const getNotifications = async (userId) => {\n return await wfsAPIBase.get(`/${resourceName}/${userId}/`);\n};\n\nexport const getUnReadCount = async () => {\n return await wfsAPIBase.get(`/${resourceName}/unReadCount`);\n};\n\nexport const getFiniteNotifications = async (query = {}) => {\n return await wfsAPIBase.get(`/${resourceName}`, {\n params: query,\n paramsSerializer: (params) => {\n return qs.stringify(params);\n },\n });\n};\n\n/**\n *\n * @param {*} userId\n * @param {*} data : {\"notificationsIds: [\"notificationsId1\", ... ,]}\n * @returns\n */\nexport const updateNotifications = async (userId, data) => {\n return await wfsAPIBase.post(`/${resourceName}/${userId}/`, data);\n};\n","import wfsAPIBase from \"./base\";\n\nexport const resourceName = \"global-notifications\";\n\nexport const getLatestNotification = async () => {\n return await wfsAPIBase.get(`/${resourceName}/latest`);\n}","import {\n createSlice,\n createAsyncThunk,\n createEntityAdapter,\n} from \"@reduxjs/toolkit\";\n// import moment from \"moment\";\n// import \"moment/locale/zh-hk\";\nimport * as wfsNotificationsAPI from \"../../api/wfsAPI/notifications\";\nimport * as wfsGlobalNotificationsAPI from \"../../api/wfsAPI/global-notifications\";\n\nimport isBefore from \"date-fns/isBefore\";\nimport isEqual from \"date-fns/isEqual\";\n// import { compareTime } from \"../../utils/datetimeUtils\";\n\n// moment.locale(\"zh-hk\");\n\n/**\n * Initial state\n */\nconst notificationsAdapter = createEntityAdapter({\n selectId: (notification) => notification._id,\n sortComparer: (a, b) => {\n const dateA = new Date(a.createdAt);\n const dateB = new Date(b.createdAt);\n\n // return compareTime(dateB, dateA);\n // const dateA = moment(a.createdAt);\n // const dateB = moment(b.createdAt);\n\n if (isBefore(dateA, dateB)) {\n return 1;\n } else if (isEqual(dateA, dateB)) {\n return 0;\n } else {\n return -1;\n }\n },\n});\n\n// extract later\nconst errorResponse = (err) => {\n return {\n status: err.response.status,\n data: err.response.data,\n headers: err.response.headers,\n };\n};\n\nexport const getNotifications = createAsyncThunk(\n \"notification\",\n // async (userId, { rejectWithValue }) => {\n // try {\n // // await wfsAuthAPI.logout();\n // return await (\n // await wfsNotificationsAPI.getNotifications(userId)\n // ).data.data;\n // } catch (err) {\n // return rejectWithValue(errorResponse(err));\n // }\n // }\n\n async ({ page, perPage = 10 }, { rejectWithValue }) => {\n try {\n const result = await wfsNotificationsAPI.getFiniteNotifications({\n page,\n perPage,\n });\n return result.data.data;\n } catch (err) {\n return rejectWithValue(errorResponse(err));\n }\n }\n);\n\nexport const getUnReadCount = createAsyncThunk(\n \"notification/getUnReadCount\",\n async (data, { rejectWithValue }) => {\n try {\n const result = await wfsNotificationsAPI.getUnReadCount();\n\n return result.data.data;\n } catch (err) {\n return rejectWithValue(errorResponse(err));\n }\n }\n);\n\nexport const getLatestGlobalNotification = createAsyncThunk(\n \"notification/getLastestGlobalNotification\",\n async (data, { rejectWithValue }) => {\n try {\n const result =\n await wfsGlobalNotificationsAPI.getLatestNotification();\n if (!result.data.data) {\n return rejectWithValue({ message: \"No global notification\" });\n }\n return result.data.data;\n } catch (err) {\n return rejectWithValue(errorResponse(err));\n }\n }\n);\n\n// reducers\nconst loading = (state) => {\n state.status = \"loading\";\n};\n\nexport const notificationSlice = createSlice({\n name: \"notification\",\n initialState: notificationsAdapter.getInitialState({\n status: \"idle\",\n page: 0,\n totalPageCount: 0,\n globalNotification: {\n isShow: false,\n message: \"歡迎來到水樂坊\",\n status: \"idle\",\n },\n unReadCount: 0,\n }),\n reducers: {\n addOne: (state, action) => {\n notificationsAdapter.addOne(state, action.payload);\n },\n upsertMany: notificationsAdapter.upsertMany,\n addOneUnReadCount: (state) => {\n state.unReadCount = state.unReadCount + 1;\n },\n updateUnReadCount: (state, action) => {\n state.unReadCount = Math.max(state.unReadCount - action.payload, 0);\n },\n resetNotification: () =>\n notificationsAdapter.getInitialState({\n status: \"idle\",\n page: 0,\n totalPageCount: 0,\n globalNotification: {\n isShow: true,\n message: \"歡迎來到水樂坊\",\n status: \"idle\",\n },\n unReadCount: 0,\n }),\n\n // global notification\n showGlobalNotification: (state) => {\n state.globalNotification.isShow = true;\n },\n hideGlobalNotification: (state) => {\n state.globalNotification.isShow = false;\n },\n },\n extraReducers: (builder) => {\n builder\n // .addCase(getNotifications.pending, loading)\n // .addCase(getNotifications.fulfilled, (state, action) => {\n // notificationsAdapter.setAll(state, action.payload);\n // })\n .addCase(getNotifications.pending, loading)\n .addCase(getNotifications.fulfilled, (state, action) => {\n notificationsAdapter.addMany(\n state,\n action.payload.notifications\n );\n state.page = state.page + 1;\n state.totalPageCount = action.payload.totalPageCount;\n })\n .addCase(getLatestGlobalNotification.pending, (state) => {\n state.globalNotification.status = \"loading\";\n })\n .addCase(getLatestGlobalNotification.fulfilled, (state, action) => {\n state.globalNotification.status = \"idle\";\n state.globalNotification.message = action.payload.message;\n })\n .addCase(getLatestGlobalNotification.rejected, (state, action) => {\n state.globalNotification.status = \"idle\";\n })\n .addCase(getUnReadCount.pending, loading)\n .addCase(getUnReadCount.fulfilled, (state, action) => {\n state.unReadCount = action.payload.unReadCount;\n });\n },\n});\n\n/**\n * Actions\n */\nexport const {\n addOne,\n upsertMany,\n showGlobalNotification,\n hideGlobalNotification,\n updateUnReadCount,\n addOneUnReadCount,\n resetNotification,\n} = notificationSlice.actions;\n\n/**\n * default export reducer\n */\nexport default notificationSlice.reducer;\n\n/**\n * selectors\n */\nexport const { selectAll: selectNotifications, sele } =\n notificationsAdapter.getSelectors((state) => state.notification);\nexport const selectNotificationPage = (state) => state.notification.page;\nexport const selectNotificationsTotalPageCount = (state) =>\n state.notification.totalPageCount;\nexport const selectNotificationsUnReadCount = (state) =>\n state.notification.unReadCount;\nexport const selectGlobalNotification = (state) =>\n state.notification.globalNotification;\n","import styled from \"styled-components\";\nimport H3 from \"./typography/H3\";\nimport { COLORS } from \"../constants/colors\";\n\nconst Heading3 = styled(H3)`\n padding: 1rem .7rem;\n border-left: 6px solid ${COLORS.greyBlues[5]};\n background: #ddd;\n margin: 1rem auto 0;\n max-width: 1200px;\n width: 100%;\n`;\n\nexport default Heading3;","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\";\nimport * as wfsAuthAPI from \"../../api/wfsAPI/auth\";\n\n/**\n * Initial state\n */\nconst initialState = {\n status: \"idle\",\n user: {\n _id: null,\n username: null,\n nickname: null,\n role: null,\n\n status: null, // !!! Please do strict checking in backend, this \"status\" is only for display\n },\n accessToken: null,\n expiresIn: null,\n};\n\n// extract later\nconst errorResponse = (err) => {\n return {\n status: err.response.status,\n data: err.response.data,\n headers: err.response.headers,\n };\n};\n\n// { username: \"...\", password: \"...\", role: \"...\", nickname: \"...\" }\nexport const signup = createAsyncThunk(\n \"user/signup\",\n async (data, { rejectWithValue }) => {\n try {\n const response = await wfsAuthAPI.signup(data);\n\n return response.data;\n } catch (err) {\n return rejectWithValue(errorResponse(err));\n }\n }\n);\n\n// { username: \"...\", password: \"...\" }\nexport const login = createAsyncThunk(\n \"user/login\",\n async (data, { rejectWithValue }) => {\n try {\n const response = await wfsAuthAPI.login(data);\n\n // user info\n return response.data;\n } catch (err) {\n return rejectWithValue(errorResponse(err));\n }\n }\n);\n\nexport const getNewAccessToken = createAsyncThunk(\n \"user/getNewAccessToken\",\n async (data, { rejectWithValue }) => {\n try {\n const response = await wfsAuthAPI.getNewAccessToken();\n\n // access token\n return response.data;\n } catch (err) {\n return rejectWithValue(errorResponse(err));\n }\n }\n);\n\nexport const logout = createAsyncThunk(\n \"user/logout\",\n async (data, { rejectWithValue }) => {\n try {\n await wfsAuthAPI.logout();\n } catch (err) {\n return rejectWithValue(errorResponse(err));\n }\n }\n);\n\n// reducers\nconst loading = (state) => {\n state.status = \"loading\";\n};\n\nconst authSuccess = (state, action) => {\n const { user, accessToken, expiresIn } = action.payload;\n\n state.user = user;\n state.accessToken = accessToken;\n state.expiresIn = expiresIn;\n\n state.status = \"idle\";\n};\n\nexport const userSlice = createSlice({\n name: \"user\",\n initialState,\n reducers: {\n authSucceeded: authSuccess\n },\n extraReducers: (builder) => {\n builder\n .addCase(signup.pending, loading)\n .addCase(signup.fulfilled, authSuccess)\n .addCase(login.pending, loading)\n .addCase(login.fulfilled, authSuccess)\n .addCase(getNewAccessToken.pending, loading)\n .addCase(getNewAccessToken.fulfilled, authSuccess)\n .addCase(logout.pending, loading)\n .addCase(logout.fulfilled, () => initialState);\n },\n});\n\n/**\n * Actions\n */\nexport const { authSucceeded } = userSlice.actions;\n\n/**\n * default export reducer\n */\nexport default userSlice.reducer;\n\n/**\n * selectors\n */\nexport const selectAuthStatus = (state) => state.user.status;\nexport const selectUser = (state) => state.user.user;\nexport const selectAccessToken = (state) => state.user.accessToken;\nexport const selectRefreshToken = (state) => state.user.refreshToken;\n","import React, { useState, useEffect } from \"react\";\nimport { useLocation } from \"react-router\";\nimport styled, { css } from \"styled-components\";\nimport { FaChevronUp, FaChevronDown } from \"react-icons/fa\";\nimport { COLORS } from \"../constants/colors\";\n\nconst StyledMenu = styled.ul`\ndisplay: flex;\nflex-direction: column;\njustify-content: center;\nalign-items: center;\nlist-style-type: none;\ncolor: ${COLORS.primarys[8]};\nfont-size: 2rem;\n`;\n\nconst Menu = ({ children, ...props }) => {\n return {children};\n};\n\n// Header Row\nconst StyledHeaderRowContainer = styled.div`\n display: flex;\n padding: 1rem 1rem;\n align-items: center;\n cursor: pointer;\n`;\nconst HeaderRow = ({ title, isOpen, ...props }) => {\n return (\n \n {title}\n {isOpen ? (\n \n ) : (\n \n )}\n \n );\n};\n\n// Sub Menu Ul\nconst StyledSubMenuUl = styled.ul`\n background-color: #fafafa;\n list-style: none;\n overflow: hidden;\n max-height: ${(props) => (props.isOpen ? \"10000px\" : \"0px\")};\n transition: all 0.2s;\n\n > li {\n padding-left: 4rem;\n border-top: 1px solid #eee;\n }\n`;\n// Sub Menu\nconst StyledSubMenu = styled.li``;\nconst SubMenu = ({ title, closeOnRouteChange = true, children, ...props }) => {\n const [isOpen, setOpen] = useState(false);\n\n const location = useLocation();\n\n useEffect(() => {\n if (closeOnRouteChange) {\n setOpen(false);\n }\n }, [setOpen, closeOnRouteChange, location, location.key]);\n\n return (\n \n {/* Header */}\n {\n setOpen(!isOpen);\n }}\n />\n {children}\n \n );\n};\n\nconst listItemCommonCss = css`\n display: block;\n padding: 1.5rem 1rem;\n`;\n\nconst listItemCss = css``;\n\nconst ListItem = styled.li`\n ${listItemCommonCss}\n ${listItemCss}\n`;\n\nconst ListItemWithComponentInside = styled.li`\n ${listItemCss}\n\n > * {\n ${listItemCommonCss}\n }\n`;\n\nconst Item = ({ children, component, ...props }) => {\n const Component = component;\n\n if (Component) {\n return (\n \n {children}\n \n );\n }\n\n return {children};\n};\n\nMenu.SubMenu = SubMenu;\nMenu.Item = Item;\nexport default Menu;\n","import React, { useEffect } from \"react\";\nimport {\n FaTimes\n} from \"react-icons/fa\";\nimport {\n Link,\n} from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { BREAKPOINTS } from \"../../constants/breakpoints\";\nimport { COLORS } from \"../../constants/colors\";\nimport { ROUTE_PATH } from \"../../constants/routePaths\";\nimport useAuth from \"../../hooks/useAuth\";\nimport useNotification from \"../../hooks/useNotification\";\nimport Menu from \"../Menu\";\n\nconst StyledSideMenu = styled.div`\n width: 100%;\n height: 100%;\n font-size: 1.6rem;\n padding-right: 6rem;\n position: fixed;\n z-index: 1000;\n -webkit-transition: all 0.3s;\n -moz-transition: all 0.3s;\n -o-transition: all 0.3s;\n transition: all 0.3s;\n\n opacity: ${(props) => (props.isSideMenuShow ? 1 : 0)};\n transform: ${(props) =>\n props.isSideMenuShow ? \"translateX(0)\" : \"translateX(-100%)\"};\n\n @media only screen and (min-width: ${BREAKPOINTS.sm}px) {\n width: 40%;\n min-width: 400px;\n max-width: 600px;\n }\n`;\n\nconst ScrollContainer = styled.div`\n background-color: ${COLORS.BACKGROUND_COLOR};\n overflow: hidden;\n width: 100%;\n height: 100%;\n border-right: 1px solid #eee;\n`;\n\nconst ScrollContent = styled.div`\n height: 100%;\n width: calc(100% + 1rem);\n padding-right: 1rem;\n overflow-y: auto;\n`;\n\nconst SideMenuHeader = styled.div`\n color: white;\n padding: 4rem 1rem;\n font-size: 1.8rem;\n text-align: center;\n`;\n\n// const GlobalActionsListContainer = styled.div`\n// display: flex;\n// border-bottom: 1px solid #eee;\n// position: sticky;\n// top: 0px;\n// background-color: #fff;\n\n// > div {\n// flex: 1;\n// }\n// `;\n\n// const GlobalActionContainer = styled.div`\n// cursor: pointer;\n// display: flex;\n// flex-direction: column;\n// align-items: center;\n\n// > div {\n// font-size: 2.4rem;\n// color: ${COLORS.greyBlues[5]};\n// }\n\n// > span {\n// font-size: 1.4rem;\n// }\n// `;\n\nconst SideMenuListHeader = styled.div`\n border-top: 3rem solid #ccc;\n background-color: ${COLORS.greyBlues[5]};\n color: white;\n padding: 2rem 1rem;\n`;\n\nconst CloseButton = styled.span`\n position: absolute;\n top: 0;\n right: 0;\n height: 6rem;\n width: 6rem;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${COLORS.BACKGROUND_COLOR};\n\n > div {\n font-size: 2rem;\n }\n`;\n\nconst IconContainer = styled.div`\n display: inline-block;\n font-size: 1.8rem;\n margin-right: 1rem;\n transform: translateY(-1px);\n color: ${COLORS.primarys[7]};\n`;\n\nconst Image = styled.img`\n width: 80%;\n height: auto;\n @media only screen and (min-width: ${BREAKPOINTS.md}px) {\n width: 200px;\n height: 40px;\n }\n`;\n\nconst SideMenu = ({ isSideMenuShow, onCloseButtonClick }) => {\n // const history = useHistory();\n const user = useAuth();\n\n const { unReadCount } = useNotification();\n\n // console.log(\"notifications\", notifications);\n // console.log(\"unReadNotifications\", unReadNotifications);\n\n useEffect(() => {\n if (isSideMenuShow) {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n }, [isSideMenuShow]);\n\n return (\n \n \n \n \n \n \n\n {/* \n {\n history.push(\"/\");\n }}\n >\n
\n \n
\n 主頁\n \n {process.env.NODE_ENV !== \"production\" && (\n <>\n {\n if (user.role === \"ORGANIZER\") {\n history.push(\"/events-list\");\n } else if (\n user.role === \"PARTICIPANT\"\n ) {\n history.push(\"/reservations-list\");\n } else {\n history.push(\"/login\");\n }\n }}\n >\n
\n \n
\n {user.role === \"ORGANIZER\" ? (\n 管理活動\n ) : (\n 你的預約\n )}\n \n {\n history.push(\"/notification\");\n }}\n >\n
\n {unReadCount !== 0 && (\n \n {unReadCount >= 99\n ? \"99+\"\n : unReadCount}\n
\n )}\n \n \n 通知\n \n {\n history.push(\"/profile\");\n }}\n >\n
\n \n
\n 帳戶\n \n \n )}\n
*/}\n\n \n \n 主頁\n \n {/* \n \n \n \n 預約釣魚\n */}\n\n {/* \n \n \n \n 通知\n {unReadCount !== 0 && (\n \n {unReadCount >= 99 ? \"99+\" : unReadCount}\n \n )}\n */}\n \n 搜尋活動\n \n \n 關於我們\n \n \n 聯絡我們\n \n\n {/* \n \n \n \n 搜尋用戶\n */}\n\n {/* {user.isLogin.current() && user.isParticipant() && (\n <>\n \n 你的預約\n \n \n )} */}\n\n {/* {user.isLogin.current() && user.isOrganizer() && (\n <>\n \n 管理活動\n \n \n 管理船隻\n \n \n )} */}\n\n {/* 資訊\n\n \n \n \n {Object.entries(STORE_PRODUCT_TYPES).map(\n ([key, type]) => (\n \n {type}\n \n )\n )}\n \n \n {Object.entries(DISTRICTS).map(\n ([bigDistrcit, districts]) => {\n return Object.entries(\n districts\n ).map(([key, district]) => (\n \n {district}\n \n ));\n }\n )}\n \n \n \n \n {Object.entries(EVENT_TYPES).map(\n ([key, type]) => (\n \n {type}\n \n )\n )}\n \n \n {Object.entries(FISHING_LOCATIONS)\n .filter(\n ([key, type]) => key !== \"OTHER\"\n )\n .map(([key, type]) => (\n \n {type}\n \n ))}\n \n \n \n\n 提供資料\n \n 提供釣具店資訊\n \n \n 提供主辦單位資訊\n */}\n \n
\n \n
\n \n
\n
\n
\n
\n );\n};\n\nexport default SideMenu;\n","import {\n faFacebook,\n faWhatsapp\n} from \"@fortawesome/free-brands-svg-icons\";\nimport {\n faEnvelope,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Link } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { BREAKPOINTS } from \"../../constants/breakpoints\";\nimport { COLORS } from \"../../constants/colors\";\nimport { ROUTE_PATH } from \"../../constants/routePaths\";\nimport Container from \"../Container\";\nimport H2 from \"../typography/H2\";\n\nconst FooterContainer = styled.div`\n padding: 8rem 0 1rem;\n background-color: ${COLORS.greyBlues[5]};\n color: white;\n font-size: 1.4rem;\n margin-top: auto;\n`;\n\nconst FooterLinksContainer = styled(Container)`\n font-size: 1.4rem;\n color: white;\n justify-content: space-evenly;\n display: grid;\n grid-template-rows: repeat(4, auto);\n row-gap: 50px;\n @media only screen and (min-width: ${BREAKPOINTS.lg}px) {\n grid-template-rows: none;\n grid-template-columns: 1fr 1fr 1fr 1fr;\n row-gap: 0;\n column-gap: 50px;\n text-align: left;\n }\n`;\n\nconst FooterLinksColumn = styled.div`\n flex: 1;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst FooterLink = styled(Link)`\n padding: 1rem 0;\n`;\nconst FooterALink = styled.a`\n padding: 1rem 0;\n`;\n\nconst FooterLinkIcon = styled(FontAwesomeIcon)`\n padding-right: 0.5rem;\n`;\n\nconst CopyRightContainer = styled(Container)`\n display: block;\n width: 75%;\n margin: 0 auto;\n padding: 2rem 6rem 1rem;\n margin-top: 4rem;\n border-top: 1px solid white;\n text-align: center;\n`;\nconst CopyRightText = styled.span`\n font-family: \"Roboto\", \"Noto Sans HK\", sans-serif;\n font-weight: 100;\n`;\n\nconst Footer = () => {\n return (\n \n \n \n

聯絡我們

\n waterfunsquare@gmail.com\n WaterFun Square 水樂坊\n 釣魚人 +85291892762\n
\n \n

關於我們

\n 關於水樂坊\n 聯絡我們\n
\n \n

了解更多

\n 水樂坊運作流程\n 預約活動流程\n 取消活動流程\n 重要日子及時間\n 對會員的好處\n 對主辦單位的好處\n
\n \n

條款

\n 條款及細則\n 使用條款\n 私隱政策\n
\n
\n \n Copyright © 2023 WaterFun Square 水樂坊. All rights reserved.\n \n
\n );\n};\n\nexport default Footer;\n","import React, { useEffect } from \"react\";\nimport styled from \"styled-components\";\nimport { FaTimes } from \"react-icons/fa\";\nimport { COLORS } from \"../constants/colors\";\nimport useGlobalNotification from \"../hooks/useGlobalNotification\";\n\nconst Container = styled.div`\n background-color: ${COLORS.yellows[5]};\n max-height: ${(props) => (props.isShow ? \"100px\" : \"0px\")};\n overflow-y: hidden;\n transition: max-height 0.3s;\n`;\n\nconst ContentContainer = styled.div`\n max-width: 1200px;\n margin: 0 auto;\n position: relative;\n font-size: 1.6rem;\n padding: 1rem 2rem;\n text-align: center;\n`;\n\nconst Dismissible = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n padding: 1rem;\n padding-right: .4rem;\n color: ${COLORS.greys[5]};\n cursor: pointer;\n`;\n\nconst GlobalNotification = ({ children, ...props }) => {\n const { isShow, hide, message, getLatestNotificationRef } =\n useGlobalNotification();\n\n useEffect(() => {\n getLatestNotificationRef.current();\n }, [getLatestNotificationRef]);\n\n return (\n \n \n {message}\n \n \n \n \n \n );\n};\n\nexport default GlobalNotification;\n","import { faUser } from \"@fortawesome/free-solid-svg-icons/faUser\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React from \"react\";\nimport Nav from \"react-bootstrap/Nav\";\nimport NavDropdown from \"react-bootstrap/NavDropdown\";\nimport { FaBell } from \"react-icons/fa\";\nimport { Link, NavLink, useHistory, useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { BREAKPOINTS } from \"../../constants/breakpoints\";\nimport { COLORS } from \"../../constants/colors\";\nimport { ROUTE_PATH } from \"../../constants/routePaths\";\nimport useAuth from \"../../hooks/useAuth\";\nimport useNotification from \"../../hooks/useNotification\";\nimport Container from \"../Container\";\nimport GlobalNotification from \"../GlobalNotification\";\n\nconst HeaderContainer = styled.div`\n position: ${(props) => (props.fixedPosition ? \"fixed\" : \"sticky\")};\n top: 0;\n z-index: 200;\n`;\n\nconst NavbarContainer = styled.div`\n display: flex;\n align-items: center;\n padding: 0 1rem;\n background-color: ${(props) => (props.visible ? \"white\" : \"transparent\")};\n font-size: 1.6rem;\n border-bottom: ${(props) =>\n props.visible ? `1px solid ${COLORS.greys[0]}` : \"transparent\"};\n transition: all 0.3s;\n width: 100%;\n box-shadow: 0 24px 40px 0 #4f4a4f1A;\n\n opacity: ${(props) => (props.show ? 1 : 0)};\n visibility: ${(props) => (props.show ? \"show\" : \"hidden\")};\n`;\n\nconst IconButton = styled.div`\n width: 4rem;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n cursor: pointer;\n @media only screen and (min-width: ${BREAKPOINTS.md}px) {\n display: none;\n }\n`;\n\nconst StyledSideBarIcon = styled.div`\n width: 2rem;\n height: 1.5rem;\n position: relative;\n transform: rotate(0deg);\n transition: 0.5s ease-in-out;\n\n & span {\n display: block;\n position: absolute;\n height: 0.3rem;\n width: 100%;\n background: black;\n border-radius: 0.3rem;\n opacity: 1;\n left: 0;\n transform: rotate(0deg);\n transition: 0.25s ease-in-out;\n }\n\n & span:nth-child(1) {\n top: 0px;\n }\n\n & span:nth-child(2) {\n top: 0.6rem;\n }\n\n & span:nth-child(3) {\n top: 1.2rem;\n }\n`;\nconst SideBarIcon = ({ isSidebarOpen }) => {\n return (\n \n \n \n \n \n );\n};\n\nconst Brand = styled(Link)`\n padding: 1rem 0;\n margin-right: 1rem;\n transition: opacity 0.3s visibility 0.3s;\n opacity: ${(props) => (props.show === \"true\" ? 1 : 0)};\n visibility: ${(props) => (props.show === \"true\" ? \"visible\" : \"hidden\")};\n`;\n\nconst Image = styled.img`\n width: 15rem;\n height: 3rem;\n @media only screen and (min-width: ${BREAKPOINTS.md}px) {\n width: 200px;\n height: 40px;\n }\n`;\n\nconst Toggle = styled(NavDropdown)`\n background-color: ${COLORS.greys[1]};\n border-radius: 20px;\n ::after {\n display: none;\n }\n &:hover{\n background: ${COLORS.greys[2]};\n }\n`;\n\nconst NavLink1 = styled(NavLink)`\n transition: all 0.3s;\n align-items: center;\n height: 100%;\n &:hover{\n background: ${COLORS.greys[0]};\n }\n display: none;\n @media only screen and (min-width: ${BREAKPOINTS.md}px) {\n display: flex;\n }\n`;\n\nconst Navbar = ({ show, visible, isSidebarOpen, onSideBarIconClick }) => {\n const history = useHistory();\n const location = useLocation();\n\n const { unReadCount, resetNotificationRef } = useNotification();\n\n const user = useAuth();\n\n const handleSelect = (eventKey) => {\n // alert(`selected ${eventKey}`);\n\n if (eventKey === \"notification\") {\n history.push(\"/notification\");\n }\n\n if (eventKey === \"profile\") {\n history.push(\"/profile\");\n }\n\n if (eventKey === \"login\") {\n history.push(\"/login\");\n }\n\n if (eventKey === \"signup\") {\n history.push({\n pathname: `/${ROUTE_PATH.TERMS_AND_CONDITIONS}`,\n search: \"?isSignUp=true\",\n });\n }\n\n if (eventKey === \"logout\") {\n user.logout();\n resetNotificationRef.current();\n history.replace(\"/login\");\n }\n\n if (eventKey === \"edit\") {\n history.push(\"/edit-profile\");\n }\n };\n\n return (\n \n {/* SOMETHING */}\n \n \n \n \n \n \n \n \n \n <>\n \n 搜尋活動\n \n \n 關於我們\n \n \n 聯絡我們\n \n {/* \n 常見問題\n */}\n {user.isLogin.current() && (\n \n \n
\n {unReadCount !== 0 && (\n \n {unReadCount >= 99\n ? \"99+\"\n : unReadCount}\n
\n )}\n \n \n
\n \n )}\n \n {user.isLogin.current() ? (\n }\n id=\"nav-dropdown\"\n >\n \n {user.nickname}\n \n \n 編輯個人檔案\n \n {/* \n 設定\n */}\n \n 登出\n \n \n ) : (\n
\n \n 註冊\n \n \n 登入\n \n
\n )}\n \n \n \n
\n \n
\n );\n};\n\nexport default Navbar;\n","import { useEffect } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\n\nexport default function ScrollToTop() {\n const { pathname } = useLocation();\n const history = useHistory();\n\n useEffect(() => {\n if (history.action === \"PUSH\" || history.action === \"REPLACE\") {\n window.scrollTo(0, 0);\n }\n }, [history.action, pathname]);\n\n return null;\n}\n","import Modal from \"react-bootstrap/Modal\";\nimport Button from \"react-bootstrap/Button\";\n\nconst CustomModal = ({ showModal, title, actions, footerPropsArray, handleClose, manager, children }) => {\n\tlet _actions = [{\n text: \"關閉\",\n action: handleClose,\n }]\n\n if (actions && actions.length > 0) {\n _actions = [..._actions, ...actions];\n }\n \n return (\n\t\t\n\t\t\t\n\t\t\t\t{title}\n\t\t\t\n\t\t\t{children}\n\t\t\t\n { _actions.map(({ text, action, actionButtonBackgroundColor }, index) => {\n return (\n \n )\n }) }\n\t\t\t\n\t\t\n\t);\n};\n\nexport default CustomModal;\n","import React from \"react\";\nimport { Route, Redirect, useLocation } from \"react-router\";\nimport useAuth from \"../../hooks/useAuth\";\n\nconst PrivateRoute = ({ children, roles, ...rest }) => {\n const location = useLocation();\n const user = useAuth();\n\n if (!user.isLogin.current()) {\n return (\n \n );\n }\n\n if (roles && roles.indexOf(user.role) === -1) {\n return ;\n }\n\n return (\n {children}\n );\n};\n\nexport default PrivateRoute;\n","import React from \"react\";\nimport { Route, Redirect } from \"react-router\";\nimport { ROUTE_PATH } from \"../../constants/routePaths\";\nimport useAuth from \"../../hooks/useAuth\";\n\nconst PublicRoute = ({ children, restricted, ...rest }) => {\n const auth = useAuth();\n \n if (auth.isLogin.current() && restricted) {\n return \n }\n \n return (\n \n {children}\n \n )\n}\n\nexport default PublicRoute;","import { useMemo } from \"react\";\nimport styles from \"./styles.module.css\";\nimport { Link } from \"react-router-dom\";\n\nexport const Toast = ({ mode, onClose, message, sender, goToUrl }) => {\n const classes = useMemo(\n () => [styles.toast, styles[mode]].join(\" \"),\n [mode]\n );\n\n return (\n // \n goToUrl ? (\n \n
\n \n {sender && `${sender}:`} {message}\n \n
\n \n ) : (\n
\n \n {sender && `${sender}:`} {message}\n \n
\n )\n );\n};\n","import ReactDOM from \"react-dom\";\nimport { Toast } from \"../Toast\";\n\nimport styles from \"./styles.module.css\";\nimport { useToastPortal } from \"../../../hooks/useToastPortal\";\n\nexport const ToastPortal = ({ toasts, removeToast }) => {\n\tconst { loaded, portalId } = useToastPortal();\n\n\treturn loaded ? (\n\t\tReactDOM.createPortal(\n\t\t\t
\n\t\t\t\t{toasts.map((t) => (\n\t\t\t\t\t {\n\t\t\t\t\t\t\tremoveToast(t.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tgoToUrl={t.goToUrl}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t
,\n\n\t\t\tdocument.getElementById(portalId)\n\t\t)\n\t) : (\n\t\t<>\n\t);\n};\n","import { uuid } from \"../utils/commonUtils\";\nimport { useState, useEffect } from \"react\";\n\nexport const useToastPortal = () => {\n\tconst [loaded, setLoaded] = useState(false);\n\tconst [portalId] = useState(`toast-portal-${uuid()}`);\n\n\tuseEffect(() => {\n\t\tconst div = document.createElement(\"div\");\n\t\tdiv.id = portalId;\n\t\tdiv.style = \"z-index: 2000; position: fixed; bottom: 10px; right: 10px\";\n\t\tdocument.getElementsByTagName(\"body\")[0].prepend(div);\n\n\t\tsetLoaded(true);\n\n\t\treturn () => document.getElementsByTagName(\"body\")[0].removeChild(div);\n\t}, [portalId]);\n\n\treturn { loaded, portalId };\n};\n","import { useRef, useLayoutEffect, useCallback } from \"react\";\n\nconst isBrowser = typeof window !== `undefined`;\n\nconst getScrollPosition = ({ element, useWindow }) => {\n if (!isBrowser) return { x: 0, y: 0 };\n\n const target = element ? element.current : document.body;\n const position = target.getBoundingClientRect();\n\n return useWindow\n ? { x: window.scrollX, y: window.scrollY }\n : { x: position.left, y: position.top };\n};\n\nconst useScrollPosition = (effect, deps = [], element, useWindow, wait) => {\n const position = useRef(getScrollPosition({ useWindow }));\n\n // let throttleTimeout = null;\n\n const callBack = useCallback(() => {\n const currPos = getScrollPosition({ element, useWindow });\n effect({ prevPos: position.current, currPos });\n position.current = currPos;\n // throttleTimeout = null;\n }, [useWindow, element, effect]);\n\n useLayoutEffect(() => {\n const handleScroll = () => {\n if (wait) {\n // if (throttleTimeout === null) {\n // throttleTimeout = setTimeout(callBack, wait);\n // }\n } else {\n callBack();\n }\n };\n\n window.addEventListener(\"scroll\", handleScroll);\n\n return () => window.removeEventListener(\"scroll\", handleScroll);\n }, [deps, callBack, wait]);\n};\n\nexport default useScrollPosition;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport FormInputButton from \"../components/form/FormInputButton\";\nimport { COLORS } from \"../constants/colors\";\n\nconst Brand = styled.div`\n display: inline-block;\n font-size: 1.8rem;\n padding: 0.4rem 0.8rem;\n margin: 1rem 2rem;\n background-color: ${COLORS.greyBlues[5]};\n border-radius: 2px;\n color: white !important;\n transition: all 0.3s;\n font-weight: 400;\n cursor: pointer;\n\n @media only screen and (min-width: 1200px) {\n display: block;\n max-width: 1200px;\n margin: 0 auto;\n }\n`\n\nconst Container = styled.div`\n margin: 1rem 2rem;\n\n @media only screen and (min-width: 1200px) {\n max-width: 1200px;\n margin: 0 auto;\n }\n`;\n\nconst ContentContainer = styled.div`\n margin: 2rem 0;\n padding: 2rem;\n\tbox-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px;\n background-color: #fff;\n`;\n\nconst Heading = styled.h1`\n font-weight: 600;\n font-size: 3.4rem;\n`;\n\nconst ErrorFallback = ({ error, resetErrorBoundary }) => {\n return (\n <>\n window.location.href = \"/\"}>WaterFun Square 水樂坊\n \n \n 出現了未知的錯誤\n {process.env.NODE_ENV === \"development\" && (\n
{error.message}
\n )}\n window.location.href = \"/\"}>回到主頁\n
\n
\n \n );\n};\n\nexport default ErrorFallback;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Heading2 from \"../components/Heading2\";\nimport Heading3 from \"../components/Heading3\";\nimport { COLORS } from \"../constants/colors\";\n\nconst Container = styled.div`\n background-color: ${COLORS.BACKGROUND_COLOR};\n font-size: 1.4rem;\n margin: 0 auto;\n max-width: 1200px;\n padding: 0 1rem 2rem;\n`;\n\nconst Ul = styled.ul`\n margin: 0.5rem 0 2rem;\n padding-left: 2rem;\n\n > ul {\n padding-left: 2rem;\n }\n`;\n\nconst Li = styled.li`\n margin: 0 0 0.5rem;\n`;\n\nconst P = styled.p`\n margin: 0 0 1rem;\n`;\n\nconst Privacy = () => {\n return (\n \n 私隱政策\n\n 私隱聲明\n

\n 本私隱聲明概述我們如何收集、使用、管理和保護我們可能向閣下收集或所收集到有關閣下的個人資料(「個人資料」),並適用於其個人資料可能由一門三傑科技公司*(「The\n Company」或「我們」)作為控制者或處理者經手的所有個人,包括但不限於WaterFun\n Square水樂坊服務的會員。\n

\n\n 保障閣下的私隱\n

\n 我們竭力按照規定的標準處理閣下的資料,其中包括保障閣下的私隱及確保閣下個人資料的安全,以遵守(尤其是及在適用情況下)香港法例第486章《個人資料(私隱)條例》(「條例」),以及歐洲議會和歐盟理事會在2016年4月27日通過有關個人資料處理及自由流動的個人保障的第2016/679號歐盟規則(「GDPR」,個人資料保護規則)(如適用)。\n

\n

\n 為本私隱聲明列明之目的使用或提供閣下的個人資料前,我們可能會因法例規定須要索取閣下的書面同意。在此情況下,我們只會在取得閣下的同意後,才會開始按指定的方式使用閣下的個人資料。\n

\n\n 閣下的個人資料\n

\n 我們或會收集、使用及保留閣下各種個人資料。為了經營我們的業務(包括核實閣下的身份以偵查、預防及處理欺詐、保安或技術問題、登記、啟動及管理閣下在水樂坊的帳戶,以及我們的水上活動和平台服務的帳單和收費(統稱「服務」))及遵從任何適用之政府相關部門、法院、執法或有關當局或監管機構所發佈的法律、規定、指引、規則及/或要求,閣下可能需要提供包括但不限於下列的個人資料:\n

\n
    \n
  • \n 姓名、出生日期及閣下的身份證或其他法定證明文件、旅遊證明文件、學生證及/或駕駛執照所記載的其他詳情;\n
  • \n
  • \n 聯絡資料,包括閣下的姓名、地址、電話號碼、手提電話號碼及/或電郵地址;\n
  • \n
  • \n 閣下與第三方社交媒體平台經營商分享的個人資料(例如帳戶登入姓名、圖像、聯絡資料);\n
  • \n
  • 付款資料,包括信用卡、扣帳卡和其他網上銀行資料;
  • \n
  • \n 與登記使用我們的服務相關的帳戶詳情或個人資料,包括相關的PIN、用戶名稱或密碼、帳戶號碼及/或服務號碼;\n
  • \n
  • \n 裝置的具體資料,例如硬件模型、作業系統、版本、唯一識別碼、序號、設定配置以及軟件和流動網絡配置;\n
  • \n
  • \n 有關閣下如何使用我們的服務的資料,例如閣下的網絡使用情況、閣下如何使用我們的網絡,以及閣下使用我們的服務時的位置;\n
  • \n
  • \n 使我們能識別以核實閣下身份的資料,包括生物識別資料,例如閣下的指紋和聲紋;\n
  • \n
  • \n 閣下的信用及服務記錄,使我們能評估閣下是否合資格使用我們的服務或處理閣下轉移服務或帳戶的要求;\n
  • \n
  • \n 適用的政府相關部門、法院、執法或有關當局或監管機構所要求使我們能遵守任何法律、規定、規則、判決或法庭命令(不論是在香港境內或境外)或與此有關的所有個人資料;及\n
  • \n
  • \n 我們任何成員及/或其各自的承辦商、分包商、中介、代理商、商業夥伴或代表、經紀或承包商可能不時要求就提供服務而言為必需的任何其他個人資料。\n
  • \n
\n

\n 在某些情況下,如法律有所規定,我們可能會徵求閣下同意我們處理下列類別的「特別個人資料」,使我們能進一步改善服務及/或為閣下提供更適切的類別的資料或內容:\n

\n
    \n
  • 年齡;
  • \n
  • 性別及種族;
  • \n
  • 婚姻狀況;
  • \n
  • 薪金水平及就業資料;
  • \n
  • 教育程度及專業資格;
  • \n
  • 嗜好及休閒活動;
  • \n
  • 閣下已申請的活動;及
  • \n
  • 家庭及家居統計資料。
  • \n
\n

\n 閣下可選擇是否提供上述的特別個人資料。但當所需服務是個人化服務,或產品的提供是建基於閣下已提供一切所需個人資料,若閣下屆時未能提供所需的個人資料,可能會有礙我們向閣下提供該等特定服務。\n

\n

\n 閣下或須向我們提供其他人士的個人資料(例如同行的參與者)。在此情況下,我們或會要求閣下確認閣下會遵從私隱條例,並確認閣下已告知該等人士:個人資料的使用、披露及轉移(包括由閣下向我們提供的個人資料以及由我們向第三者提供的個人資料),以及我們可能向閣下披露該等人士的詳情(包括該等人士使用我們的服務、會員的詳情);而閣下已獲得該等人士就該等使用、披露及轉移的授權及/或同意(或者有關授權及/或同意的適用範圍)。閣下亦應提醒該等人士可以聯絡我們以索取進一步資料(請參閱下述之「聯絡方式」)。\n

\n

\n 經閣下提供的個人資料,將會由我們的一名或以上成員保留,並在符合有關情況或為本私隱聲明列明之目的或事先通知閣下的其他目的或(如有需要)在取得閣下的同意後,供該等成員的僱員及獲授權的第三方使用。\n

\n\n 我們如何收集個人資料\n

我們會通過不同的方式收集個人資料,包括:

\n

\n 直接向閣下收集。例如閣下透過電話或電郵、出席我們的活動、填寫我們某項服務的申請表格或協議,或通過我們的網站、流動或電視應用程式或任何客戶服務熱線或網上聊天室提交閣下的個人資料,或當閣下聯絡我們提出查詢或要求時,或在日常商業事務中與我們保持聯繫期間,或當我們根據法規要求收集該等個人資料;\n

\n
    \n
  • \n 經閣下同意後向第三方,例如相關的公司、業務合作夥伴、或其他客戶或閣下的代表收集;\n
  • \n
  • 從公開資料來源收集;
  • \n
  • 根據我們內部有關閣下如何使用我們的服務的記錄中收集;
  • \n
  • \n 當閣下瀏覽我們的網站、流動應用程式(請參閱下述「私隱資料」);及/或\n
  • \n
  • 當閣下參與由我們或我們的代表舉行的調查或促銷活動。
  • \n
\n 私隱資料\n

\n 為了更能滿足閣下的需要和喜好,我們的網頁伺服器會收集與閣下的網站、裝置或應用程式活動有關的個人資料。我們亦會收集伺服器使用量的不記名集體統計資料,使我們能更適當地回應我們網站及流動和電視應用程式用戶的行為模式。這類個人資料可包括但不限於:\n

\n
    \n
  • 瀏覽器類型、版本及用戶代理;
  • \n
  • 操作系統;
  • \n
  • IP(互聯網通訊協定)地址及/或網域名稱;
  • \n
  • 連接數據、網頁瀏覽及/或推薦連結的統計數據及/或;
  • \n
  • 裝置識別資料、位置及電話聯絡人;
  • \n
  • 已觀看或搜尋的影片;
  • \n
  • 已點擊的連結或圖像;
  • \n
  • \n 「曲奇」(cookies)及/或瀏覽器、應用程式或網頁伺服器的日誌記錄;及\n
  • \n
  • 裝置及軟件特性及/或配置。
  • \n
\n

\n 我們的一些網站會在閣下的電腦或裝置內使用「曲奇」(cookies)或類似的追蹤工具,以便我們(例如)為閣下提供個人化的服務及/或於閣下瀏覽不同網頁及/或互聯網期間進行身份識別。此等個人資料可包括但不限於登入及確認資料,以及有關閣下的裝置及閣下在我們網站及流動和電視應用程式內的活動和喜好設定的個人資料。我們的網站在最初會設定為接受「曲奇」。閣下可以透過更改閣下網頁瀏覽器的設定選擇拒絕或刪除「曲奇」的歷史記錄;但是,閣下在更改有關設定後,可能無法如常使用我們網站及/或應用程式的某些功能。\n

\n\n 我們如何使用閣下的個人資料\n

我們可能收集、保留及使用閣下的個人資料以作如下用途:

\n
    \n
  • 核實閣下的身份;
  • \n
  • 處理閣下選用我們的活動計劃的申請;
  • \n
  • 根據條例進行核對程序;
  • \n
  • \n 核實閣下選用或參加我們的服務及/或推廣或其他活動的資格;\n
  • \n
  • 提供或啟動閣下已申請的服務;
  • \n
  • 為閣下提供獎賞、推廣優惠、更新、優惠及活動邀請;
  • \n
  • 向閣下宣傳及促銷我們的服務;
  • \n
  • \n 遵照香港法例第615章《打擊洗錢及恐怖分子資金籌集條例》進行信用審查及偵查欺詐活動,以及其他合規目的;\n
  • \n
  • \n 進行研究或分析,以改進和完善我們為閣下所提供的服務計劃;\n
  • \n
  • \n 為業務營運及/或商業規劃進行調查及促銷、宣傳及行為評分;\n
  • \n
  • \n 進行市場和產品分析作統計或精算報告(包含與任何已識別或可識別的個人無關的整體數據);\n
  • \n
  • 執行我們的合約權利;
  • \n
  • \n 就我們向閣下提供服務處理付款指示、直接扣帳安排及/或賒帳安排;\n
  • \n
  • \n 維持和開發我們的業務系統和基礎設施,包括測試及更新該等系統;\n
  • \n
  • 維持、提升和發展我們的活動及服務;
  • \n
  • 開發水上活動預約服務及產品;
  • \n
  • \n 評估閣下的財務需要以及由或針對閣下提出的保險索償,以及處理與閣下有關的索償(包括但不限於提出、辯護、分析、調查、處理、評估、釐定、回應或解決該等索償或進行和解);\n
  • \n
  • \n 就我們與主辦單位的互連安排遵守我們的牌照責任以及相關的行業守則;\n
  • \n
  • \n 就我們向閣下提供服務計劃,遵守適用的政府相關部門、法院、執法或監管或調查當局所規定的香港境內或海外適用法律,包括協助預防或偵查犯罪或潛在犯罪活動;及\n
  • \n
  • \n 發佈我們的刊物及研究資料,以及我們的商業合作夥伴及對手方的刊物及研究資料。\n
  • \n
\n \n 我們使用閣下的個人資料(包括我們如何披露閣下的個人資料)的法律依據\n \n

\n 妥善地執行服務關乎我們的合法利益。此外,為履行閣下所要求的服務,我們可能有必要使用閣下的個人資料。在適用法律和規例准許的範圍內,我們或會將您的個人資料披露給我們以外的機構或人士(可能位於香港境內或海外)(統稱「機構」),從而提供閣下所要求的服務。向該等機構披露閣下個人資料之目的,只會嚴格限制於使我們能向閣下提供我們的服務。\n 在上述的某些情況中,我們或需根據法律規定徵求閣下同意我們使用閣下的特別個人資料。\n

\n\n \n 下列機構為我們的業務和運作提供支持服務,包括但不限於:\n \n
    \n
  • 客戶查詢;
  • \n
  • 快遞、送貨、物流及倉庫服務;
  • \n
  • 郵件操作;
  • \n
  • 帳單和欠款收取;
  • \n
  • 資訊科技服務;
  • \n
  • 安裝、保養及維修服務;
  • \n
  • 市場促銷、廣告及電話促銷服務;
  • \n
  • 市場調查;
  • \n
  • 客戶使用量及行為分析;
  • \n
  • 程序管理;
  • \n
  • 售後服務;
  • \n
  • 調查;
  • \n
  • 網站使用量分析;及
  • \n
  • 雲端儲存服務。
  • \n
\n

\n 我們會採取必要的措施,以確保該等機構是受有關保障閣下個人資料的保密及私隱責任的約束,且該等機構僅就他們受聘執行的服務之目的,而不能為自用或其他目的(包括直接促銷)使用閣下的個人資料。\n

\n\n 此外,我們可能會向下列各方披露閣下的個人資料:\n
    \n
  • 閣下的授權代表及╱或法律顧問(在閣下要求下);
  • \n
  • 下述為提供行政、付款、收款、商業、法律及
  • \n /或業務支持的機構:\n
  • 信貸報告和欺詐調查機構;
  • \n
  • \n 金融機構、付款卡或信用卡發卡公司、信貸機構、信貸資料公司、債務代收或證券代理;\n
  • \n
  • 電訊網絡營運商;
  • \n
  • 我們的附屬成員、海外辦事處、委托人、受讓方及代表;
  • \n
  • \n 我們的專業顧問,包括我們的會計師、核數師、律師及保險人;\n
  • \n
  • \n 銀行、酒店、保險公司、保險經紀、承保人、帳單代理及其他商業夥伴,包括但不限於協助會員登記參與有關的活動;\n
  • \n
  • 政府及監管機構及其他法律規定或授權的機構;
  • \n
  • \n 管理我們業務及企業策略的機構,包括為該等目的參與轉讓或出售我們全部或部份的資產或業務(包括帳戶和應收帳款)以及參與管理我們的企業風險和資金籌集功能(例如證券化)的機構;\n
  • \n
  • \n 有關我們的全部或部份運營業務的任何潛在或實際參與者、委托人或受讓方;及╱或\n
  • \n
  • 慈善或非牟利機構。
  • \n
\n\n 直接促銷 (如適用)\n
    \n
  • \n 我們在遵守適用法律、規則、規例和牌照規定的情況下,或會使用閣下的資料(包括但不限於姓名、聯絡資料、電話號碼、住宅/辦公室地址、電郵地址及閣下已選購的產品的資料),以便我們(包括Water\n
  • {\" \"}\n Fun\n Square 水樂坊)及我們各自的經銷商、供應商、授權人、提供商及/或業務合作夥伴(統稱「服務供應商」)為閣下提供直接促銷資料(我們可能會、也可能不會就此獲得報酬),包括向閣下發出與我們及/或服務供應商提供的服務有關的禮品、折扣、尊享優惠、優惠和推廣的通知及/或最新情報,包括但不限於:電視、電訊、OTT服務、資料服務、流動話音、短訊及數據通訊、IDD/國際漫遊、互聯網連接、雲端服務、手機付款、娛樂、秘書服務、個人助理服務和資訊服務(例如天氣、財經和新聞資訊)、裝置配件、流動應用程式和軟件、電腦周邊產品、配件和軟件(包括筆記型電腦、手提電話、流動裝置及配件、鍵盤、防禦裝置及流動應用程式)、獎賞、忠誠或尊貴計劃、生活方式、社交活動、旅遊、銀行、酒精及煙草、運動、音樂、遊戲、交通、家居產品、餐飲、金融、保險、財富管理服務和產品、退休金、投資、經紀服務、理財顧問、信貸及其他理財服務和產品、博彩、教育、健康及保健、美容產品和服務、時尚及配飾、電子產品、社交網絡、科技、電子商務、物流、零售、家居佈置、媒體及高端消費類產品及服務。該等促銷可透過多種方式進行(包括以郵件、於帳單內夾寄/簡訊、電郵、數字短訊、多媒體短訊、即時消息、應用程式推送通知、針對性的電視消息、透過電話或社交媒體或網站顯示廣告或其他方式)。\n
  • \n 在將你的個人資料用作本私穩聲明所述的目的之前,我們可能會因法例規定須要索取閣下的書面同意。在此情況下,我們只會在取得閣下書面同意後,才開始使用及提供你的個人資料作任何推廣或市場用途。\n
  • \n
  • \n 我們尊重所有停止使用個人資料作直接促銷的要求,你可選擇拒絕接收直接促銷資料及╱或有關活動計劃及╱或The\n Company的通訊。與此同時,若你有意重新收取該等資料(重收促銷資料要求只適用於以往曾經拒絕接收該等資料及╱或有關服務及╱或The\n Company的通訊的客戶),你可連同註冊名字、帳戶號碼、註冊電話號碼或登入帳戶名稱(如適用)等郵寄通知我們,告知我們你願意收取這些資料。\n
  • \n
\n\n 轉移個人資料至香港以外地方\n

\n 本公司在有需要時會審慎地將你的個人資料轉移至香港特別行政區以外的地方以達到不同目的,例如預防、偵查或調查犯罪行為、或以達到儲存、處理此等資料及其他收集資料之目的。如本公司將你的個人資料轉移至香港特別行政區以外的地方,該轉移會遵守條例及GDPR(如適用)的現行之規定。\n

\n\n 我們重視閣下個人資料的安全性\n

\n 我們盡力確保所有我們客戶的個人資料均儲存於可靠安全的地方。該等個人資料只有經我們授權的僱員或在本私穩聲明中提及的其他機構方可查閱。\n

\n

\n 若我們將你的個人資料轉交予第三方機構處理,我們會盡量確保該等機構有適當的安全措施來保護你的個人資料的安全性並遵守有關個人資料保護的適用原則。收到你的個人資料的一方可能會在海外處理這些個人資料。若閣下欲瞭解本公司爲了確保你的個人資料得到充分保護而使用的安全措施,閣下可以與本公司聯絡,索取更多資料。\n

\n\n 個人資料的保存\n

\n 本公司將會根據內部政策,持有你的個人資料。本公司的政策符合條例及GDPR(如適用),及包括以下宗旨:\n

\n

\n 個人資料會保存至達到與收集上述資料之原來目的,或直接有關之目的為止;除非上述個人資料可根據任何適用法律、法規或合約規定須予以保存;\n

\n

\n 基於上述標準及本公司的內部程序,個人資料會在本公司的電子、人手及其他儲存系統中被清除。\n

\n\n 鏈結\n

\n 我們網站(包括但不限於www.waterfunsquare.com)及流動應用程式(如有)或包含可通往其他地址、網頁及由第三者營運的流動應用程式的鏈接。我們無法控制該等被鏈接網站、網頁及流動應用程式的內容或該等網站、網頁及流動應用程式營運商處理閣下個人資料的方式,並概不對該等第三方網站、網頁或流動應用程式的内容負責。閣下應審閱該第三者網站、網頁及流動應用程式上的私隱政策,以瞭解該等第三者可能使用閣下個人資料的方式。\n

\n\n 閣下查閲、更正及刪除個人資料的權利\n

\n 我們採取一切合理的預防措施,以確保我們收集、使用及披露的個人資料是準確、完整和最新的。然而,個人資料的準確性在很大程度上取決於你提供的個人資料。你有權要求查閱和更正你的個人資料,我們建議你:\n

\n
    \n
  • 當閣下發現個人資料記錄有任何錯誤時請通知我們;及
  • \n
  • 請通知我們若閣下的個人資料有所改變或更新。
  • \n
\n

\n 若閣下希望查閲或更正我們持有的閣下的任何個人資料,或要求我們刪除(僅在有相關法律的要求下適用)任何不再因爲我們提供的服務而需要保存的資料,你可以按照下述之「聯絡方式」與我們聯絡。\n

\n

\n 如閣下為水樂坊之會員,你可登入水樂坊會員賬戶以查閲和更正你的個人資料,行使閣下的查閱及修正權利。如閣下不是水樂坊會員,你可以按照下述之「聯絡方式」致函本公司的私隱條例事務主任。\n

\n

我們可因應閣下的要求所查閱的資料收取行政費。

\n

\n 閣下可以拒絕與我們分享你的個人資料及╱或撤回你作出的任何同意,在這種情況下,我們可能無法向你提供我們的某些服務。\n

\n

\n 除非適用的法律允許本公司持有或處理你的個人資料,否則,閣下可以隨時以合法的理由反對我們持有或處理你的個人資料。\n

\n\n 聯絡方式\n

\n 任何有關我們是否遵從條例及GDPR(如適用)的責任查詢及任何查閱、更改或刪除個人資料的請求,請以書面形式致函以下地址:\n

\n \n \n 一門三傑科技公司\n

\n

PO Box 308, Ma On Shan Post Office, NT, Hong Kong.

\n \n

\n 或電郵至:\n waterfunsquare@gmail.com\n

\n

\n 如對有關個人資料之處理有任何疑問,請與我們聯絡,我們會盡力解決閣下的疑問。\n

\n

\n 本私隱聲明或會經不時修訂,所有個人資料之處理將受制於本私隱聲明的最新版本(詳見{\" \"}\n \n www.waterfunsquare.com/privacy\n \n )。若中、英文版本有歧義之處,概以中文版本為準。\n

\n \n

\n * 一門三傑科技公司是一家於香港註冊成立的公司\n

\n \n
\n );\n};\n\nexport default Privacy;\n","const componentLoader = (lazyComponent, attemptsLeft = 5) => {\n return new Promise((resolve, reject) => {\n lazyComponent()\n .then(resolve)\n .catch((error) => {\n // retry after 1500 ms\n setTimeout(() => {\n if (attemptsLeft === 1) {\n window.location.reload();\n reject(error);\n return;\n }\n componentLoader(lazyComponent, attemptsLeft - 1).then(\n resolve,\n reject\n );\n }, 1500);\n });\n });\n};\n\nexport default componentLoader;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useQuery } from \"react-query\";\nimport { Link } from \"react-router-dom\";\nimport * as wfsUserProfileAPI from \"../api/wfsAPI/user-profile\";\nimport { COLORS } from \"../constants/colors\";\nimport { BREAKPOINTS } from \"../constants/breakpoints\";\nimport ShipProfileBox from \"../components/ShipProfileBox\";\nimport RowContainer from \"../components/RowContainer\";\nimport Heading2 from \"../components/Heading2\";\nimport FormInputButton from \"../components/form/FormInputButton\";\nimport { ROUTE_PATH } from \"../constants/routePaths\";\n\nconst Container = styled.div`\n @media only screen and (min-width: 1200px) {\n max-width: 1200px;\n margin: 0 auto;\n }\n`;\n\nconst ActionContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n gap: 2px;\n padding: 1rem;\n & button {\n font-size: 1.6rem;\n padding: 1rem;\n }\n`;\n\nconst ShipProfileContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n background-color: ${COLORS.BACKGROUND_COLOR};\n gap: 4px;\n padding: 1rem 1rem;\n margin-bottom: 2rem;\n box-shadow: rgba(0, 0, 0, 0.16) 0px 0.1rem 0.4rem;\n border-radius: 2px;\n\n > a {\n flex-basis: 32.5%;\n }\n\n @media only screen and (min-width: ${BREAKPOINTS.md}px) {\n > a {\n flex-basis: 24.5%;\n }\n }\n\n @media only screen and (min-width: ${BREAKPOINTS.lg}px) {\n > a {\n flex-basis: 16.3%;\n }\n }\n`;\n\nconst ShipsList = () => {\n const fetchUserProfile = async () => {\n const result = await wfsUserProfileAPI.getUserProfile();\n return result.data;\n };\n const { data: userProfile } = useQuery([\"userProfile\"], () =>\n fetchUserProfile()\n );\n\n return (\n \n 船隻管理\n \n \n 新增船隻\n \n \n \n {userProfile && userProfile.shipProfiles.length !== 0 ? (\n userProfile.shipProfiles.map((shipProfile) => {\n return (\n \n \n \n );\n })\n ) : (\n \n 找不到紀錄\n \n )}\n \n \n );\n};\n\nexport default ShipsList;\n","import React, { useState, useEffect, useContext, lazy, Suspense } from \"react\";\nimport { Switch, Route, useLocation } from \"react-router-dom\";\nimport {\n useSelector,\n useDispatch,\n Provider as ReduxProvider,\n} from \"react-redux\";\nimport styled from \"styled-components\";\nimport { ConnectedRouter } from \"connected-react-router\";\nimport { QueryClient, QueryClientProvider } from \"react-query\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport \"./App.css\";\nimport store from \"./app/store\";\nimport history from \"./app/history\";\nimport { resetError, selectError } from \"./features/error/errorSlice\";\nimport { COLORS } from \"./constants/colors\";\nimport SideMenu from \"./components/includes/SideMenu\";\nimport Footer from \"./components/includes/Footer\";\nimport Navbar from \"./components/includes/Navbar\";\nimport ScrollToTop from \"./components/ScrollToTop\";\nimport CustomModal from \"./components/Modal\";\nimport { ROUTE_PATH } from \"./constants/routePaths\";\nimport PrivateRoute from \"./components/routes/PrivateRoute\";\nimport PublicRoute from \"./components/routes/PublicRoute\";\nimport { ToastPortal } from \"./components/ToastNotifications/ToastPortal/ToastPortal\";\nimport { ModalProvider } from \"./contexts/ModalContext\";\nimport SocketContext from \"./contexts/SocketContext\";\nimport { SocketProvider } from \"./contexts/SocketContext\";\nimport { ToastProvider } from \"./contexts/ToastContext\";\nimport useModal from \"./hooks/useModal\";\nimport useNotification from \"./hooks/useNotification\";\nimport useAuth from \"./hooks/useAuth\";\nimport useScrollPosition from \"./hooks/useScrollPosition\";\nimport useToast from \"./hooks/useToast\";\nimport PageLoading from \"./components/PageLoading\";\nimport ErrorFallback from \"./pages/ErrorFallback\";\nimport Privacy from \"./pages/Privacy\";\nimport componentLoader from \"./components/componentLoader\";\nimport ShipsList from \"./pages/ShipsList\";\n\n// Lazy Loading\nconst Home = lazy(() => componentLoader(() => import(\"./pages/Home\")));\nconst Login = lazy(() => componentLoader(() => import(\"./pages/Login\")));\nconst SignUp = lazy(() => componentLoader(() => import(\"./pages/SignUp\")));\nconst OrganizerInfo = lazy(() =>\n componentLoader(() => import(\"./pages/OrganizerInfo\"))\n);\nconst StoreInfo = lazy(() =>\n componentLoader(() => import(\"./pages/StoreInfo\"))\n);\nconst ProvideOrganizerInfo = lazy(() =>\n componentLoader(() => import(\"./pages/ProvideOrganizerInfo\"))\n);\nconst ProvideStoreInfo = lazy(() =>\n componentLoader(() => import(\"./pages/ProvideStoreInfo\"))\n);\nconst TermsAndConditions = lazy(() =>\n componentLoader(() => import(\"./pages/TermsAndConditions\"))\n);\nconst TermsOfUse = lazy(() =>\n componentLoader(() => import(\"./pages/TermsOfUse\"))\n);\nconst EventInfo = lazy(() =>\n componentLoader(() => import(\"./pages/EventInfo\"))\n);\nconst OrganizerLocationManagement = lazy(() =>\n componentLoader(() => import(\"./pages/OrganizerLocationManagement\"))\n);\nconst ShipManagementForm = lazy(() =>\n componentLoader(() => import(\"./pages/ShipManagementForm\"))\n);\nconst CreateEventInfoForm = lazy(() =>\n componentLoader(() => import(\"./pages/CreateEventInfoForm\"))\n);\nconst EventManagement = lazy(() =>\n componentLoader(() => import(\"./pages/EventManagement\"))\n);\nconst FlowOperation = lazy(() =>\n componentLoader(() => import(\"./pages/FlowOperation\"))\n);\nconst FlowReservation = lazy(() =>\n componentLoader(() => import(\"./pages/FlowReservation\"))\n);\nconst FlowCancel = lazy(() =>\n componentLoader(() => import(\"./pages/FlowCancel\"))\n);\nconst AboutUs = lazy(() => componentLoader(() => import(\"./pages/AboutUs\")));\nconst ContactUs = lazy(() =>\n componentLoader(() => import(\"./pages/ContactUs\"))\n);\nconst ShipInfo = lazy(() => componentLoader(() => import(\"./pages/ShipInfo\")));\nconst NotFound = lazy(() => componentLoader(() => import(\"./pages/NotFound\")));\nconst ParticipantReservationForm = lazy(() =>\n componentLoader(() => import(\"./pages/ParticipantReservationForm\"))\n);\nconst ParticipantCancelReservationForm = lazy(() =>\n componentLoader(() => import(\"./pages/ParticipantCancelReservationForm\"))\n);\nconst EditProfile = lazy(() =>\n componentLoader(() => import(\"./pages/EditProfile\"))\n);\nconst FishingLocationProfileInfo = lazy(() =>\n componentLoader(() => import(\"./pages/FishingLocationProfileInfo\"))\n);\nconst Notification = lazy(() =>\n componentLoader(() => import(\"./pages/Notification\"))\n);\nconst BenefitsMember = lazy(() =>\n componentLoader(() => import(\"./pages/BenefitsMember\"))\n);\nconst BenefitsOrganizer = lazy(() =>\n componentLoader(() => import(\"./pages/BenefitsOrganizer\"))\n);\nconst Profile = lazy(() => componentLoader(() => import(\"./pages/Profile\")));\nconst FishingAppHome = lazy(() =>\n componentLoader(() => import(\"./pages/FishingAppHome\"))\n);\nconst ReservationsList = lazy(() =>\n componentLoader(() => import(\"./pages/ReservationsList\"))\n);\nconst EventsList = lazy(() =>\n componentLoader(() => import(\"./pages/EventsList\"))\n);\nconst SearchEventInfo = lazy(() =>\n componentLoader(() => import(\"./pages/SearchEventInfo\"))\n);\nconst EmailConfirmation = lazy(() =>\n componentLoader(() => import(\"./pages/EmailConfimation\"))\n);\nconst CheckEmailAcknowledgement = lazy(() =>\n componentLoader(() => import(\"./pages/CheckEmailAcknowledgement\"))\n);\nconst Checkout = lazy(() => componentLoader(() => import(\"./pages/Checkout\")));\nconst StripeAccountLink = lazy(() =>\n componentLoader(() => import(\"./pages/StripeAccountLink\"))\n);\nconst SuccessPayment = lazy(() =>\n componentLoader(() => import(\"./pages/SuccessPayment\"))\n);\nconst PasswordResetForm = lazy(() =>\n componentLoader(() => import(\"./pages/PasswordResetForm\"))\n);\nconst PasswordResetReenterPassword = lazy(() =>\n componentLoader(() => import(\"./pages/PasswordResetReenterPassword\"))\n);\nconst SearchUser = lazy(() =>\n componentLoader(() => import(\"./pages/SearchUser\"))\n);\nconst CreateStripeAccount = lazy(() =>\n componentLoader(() => import(\"./pages/CreateStripeAccount\"))\n);\nconst OrganizerInvoice = lazy(() =>\n componentLoader(() => import(\"./pages/OrganizerInvoice\"))\n);\nconst ImportantDates = lazy(() =>\n componentLoader(() => import(\"./pages/ImportantDates\"))\n);\nconst CheckOrganizerInvoice = lazy(() =>\n componentLoader(() => import(\"./pages/CheckOrganizerInvoice\"))\n);\n\nconst queryClient = new QueryClient();\n\n// import * as wfsUserProfileAPI from \"./api/wfsAPI/user-profile\";\n\nconst Overlay = styled.div`\n position: fixed;\n height: 100%;\n width: 100%;\n background-color: black;\n z-index: 500;\n transition: opacity 0.3s;\n opacity: ${(props) => (props.isSideMenuShow ? 0.8 : 0)};\n visibility: ${(props) => (props.isSideMenuShow ? \"visible\" : \"hidden\")};\n`;\n\nconst Message = styled.div`\n max-width: 1200px;\n margin: 1rem 0.5rem;\n padding: 1rem;\n font-size: 1.4rem;\n border-radius: 3px;\n color: ${(props) => (props.color ? props.color : \"black\")};\n background-color: ${(props) =>\n props.backgroundColor ? props.backgroundColor : COLORS.greens[4]};\n\n @media only screen and (min-width: 1200px) {\n margin: 1rem auto;\n }\n`;\n\nconst App = () => {\n const location = useLocation();\n const dispatch = useDispatch();\n\n const error = useSelector(selectError);\n if (error) {\n // console.log(error.message);\n }\n\n const { loginIfToken, accessToken, _id } = useAuth();\n\n const [isAppLoading, setIsApploading] = useState(true);\n const [showNavbar, setShowNavbar] = useState(true);\n const [isNavbarVisible, setIsNavbarVisible] = useState(false);\n const [showSideMenu, setShowSideMenu] = useState(false);\n const socket = useContext(SocketContext);\n const { toasts, removeToast, addMessage } = useToast();\n\n useScrollPosition(\n ({ prevPos, currPos }) => {\n const isVisible = location.pathname === \"/\" || currPos.y < 0;\n const isShow =\n location.pathname === \"/\" ||\n currPos.y >= -10 ||\n currPos.y > prevPos.y;\n if (isVisible !== isNavbarVisible) setIsNavbarVisible(isVisible);\n if (isShow !== showNavbar) setShowNavbar(isShow);\n },\n [showNavbar, isNavbarVisible]\n );\n\n // check token => auto login\n useEffect(() => {\n const checkTokenBeforeAppLoad = async () => {\n try {\n await loginIfToken.current();\n } catch (err) {\n // no refresh token => ok\n // console.log(err);\n }\n\n setIsApploading(false);\n };\n checkTokenBeforeAppLoad();\n }, [loginIfToken]);\n\n const { isShow, close, title, actions, body } = useModal();\n\n useEffect(() => {\n dispatch(resetError());\n close();\n }, [location.pathname, dispatch, close]);\n\n useEffect(() => {\n setShowSideMenu(false);\n }, [location.key]);\n\n const { addOneNotification, getUnReadCountRef, addOneUnReadCountRef } =\n useNotification();\n\n // useEffect(() => {\n // \tsocket.connect();\n // }, []);\n\n useEffect(() => {\n if (accessToken) {\n // socket.disconnect();\n\n socket.auth = { token: accessToken };\n\n socket.connect();\n // console.log(\"Socket Event Name (after connect)\", socket);\n // console.log(\"Socket Event Name (after connect)\", socket);\n // console.log(\"Socket Event Name (before remove)\", socket);\n\n socket.removeAllListeners(\"newNotification\");\n\n socket.removeAllListeners(\"connect_error\");\n\n // console.log(\"Socket Event Name (before event)\", socket);\n\n socket.on(\"newNotification\", (savedNotification) => {\n // console.log(\"New Notifications\");\n // console.log(\"savedNotifications\", savedNotification);\n addMessage.current({\n mode: \"info\",\n message: savedNotification.message,\n // sender: savedNotification.sender.username,\n ...(savedNotification.sender.role !== \"ADMIN\" && {\n sender: savedNotification.sender.username,\n }),\n goToUrl: savedNotification.goToUrl,\n });\n addOneUnReadCountRef.current();\n addOneNotification.current(savedNotification);\n });\n\n socket.on(\"connect_error\", async (err) => {\n try {\n // console.log(err);\n if (err.message === \"Unauthorized\") {\n await loginIfToken.current();\n socket.auth = { token: accessToken };\n setTimeout(() => {\n socket.connect();\n }, 5000);\n }\n } catch (err) {\n console.error(err);\n }\n });\n\n return () => {\n socket.disconnect();\n };\n }\n }, [\n loginIfToken,\n accessToken,\n dispatch,\n socket,\n addMessage,\n addOneNotification,\n addOneUnReadCountRef,\n ]);\n\n useEffect(() => {\n if (_id) {\n // console.log(\"auth._id\", auth._id);\n // socket.emit(\"userOnline\", auth._id);\n getUnReadCountRef.current();\n }\n }, [_id, getUnReadCountRef]);\n\n if (isAppLoading) {\n return
;\n }\n\n return (\n <>\n \n\n {/* React Router Scroll Restoration */}\n \n\n \n {body}\n \n\n setShowSideMenu(false)}\n />\n\n \n\n \n setShowSideMenu(true)}\n />\n\n \n {/* Flash Message */}\n {location.state?.message && (\n {location.state?.message}\n )}\n\n {/* Error Message */}\n {error && (\n \n {error.message}\n \n )}\n\n {/* Routes */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n {/* Dev */}\n \n {/* */}\n {/* */}\n \n {/* */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {/* Auth */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* Email Confirmation */}\n \n \n \n \n \n \n {/* Create Stripe Account */}\n \n \n\n \n {/* Main routes */}\n {/* Profile can be viewed by everyone but more info for him/herself */}\n \n \n\n \n \n \n\n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {/* \n \n */}\n\n \n \n \n \n \n \n\n {/* Fallback route */}\n \n \n \n \n \n\n