![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/opt/mattermost/client/ |
Upload File : |
{"version":3,"file":"4729.00ac270818291df09b9f.js","mappings":"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","sources":["webpack://mattermost-webapp/./src/components/onboarding_tasklist/onboarding_tasklist_animations.tsx","webpack://mattermost-webapp/./src/components/onboarding_tasklist/onboarding_tasklist_completed.tsx","webpack://mattermost-webapp/../node_modules/react-popper/lib/esm/utils.js","webpack://mattermost-webapp/../node_modules/react-popper/lib/esm/usePopper.js","webpack://mattermost-webapp/./src/components/onboarding_tasklist/onboarding_tasklist_popover.tsx","webpack://mattermost-webapp/./src/components/onboarding_tasklist/onboarding_tasklist_task.tsx","webpack://mattermost-webapp/./src/components/onboarding_tasklist/onboarding_tasklist.tsx","webpack://mattermost-webapp/../node_modules/react-fast-compare/index.js"],"sourcesContent":["// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport StatusIcon from '@mattermost/compass-components/components/status-icon'; // eslint-disable-line no-restricted-imports\n\nconst Animation = styled.div`\n position: absolute;\n z-index: 30;\n flex-direction: column;\n left: 15px;\n bottom: 0;\n display: none;\n\n &.completed {\n display: flex;\n }\n\n &:before {\n content: '';\n background-color: var(--denim-status-online);\n opacity: 0;\n border-radius: 50%;\n width: 1rem;\n bottom: 15%;\n position: absolute;\n height: 1rem;\n margin-left: auto;\n margin-right: auto;\n left: 0;\n right: 0;\n }\n\n .x1 {\n opacity: 0;\n animation-delay: 150ms;\n }\n\n .x2 {\n transform: scale(0.6);\n margin-left: 6px;\n animation-delay: 250ms;\n opacity: 0;\n }\n .x3 {\n transform: scale(0.6);\n margin-left: -6px;\n animation-delay: 300ms;\n opacity: 0;\n }\n .x4 {\n transform: scale(0.2);\n opacity: 0;\n }\n\n &.completed {\n &:before {\n animation: opacity 800ms ease-in-out, scale 800ms linear;\n }\n .x1, .x2, .x3, .x4 {\n animation: opacity 900ms ease-in-out, moveUp 900ms linear;\n }\n }\n @keyframes moveUp {\n 0% { \n top: 0;\n }\n 100% { \n top: -50px;\n }\n }\n\n @keyframes opacity {\n 0% { \n opacity:0;\n }\n 50% { \n opacity: 1;\n }\n 100% { \n opacity: 0;\n }\n }\n\n @keyframes scale {\n 0% { \n transform: scale(0);\n }\n 50% { \n transform: scale(2);\n }\n 100% { \n transform: scale(4);\n }\n }\n\n`;\n\nexport const CompletedAnimation = (props: {completed: boolean}) => {\n return (\n <Animation className={props.completed ? 'completed' : ''}>\n <StatusIcon\n status={'online'}\n className={'x1'}\n />\n <StatusIcon\n status={'online'}\n className={'x2'}\n />\n <StatusIcon\n status={'online'}\n className={'x3'}\n />\n <StatusIcon\n status={'online'}\n className={'x4'}\n />\n </Animation>\n );\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useEffect} from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {CSSTransition} from 'react-transition-group';\nimport styled from 'styled-components';\n\nimport type {GlobalState} from '@mattermost/types/store';\n\nimport {getPrevTrialLicense} from 'mattermost-redux/actions/admin';\nimport {getLicense} from 'mattermost-redux/selectors/entities/general';\n\nimport ExternalLink from 'components/external_link';\nimport StartTrialBtn from 'components/learn_more_trial_modal/start_trial_btn';\n\nimport completedImg from 'images/completed.svg';\nimport {AboutLinks, LicenseLinks} from 'utils/constants';\n\nconst CompletedWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 26px 24px 0 24px;\n margin: auto;\n text-align: center;\n word-break: break-word;\n width: 100%;\n height: 500px;\n\n &.fade-enter {\n transform: scale(0);\n }\n &.fade-enter-active {\n transform: scale(1);\n }\n &.fade-enter-done {\n transform: scale(1);\n }\n &.fade-exit {\n transform: scale(1);\n }\n &.fade-exit-active {\n transform: scale(1);\n }\n &.fade-exit-done {\n transform: scale(1);\n }\n .start-trial-btn, .got-it-button {\n padding: 13px 20px;\n background: var(--button-bg);\n border-radius: 4px;\n color: var(--sidebar-text);\n border: none;\n font-weight: bold;\n margin-top: 15px;\n min-height: 40px;\n &:hover {\n background: var(--button-bg) !important;\n color: var(--sidebar-text) !important;\n }\n }\n\n h2 {\n font-size: 20px;\n margin: 0 0 10px;\n font-weight: 600;\n }\n\n .start-trial-text, .completed-subtitle {\n font-size: 14px !important;\n color: rgba(var(--center-channel-color-rgb), 0.75);\n line-height: 20px;\n }\n\n .completed-subtitle {\n margin-top: 5px;\n }\n\n .disclaimer, .download-apps {\n width: 90%;\n margin-top: 15px;\n color: rgba(var(--center-channel-color-rgb), 0.75);\n font-family: \"Open Sans\";\n font-style: normal;\n font-weight: normal;\n line-height: 16px;\n }\n\n .disclaimer {\n text-align: left;\n margin-top: auto;\n font-size: 11px;\n }\n\n .download-apps {\n margin-top: 24px;\n width: 200px;\n font-size: 12px;\n }\n\n .style-link {\n border: none;\n background: none !important;\n color: var(--button-bg) !important;\n }\n\n .no-thanks-link {\n display: inline-block;\n min-width: fit-content;\n margin-top: 18px;\n font-weight: 600;\n font-size: 14px;\n line-height: 20px;\n &:hover {\n text-decoration: underline;\n }\n }\n`;\n\ninterface Props {\n dismissAction: () => void;\n isCurrentUserSystemAdmin: boolean;\n isFirstAdmin: boolean;\n}\n\nconst Completed = (props: Props): JSX.Element => {\n const {dismissAction} = props;\n\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(getPrevTrialLicense());\n }, []);\n\n const prevTrialLicense = useSelector((state: GlobalState) => state.entities.admin.prevTrialLicense);\n const license = useSelector(getLicense);\n const isPrevLicensed = prevTrialLicense?.IsLicensed;\n const isCurrentLicensed = license?.IsLicensed;\n\n // Cloud conditions\n const isCloud = license?.Cloud === 'true';\n\n // Show this CTA if the instance is currently not licensed and has never had a trial license loaded before\n // also check that the user is a system admin (this after the onboarding task list is shown to all users)\n const selfHostedTrialCondition = (isCurrentLicensed === 'false' && isPrevLicensed === 'false') &&\n (props.isCurrentUserSystemAdmin || props.isFirstAdmin);\n\n // if Cloud, don't show\n const showStartTrialBtn = selfHostedTrialCondition && !isCloud;\n\n return (\n <>\n <CSSTransition\n in={true}\n timeout={150}\n classNames='fade'\n >\n <CompletedWrapper>\n <img\n src={completedImg}\n alt={'completed tasks image'}\n />\n <h2>\n <FormattedMessage\n id={'onboardingTask.checklist.completed_title'}\n defaultMessage='Well done. You’ve completed all of the tasks!'\n />\n </h2>\n <span className='completed-subtitle'>\n <FormattedMessage\n id={'onboardingTask.checklist.completed_subtitle'}\n defaultMessage='We hope Mattermost is more familiar now.'\n />\n </span>\n\n {showStartTrialBtn ? (\n <>\n <span className='start-trial-text'>\n <FormattedMessage\n id='onboardingTask.checklist.higher_security_features'\n defaultMessage='Interested in our higher-security features?'\n /> <br/>\n <FormattedMessage\n id='onboardingTask.checklist.start_enterprise_now'\n defaultMessage='Start your free Enterprise trial now!'\n />\n </span>\n <StartTrialBtn\n telemetryId='start_trial_from_onboarding_completed_task'\n onClick={dismissAction}\n />\n <button\n onClick={dismissAction}\n className={'no-thanks-link style-link'}\n >\n <FormattedMessage\n id={'onboardingTask.checklist.no_thanks'}\n defaultMessage='No, thanks'\n />\n </button>\n </>\n\n ) : (\n <button\n onClick={dismissAction}\n className='got-it-button'\n >\n <FormattedMessage\n id={'collapsed_reply_threads_modal.confirm'}\n defaultMessage='Got it'\n />\n </button>\n )}\n <div className='download-apps'>\n <span>\n <FormattedMessage\n id='onboardingTask.checklist.downloads'\n defaultMessage='Now that you’re all set up, <link>download our apps.</link>!'\n values={{\n link: (msg: React.ReactNode) => (\n <ExternalLink\n location='onboarding_tasklist_completed'\n href='https://mattermost.com/download#desktop'\n >\n {msg}\n </ExternalLink>\n ),\n }}\n />\n </span>\n </div>\n {showStartTrialBtn && <div className='disclaimer'>\n <span>\n <FormattedMessage\n id='onboardingTask.checklist.disclaimer'\n defaultMessage='By clicking “Start trial”, I agree to the <linkEvaluation>Mattermost Software and Services License Agreement</linkEvaluation>, <linkPrivacy>privacy policy</linkPrivacy> and receiving product emails.'\n values={{\n linkEvaluation: (msg: React.ReactNode) => (\n <ExternalLink\n href={LicenseLinks.SOFTWARE_SERVICES_LICENSE_AGREEMENT}\n location='onboarding_tasklist_completed'\n >\n {msg}\n </ExternalLink>\n ),\n linkPrivacy: (msg: React.ReactNode) => (\n <ExternalLink\n href={AboutLinks.PRIVACY_POLICY}\n location='onboarding_tasklist_completed'\n >\n {msg}\n </ExternalLink>\n ),\n }}\n />\n </span>\n </div>}\n </CompletedWrapper>\n </CSSTransition>\n </>\n );\n};\n\nexport default Completed;\n","import * as React from 'react';\n\n/**\n * Takes an argument and if it's an array, returns the first item in the array,\n * otherwise returns the argument. Used for Preact compatibility.\n */\nexport var unwrapArray = function unwrapArray(arg) {\n return Array.isArray(arg) ? arg[0] : arg;\n};\n/**\n * Takes a maybe-undefined function and arbitrary args and invokes the function\n * only if it is defined.\n */\n\nexport var safeInvoke = function safeInvoke(fn) {\n if (typeof fn === 'function') {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return fn.apply(void 0, args);\n }\n};\n/**\n * Sets a ref using either a ref callback or a ref object\n */\n\nexport var setRef = function setRef(ref, node) {\n // if its a function call it\n if (typeof ref === 'function') {\n return safeInvoke(ref, node);\n } // otherwise we should treat it as a ref object\n else if (ref != null) {\n ref.current = node;\n }\n};\n/**\n * Simple ponyfill for Object.fromEntries\n */\n\nexport var fromEntries = function fromEntries(entries) {\n return entries.reduce(function (acc, _ref) {\n var key = _ref[0],\n value = _ref[1];\n acc[key] = value;\n return acc;\n }, {});\n};\n/**\n * Small wrapper around `useLayoutEffect` to get rid of the warning on SSR envs\n */\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && window.document && window.document.createElement ? React.useLayoutEffect : React.useEffect;","import * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { createPopper as defaultCreatePopper } from '@popperjs/core';\nimport isEqual from 'react-fast-compare';\nimport { fromEntries, useIsomorphicLayoutEffect } from './utils';\nvar EMPTY_MODIFIERS = [];\nexport var usePopper = function usePopper(referenceElement, popperElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var prevOptions = React.useRef(null);\n var optionsWithDefaults = {\n onFirstUpdate: options.onFirstUpdate,\n placement: options.placement || 'bottom',\n strategy: options.strategy || 'absolute',\n modifiers: options.modifiers || EMPTY_MODIFIERS\n };\n\n var _React$useState = React.useState({\n styles: {\n popper: {\n position: optionsWithDefaults.strategy,\n left: '0',\n top: '0'\n },\n arrow: {\n position: 'absolute'\n }\n },\n attributes: {}\n }),\n state = _React$useState[0],\n setState = _React$useState[1];\n\n var updateStateModifier = React.useMemo(function () {\n return {\n name: 'updateState',\n enabled: true,\n phase: 'write',\n fn: function fn(_ref) {\n var state = _ref.state;\n var elements = Object.keys(state.elements);\n ReactDOM.flushSync(function () {\n setState({\n styles: fromEntries(elements.map(function (element) {\n return [element, state.styles[element] || {}];\n })),\n attributes: fromEntries(elements.map(function (element) {\n return [element, state.attributes[element]];\n }))\n });\n });\n },\n requires: ['computeStyles']\n };\n }, []);\n var popperOptions = React.useMemo(function () {\n var newOptions = {\n onFirstUpdate: optionsWithDefaults.onFirstUpdate,\n placement: optionsWithDefaults.placement,\n strategy: optionsWithDefaults.strategy,\n modifiers: [].concat(optionsWithDefaults.modifiers, [updateStateModifier, {\n name: 'applyStyles',\n enabled: false\n }])\n };\n\n if (isEqual(prevOptions.current, newOptions)) {\n return prevOptions.current || newOptions;\n } else {\n prevOptions.current = newOptions;\n return newOptions;\n }\n }, [optionsWithDefaults.onFirstUpdate, optionsWithDefaults.placement, optionsWithDefaults.strategy, optionsWithDefaults.modifiers, updateStateModifier]);\n var popperInstanceRef = React.useRef();\n useIsomorphicLayoutEffect(function () {\n if (popperInstanceRef.current) {\n popperInstanceRef.current.setOptions(popperOptions);\n }\n }, [popperOptions]);\n useIsomorphicLayoutEffect(function () {\n if (referenceElement == null || popperElement == null) {\n return;\n }\n\n var createPopper = options.createPopper || defaultCreatePopper;\n var popperInstance = createPopper(referenceElement, popperElement, popperOptions);\n popperInstanceRef.current = popperInstance;\n return function () {\n popperInstance.destroy();\n popperInstanceRef.current = null;\n };\n }, [referenceElement, popperElement, options.createPopper]);\n return {\n state: popperInstanceRef.current ? popperInstanceRef.current.state : null,\n styles: state.styles,\n attributes: state.attributes,\n update: popperInstanceRef.current ? popperInstanceRef.current.update : null,\n forceUpdate: popperInstanceRef.current ? popperInstanceRef.current.forceUpdate : null\n };\n};","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport type {Placement} from 'popper.js';\nimport React from 'react';\nimport type {RefObject, CSSProperties} from 'react';\nimport {usePopper} from 'react-popper';\nimport {CSSTransition} from 'react-transition-group';\nimport styled from 'styled-components';\n\nconst Overlay = styled.div`\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: flex-end;\n justify-content: center;\n height: 100%;\n min-height: 100%;\n left: 0;\n right: 0;\n top: 0;\n position: fixed;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior: contain;\n pointer-events: auto;\n -ms-scroll-chaining: none;\n transition: 150ms;\n transition-property: background-color;\n transition-timing-function: ease-in-out;\n z-index: 100;\n &.fade-enter {\n background-color: rgba(0, 0, 0, 0);\n }\n &.fade-enter-active {\n background-color: rgba(0, 0, 0, 0.5);\n }\n &.fade-enter-done {\n background-color: rgba(0, 0, 0, 0.5);\n }\n &.fade-exit {\n background-color: rgba(0, 0, 0, 0.5);\n }\n &.fade-exit-active {\n background-color: rgba(0, 0, 0, 0);\n }\n &.fade-exit-done {\n background-color: rgba(0, 0, 0, 0);\n }\n`;\n\ninterface TaskListPopoverProps {\n trigger: RefObject<HTMLButtonElement>;\n isVisible: boolean;\n placement?: Placement;\n offset?: [number | null | undefined, number | null | undefined];\n children?: React.ReactNode;\n onClick?: () => void;\n}\n\nexport const TaskListPopover = ({\n trigger,\n placement = 'top-start',\n isVisible,\n offset = [0, 5],\n children,\n onClick,\n}: TaskListPopoverProps): JSX.Element | null => {\n const [popperElement, setPopperElement] =\n React.useState<HTMLDivElement | null>(null);\n\n const {\n styles: {popper},\n attributes,\n } = usePopper(trigger.current, popperElement, {\n placement,\n modifiers: [\n {\n name: 'offset',\n options: {\n offset,\n },\n },\n ],\n });\n const style = {\n container: {\n ...popper,\n zIndex: isVisible ? 100 : -1,\n position: 'fixed',\n } as CSSProperties,\n };\n return (\n <>\n <CSSTransition\n timeout={150}\n classNames='fade'\n in={isVisible}\n unmountOnExit={true}\n >\n <Overlay\n onClick={onClick}\n data-cy='onboarding-task-list-overlay'\n />\n </CSSTransition>\n <div\n ref={setPopperElement}\n style={style.container}\n {...attributes.popper}\n >\n {children}\n </div>\n </>\n );\n};\n\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport {CompletedAnimation} from './onboarding_tasklist_animations';\n\nexport interface TaskProps {\n label: React.ReactElement;\n icon?: React.ReactNode;\n onClick?: () => void;\n completedStatus: boolean;\n}\n\nconst StyledTask = styled.div`\n display: flex;\n background-color: var(--center-channel-bg);\n cursor: pointer;\n width: 100%;\n padding: 8px 20px;\n font-size: 14px;\n align-items: flex-start;\n color: var(--center-channel-color);\n position: relative;\n\n span {\n div {\n display: flex;\n align-items: flex-start;\n picture {\n display: flex;\n align-items: center;\n margin-right: 10px;\n }\n }\n }\n\n &.completed {\n color: var(--denim-status-online);\n\n span {\n span {\n text-decoration: underline;\n text-decoration-skip-ink: none;\n text-underline-offset: -0.325em;\n }\n }\n }\n\n :hover {\n background: rgba(var(--center-channel-color-rgb), 0.08);\n }\n :active {\n background-color: rgba(var(--button-bg-rgb), 0.08);\n }\n :focus {\n box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.32),\n inset 0 0 0 2px blue;\n }\n transition: background 250ms ease-in-out, color 250ms ease-in-out,\n box-shadow 250ms ease-in-out;\n`;\n\nexport const Task = (props: TaskProps): JSX.Element => {\n const {label, completedStatus, onClick} = props;\n\n const handleOnClick = () => {\n if (onClick) {\n onClick();\n }\n };\n\n return (\n <StyledTask\n className={completedStatus ? 'completed' : ''}\n onClick={handleOnClick}\n >\n {completedStatus && <CompletedAnimation completed={completedStatus}/>}\n <span>{label}</span>\n </StyledTask>\n );\n};\n","// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.\n// See LICENSE.txt for license information.\n\nimport React, {useRef, useCallback, useEffect, useState} from 'react';\nimport {FormattedMessage} from 'react-intl';\nimport {useDispatch, useSelector} from 'react-redux';\nimport styled, {css} from 'styled-components';\n\nimport {CloseIcon, PlaylistCheckIcon} from '@mattermost/compass-icons/components';\n\nimport {getPrevTrialLicense} from 'mattermost-redux/actions/admin';\nimport {getMyPreferences, savePreferences} from 'mattermost-redux/actions/preferences';\nimport {getConfig} from 'mattermost-redux/selectors/entities/general';\nimport {\n getBool,\n getMyPreferences as getMyPreferencesSelector,\n getTheme,\n} from 'mattermost-redux/selectors/entities/preferences';\nimport {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';\n\nimport {trackEvent} from 'actions/telemetry_actions';\nimport {getShowTaskListBool} from 'selectors/onboarding';\n\nimport CompassThemeProvider from 'components/compass_theme_provider/compass_theme_provider';\nimport {useFirstAdminUser, useIsCurrentUserSystemAdmin} from 'components/global_header/hooks';\nimport {\n useTasksListWithStatus,\n OnboardingTaskCategory,\n OnboardingTaskList,\n} from 'components/onboarding_tasks';\nimport {useHandleOnBoardingTaskTrigger} from 'components/onboarding_tasks/onboarding_tasks_manager';\n\nimport {Preferences, RecommendedNextStepsLegacy} from 'utils/constants';\n\nimport type {GlobalState} from 'types/store';\n\nimport {CompletedAnimation} from './onboarding_tasklist_animations';\nimport Completed from './onboarding_tasklist_completed';\nimport {TaskListPopover} from './onboarding_tasklist_popover';\nimport {Task} from './onboarding_tasklist_task';\n\nconst TaskItems = styled.div`\n border-radius: var(--radius-m);\n border: solid 1px rgba(var(--center-channel-color-rgb), 0.16);\n background-color: var(--center-channel-bg);\n width: 352px;\n padding: 24px 0;\n transform: scale(0);\n opacity: 0;\n box-shadow: var(--elevation-6);\n transition: opacity 250ms ease-in-out 0ms, transform 250ms ease-in-out 0ms;\n transform-origin: left bottom;\n max-height: ${document.documentElement.clientHeight}px;\n overflow-y: auto;\n\n &.open {\n transform: scale(1);\n opacity: 1;\n }\n\n h1 {\n font-size: 20px;\n padding: 0 24px;\n margin: 0;\n }\n\n p {\n font-size: 12px;\n color: rgba(var(--center-channel-color-rgb), 0.75);\n padding: 4px 24px;\n }\n\n .link {\n font-size: 12px;\n color: var(--link-color);\n padding: 12px 24px 0;\n font-weight: bold;\n cursor: pointer;\n display: block;\n :hover{\n text-decoration: underline\n }\n }\n`;\n\nconst Button = styled.button<{open: boolean}>(({open}) => {\n return css`\n width: 36px;\n height: 36px;\n padding: 7px;\n border-radius: var(--radius-full);\n left: 15px;\n bottom: 15px;\n position: fixed;\n z-index: 101;\n display: flex;\n align-items: center;\n background: var(--center-channel-bg);\n border: solid 1px rgba(var(--center-channel-color-rgb), 0.16);\n box-shadow: var(--elevation-3);\n color: rgba(var(--center-channel-color-rgb), 0.75);\n\n &:hover {\n border-color: rgba(var(--center-channel-color-rgb), 0.24);\n box-shadow: var(--elevation-4);\n color: rgba(var(--center-channel-color-rgb), 0.75)\n }\n\n span {\n width: 20px;\n height: 16px;\n background: var(--button-bg);\n position: absolute;\n display: ${open ? 'none' : 'block'};\n border-radius: 12px;\n color: var(--button-color);\n font-weight: bold;\n font-size: 11px;\n line-height: 16px;\n bottom: 22px;\n left: 22px;\n }\n `;\n});\n\nconst OnBoardingTaskList = (): JSX.Element | null => {\n const hasPreferences = useSelector((state: GlobalState) => Object.keys(getMyPreferencesSelector(state)).length !== 0);\n\n useEffect(() => {\n dispatch(getPrevTrialLicense());\n if (!hasPreferences) {\n dispatch(getMyPreferences());\n }\n }, []);\n\n const open = useSelector(((state: GlobalState) => getBool(state, OnboardingTaskCategory, OnboardingTaskList.ONBOARDING_TASK_LIST_OPEN)));\n const trigger = useRef<HTMLButtonElement>(null);\n const dispatch = useDispatch();\n const currentUserId = useSelector(getCurrentUserId);\n const handleTaskTrigger = useHandleOnBoardingTaskTrigger();\n const tasksList = useTasksListWithStatus();\n const [completedCount, setCompletedCount] = useState(tasksList.filter((task) => task.status).length);\n const [showAnimation, setShowAnimation] = useState(false);\n const itemsLeft = tasksList.length - completedCount;\n const isCurrentUserSystemAdmin = useIsCurrentUserSystemAdmin();\n const isFirstAdmin = useFirstAdminUser();\n const isEnableOnboardingFlow = useSelector((state: GlobalState) => getConfig(state).EnableOnboardingFlow === 'true');\n const [showTaskList, firstTimeOnboarding] = useSelector(\n getShowTaskListBool,\n (a, b) => a[0] === b[0] && a[1] === b[1],\n );\n const theme = useSelector(getTheme);\n\n const startTask = (taskName: string) => {\n toggleTaskList();\n handleTaskTrigger(taskName);\n };\n\n const initOnboardingPrefs = async () => {\n // save to preferences the show/open-task-list to true\n // also save the recomendedNextSteps-hide to true to avoid asserting to true\n // the logic to firstTimeOnboarding\n await dispatch(savePreferences(currentUserId, [\n {\n category: OnboardingTaskCategory,\n user_id: currentUserId,\n name: OnboardingTaskList.ONBOARDING_TASK_LIST_SHOW,\n value: 'true',\n },\n {\n user_id: currentUserId,\n category: OnboardingTaskCategory,\n name: OnboardingTaskList.ONBOARDING_TASK_LIST_OPEN,\n value: 'true',\n },\n {\n user_id: currentUserId,\n category: Preferences.RECOMMENDED_NEXT_STEPS,\n name: RecommendedNextStepsLegacy.HIDE,\n value: 'true',\n },\n ]));\n };\n\n useEffect(() => {\n if (firstTimeOnboarding) {\n initOnboardingPrefs();\n }\n }, []);\n\n useEffect(() => {\n if (firstTimeOnboarding && showTaskList && isEnableOnboardingFlow) {\n trackEvent(OnboardingTaskCategory, OnboardingTaskList.ONBOARDING_TASK_LIST_SHOW);\n }\n }, [firstTimeOnboarding, showTaskList, isEnableOnboardingFlow]);\n\n // Done to show task done animation in closed state as well\n useEffect(() => {\n const newCCount = tasksList.filter((task) => task.status).length;\n const show = localStorage.getItem(OnboardingTaskCategory);\n if (show || ((completedCount + 1) === newCCount && !open)) {\n setTimeout(() => {\n setShowAnimation(true);\n setCompletedCount(newCCount);\n }, 100);\n setTimeout(() => {\n setShowAnimation(false);\n setCompletedCount(newCCount);\n }, 500);\n localStorage.removeItem(OnboardingTaskCategory);\n } else {\n setCompletedCount(newCCount);\n }\n }, [tasksList, completedCount]);\n\n const dismissChecklist = useCallback(() => {\n const preferences = [{\n user_id: currentUserId,\n category: OnboardingTaskCategory,\n name: OnboardingTaskList.ONBOARDING_TASK_LIST_SHOW,\n value: 'false',\n },\n {\n user_id: currentUserId,\n category: OnboardingTaskCategory,\n name: OnboardingTaskList.ONBOARDING_TASK_LIST_OPEN,\n value: 'false',\n }];\n dispatch(savePreferences(currentUserId, preferences));\n trackEvent(OnboardingTaskCategory, OnboardingTaskList.DECLINED_ONBOARDING_TASK_LIST);\n }, [currentUserId]);\n\n const toggleTaskList = useCallback(() => {\n const preferences = [{\n user_id: currentUserId,\n category: OnboardingTaskCategory,\n name: OnboardingTaskList.ONBOARDING_TASK_LIST_OPEN,\n value: String(!open),\n }];\n dispatch(savePreferences(currentUserId, preferences));\n trackEvent(OnboardingTaskCategory, open ? OnboardingTaskList.ONBOARDING_TASK_LIST_CLOSE : OnboardingTaskList.ONBOARDING_TASK_LIST_OPEN);\n }, [open, currentUserId]);\n\n if (!hasPreferences || !showTaskList || !isEnableOnboardingFlow) {\n return null;\n }\n\n return (\n <CompassThemeProvider theme={theme}>\n <CompletedAnimation completed={showAnimation}/>\n <Button\n onClick={toggleTaskList}\n ref={trigger}\n open={open}\n data-cy='onboarding-task-list-action-button'\n >\n {open ? <CloseIcon size={20}/> : <PlaylistCheckIcon size={20}/>}\n {itemsLeft !== 0 && (<span>{itemsLeft}</span>)}\n </Button>\n <TaskListPopover\n isVisible={open}\n trigger={trigger}\n onClick={toggleTaskList}\n >\n <TaskItems className={open ? 'open' : ''}>\n {completedCount === tasksList.length ? (\n <Completed\n dismissAction={dismissChecklist}\n isFirstAdmin={isFirstAdmin}\n isCurrentUserSystemAdmin={isCurrentUserSystemAdmin}\n />\n ) : (\n <>\n <h1>\n <FormattedMessage\n id='next_steps_view.welcomeToMattermost'\n defaultMessage='Welcome to Mattermost'\n />\n </h1>\n <p>\n <FormattedMessage\n id='onboardingTask.checklist.main_subtitle'\n defaultMessage=\"Let's get up and running.\"\n />\n </p>\n {tasksList.map((task) => (\n <Task\n key={OnboardingTaskCategory + task.name}\n label={task.label()}\n onClick={() => {\n startTask(task.name);\n }}\n completedStatus={task.status}\n />\n ))}\n <span\n className='link'\n onClick={dismissChecklist}\n >\n <FormattedMessage\n id='onboardingTask.checklist.dismiss_link'\n defaultMessage='No thanks, I’ll figure it out myself'\n />\n </span>\n </>\n )}\n </TaskItems>\n </TaskListPopover>\n </CompassThemeProvider>\n );\n};\n\nexport default OnBoardingTaskList;\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n // START: fast-deep-equal es6/index.js 3.1.3\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n // START: Modifications:\n // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n // to co-exist with es5.\n // 2. Replace `for of` with es5 compliant iteration using `for`.\n // Basically, take:\n //\n // ```js\n // for (i of a.entries())\n // if (!b.has(i[0])) return false;\n // ```\n //\n // ... and convert to:\n //\n // ```js\n // it = a.entries();\n // while (!(i = it.next()).done)\n // if (!b.has(i.value[0])) return false;\n // ```\n //\n // **Note**: `i` access switches to `i.value`.\n var it;\n if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!equal(i.value[1], b.get(i.value[0]))) return false;\n return true;\n }\n\n if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n it = a.entries();\n while (!(i = it.next()).done)\n if (!b.has(i.value[0])) return false;\n return true;\n }\n // END: Modifications\n\n if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n // START: Modifications:\n // Apply guards for `Object.create(null)` handling. See:\n // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n // END: Modifications\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n // END: fast-deep-equal\n\n // START: react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element) return false;\n\n // custom handling for React/Preact\n for (i = length; i-- !== 0;) {\n if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner\n // Preact-specific: avoid traversing Preact elements' __v and __o\n // __v = $_original / $_vnode\n // __o = $_owner\n // These properties contain circular references and are not needed when\n // comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of elements\n\n continue;\n }\n\n // all other properties should be traversed as usual\n if (!equal(a[keys[i]], b[keys[i]])) return false;\n }\n // END: react-fast-compare\n\n // START: fast-deep-equal\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if (((error.message || '').match(/stack|recursion/i))) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('react-fast-compare cannot handle circular refs');\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n"],"names":["Animation","styled","withConfig","displayName","CompletedAnimation","props","React","className","completed","StatusIcon","status","CompletedWrapper","Completed","dismissAction","dispatch","useDispatch","useEffect","getPrevTrialLicense","prevTrialLicense","useSelector","state","entities","admin","license","getLicense","isPrevLicensed","IsLicensed","isCurrentLicensed","isCloud","Cloud","showStartTrialBtn","isCurrentUserSystemAdmin","isFirstAdmin","CSSTransition","in","timeout","classNames","src","completedImg","alt","FormattedMessage","id","defaultMessage","StartTrialBtn","telemetryId","onClick","values","link","msg","ExternalLink","location","href","linkEvaluation","LicenseLinks","SOFTWARE_SERVICES_LICENSE_AGREEMENT","linkPrivacy","AboutLinks","PRIVACY_POLICY","propTypes","_pt","isRequired","fromEntries","entries","reduce","acc","_ref","key","value","useIsomorphicLayoutEffect","window","document","createElement","EMPTY_MODIFIERS","usePopper","referenceElement","popperElement","options","prevOptions","optionsWithDefaults","onFirstUpdate","placement","strategy","modifiers","_React$useState","styles","popper","position","left","top","arrow","attributes","setState","updateStateModifier","name","enabled","phase","fn","elements","Object","keys","map","element","requires","popperOptions","newOptions","concat","current","popperInstanceRef","setOptions","popperInstance","createPopper","destroy","update","forceUpdate","Overlay","TaskListPopover","trigger","isVisible","offset","children","setPopperElement","style","container","_objectSpread","zIndex","unmountOnExit","assign","ref","StyledTask","Task","label","completedStatus","handleOnClick","icon","TaskItems","documentElement","clientHeight","Button","open","css","OnBoardingTaskList","hasPreferences","getMyPreferencesSelector","length","getMyPreferences","getBool","OnboardingTaskCategory","OnboardingTaskList","ONBOARDING_TASK_LIST_OPEN","useRef","currentUserId","getCurrentUserId","handleTaskTrigger","useHandleOnBoardingTaskTrigger","tasksList","useTasksListWithStatus","completedCount","setCompletedCount","useState","filter","task","showAnimation","setShowAnimation","itemsLeft","useIsCurrentUserSystemAdmin","useFirstAdminUser","isEnableOnboardingFlow","getConfig","EnableOnboardingFlow","showTaskList","firstTimeOnboarding","getShowTaskListBool","a","b","theme","getTheme","async","savePreferences","category","user_id","ONBOARDING_TASK_LIST_SHOW","Preferences","RECOMMENDED_NEXT_STEPS","RecommendedNextStepsLegacy","HIDE","initOnboardingPrefs","trackEvent","newCCount","localStorage","getItem","setTimeout","removeItem","dismissChecklist","useCallback","preferences","DECLINED_ONBOARDING_TASK_LIST","toggleTaskList","String","ONBOARDING_TASK_LIST_CLOSE","CompassThemeProvider","CloseIcon","size","PlaylistCheckIcon","taskName","hasElementType","Element","hasMap","Map","hasSet","Set","hasArrayBuffer","ArrayBuffer","isView","equal","constructor","i","it","Array","isArray","next","done","has","get","RegExp","source","flags","valueOf","prototype","toString","hasOwnProperty","call","$$typeof","module","exports","error","message","match","console","warn"],"sourceRoot":""}