{"version":3,"sources":["images/logo.svg","images/dashboard.svg","images/schedule.svg","images/calendar.svg","images/performance.svg","images/tasks.svg","images/clients.svg","images/settings.svg","images/login.svg","images/logout.svg","images/onboarding__00.svg","images/onboarding__01.svg","images/onboarding__02.svg","images/onboarding__03.svg","images/onboarding__04.svg","images/onboarding__05.svg","images/onboarding__06.svg","agent.js","reducers/auth.js","constants/actionTypes.js","reducers/common.js","reducers/home.js","reducers/clients.js","reducers/projects.js","reducers/invoices.js","reducers/tasks.js","reducers/settings.js","reducers/schedule.js","reducers/months.js","reducers/years.js","reducers/admin_users.js","middleware.js","configureStore.js","images.js","components/Tooltip.js","components/Nav.js","components/Tasks/TaskItem.js","components/Tasks/TaskList.js","components/ListErrors.js","components/Tasks/index.js","images/error.svg","images/positive.svg","images/icons/price.svg","components/Home/index.js","components/Clients/Dropdown.js","currencies.js","components/Validate.js","components/Notifications.js","images/lock.svg","components/Clients/ClientOptions.js","components/Clients/Overlay.js","components/Clients/Filter.js","components/Clients/Landing.js","images/error_small.svg","images/note.svg","components/Clients/Item.js","components/Info.js","components/Clients/Project.js","images/icons/toggle.svg","images/icons/calendar.svg","components/Clients/Client.js","components/Clients/index.js","components/Admin/Users/AdminUserItem.js","components/Admin/Users/AdminUserList.js","components/Admin/Users/index.js","images/icons/time.svg","images/icons/dashboard.svg","webpack:///./src/images/clients.svg?2cc1","images/icons/tasks.svg","images/icons/projects.svg","components/Admin/User/index.js","components/Projects/Dropdown.js","components/Projects/ProjectOptions.js","images/price_small.svg","components/Projects/Overlay.js","services/AvailabilityDateBuilder.js","components/Projects/Filter.js","components/Projects/Landing.js","components/Projects/Item.js","images/icons/invoice.svg","components/Projects/Project.js","components/Projects/index.js","components/Invoices/Filter.js","components/Invoices/Overlay.js","components/Invoices/InvoiceTime.js","components/Invoices/InvoicePayment.js","pages/Invoices.js","images/remove.svg","images/add.svg","components/Invoices/InvoicesForm.js","pages/InvoiceNew.js","pages/InvoiceEdit.js","components/CheckoutForm.js","components/SettingsForm.js","components/Settings.js","components/Billings.js","components/PaymentMethod.js","components/Schedule/Dropdown.js","components/Schedule/OverlayItem.js","images/time_small.svg","components/Schedule/Overlay.js","images/holiday.svg","components/Schedule/ScheduleItem.js","components/Schedule/ScheduleList.js","components/Schedule/ScheduleWeek.js","support/time.js","components/Schedule/ScheduleMonth.js","components/Schedule/Month.js","components/Schedule/index.js","components/Year/index.js","components/Login.js","components/Register.js","components/RegisterDemo.js","components/ForgottenPassword.js","components/ResetPassword.js","components/Unsubscribe.js","components/PrivateRoute.js","routes.js","components/App.js","index.js","reducer.js"],"names":["module","exports","superagent","superagentPromise","_superagent","global","Promise","API_ROOT","process","responseBody","res","body","headers","token","tokenPlugin","req","set","requests","url","del","send","use","then","get","put","post","Auth","current","login","email","password","user","logout","register","demo_register","save","Password","forgot","reset","reset_password_token","Unsubscribe","unsubscribe","Clients","all","page","show","id","create","client","update","Object","assign","undefined","remove","prompt","transition_state","state","schedule","invoiceable_works","clientId","projectId","invoiceable_projects","Projects","project","Invoices","invoice","emailInvoice","summary","filter","filters","time","client_id","project_id","currency","payment","InvoicePayments","invoiceId","invoice_payment","Tasks","task","complete","Schedule","from","to","availability","work","create_multiple","works","remove_multiple","rollback_transition_state","Subscription","annual","stripeToken","extend","PaymentMethod","Month","month","year","Year","AdminUsers","queryString","masquerade","revertMasquerade","setToken","_token","action","type","error","errors","payload","inProgress","message","key","value","unsubscribe_email","unsubscribed","defaultState","activeMonth","currentMonth","dateFns","startOfMonth","parse","Date","window","location","pathname","indexOf","months","url_date","match","date","appLoaded","currentUser","subscription","nextMonth","addMonths","prevMonth","subMonths","locale","getUserLocale","redirectTo","name","format","toLowerCase","console","log","notification","loading","overlay","isFetching","clients","currentClient","map","index","arr","projects","invoices","findIndex","invoice_id","newData","$set","tasks","success","arrayToObject","array","reduce","obj","item","days","day","endOfMonth","push","addDays","blackouts","next_days","newHash","flat","previous_days","related_work_day_prices","price","price_formatted","$unset","data","month_string","users","promiseMiddleware","store","next","v","dispatch","subtype","currentView","getState","viewChangeCounter","skipTracking","currentState","promise","status","response","localStorageMiddleware","authorization","localStorage","setItem","agent","history","createBrowserHistory","logo","dashboard","calendar","performance","settings","onboarding__00","onboarding__01","onboarding__02","onboarding__03","onboarding__04","onboarding__05","onboarding__06","Tooltip","props","displayTooltip","hideTooltip","bind","showTooltip","mouseMoved","event","this","setState","left","top","bounds","currentTarget","getBoundingClientRect","x","width","target","clientX","position","size","className","onMouseMove","ReactDOM","createPortal","style","dangerouslySetInnerHTML","__html","document","querySelector","onMouseOver","onMouseLeave","children","React","Component","LoggedOutView","Link","alt","src","images","LoggedInView","trial_remaining","admin","trial_ends_at","differenceInDays","now","Math","ceil","Fragment","currentPath","trigger","xmlns","height","viewBox","fill","d","current_year","fillRule","href","onClick","onClickLogout","Nav","demo","connect","common","masquerading","TaskItem","pushChange","change","updateTask","updateState","field","ev","text","removeTask","defaultValue","onKeyUp","TaskList","_","isEmpty","ListErrors","keys","TaskForm","submitForm","preventDefault","onSubmitForm","nextProps","onSubmit","placeholder","onChange","onLoad","onUnload","amountAgreed","_extends","i","arguments","length","source","prototype","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","createElement","stroke","strokeWidth","strokeLinecap","strokeLinejoin","_ref","svgRef","title","ref","ForwardRef","forwardRef","transform","cx","cy","r","CustomTooltip","formatter","Intl","NumberFormat","navigator","language","maximumFractionDigits","minimumFractionDigits","active","isFuture","forecast","Home","clearNotifications","e","prevState","notifications","multipleDates","shift","selectedKeys","deleteKeys","selectorEnabled","loadMonth","loadYear","monthData","yearData","revenue_data","revenue_forecast","month_breakdown","cumulative_revenue","isThisMonth","month_name","isPast","revenue","monthly_average_revenue","month_date","past","number","month_number","monthly_revenue_target","earned","unscheduled_project_revenue","notation","annual_estimate_low_range","round","annual_estimate_high_range","annual_estimate_low_range_string","annual_estimate_high_range_string","in_range","inRange","yearly_target","next_month_name","next_month","risks","tooltip","count","average_day_rate","standard_day_rate","productivity","average_day_rate_formatted","standard_day_rate_formatted","total_productivity_forecast_percentage","total_productivity_percentage","amount_agreed","amount_revenue","unscheduled_project_revenue_formatted","yearly_target_formatted","monthly_average_revenue_formatted","amount_required_each_month_to_now_hit_target_formatted","backgroundColor","short_name","isFront","dataKey","tickMargin","axisLine","tickLine","minTickGap","allowDataOverflow","interval","isAnimationActive","dot","content","unscheduled_projects","formatPrice","remaining","number_of_days_worked","total_workable_days_to_date","years","currentYear","Dropdown","node","useRef","useState","open","setOpen","handleScroll","handleChange","persist","handleClickOutside","stopImmediatePropagation","composedPath","el","contains","useEffect","addEventListener","offsetParent","dropdown_menu","position_top","offsetTop","offsetHeight","scrollPosition","bottom","innerHeight","position_recalc","visibility","removeEventListener","preferred_billing_unit","day_rate","hourly_rate","opacity","right","currencies","validateEmail","test","alert","showNotificationWithTimeout","setTimeout","clipRule","ClientOptions","useSelector","element","abs","disabled","can_be_deleted","deleteClient","class","renderSwitch","Input","autoComplete","DropdownIndicator","fill-rule","Overlay","overlay_history","concat","counter","handleClick","displayColorPicker","handleClose","clientNameRef","createRef","clientButtonRef","deleteClientButtonRef","random_colour","floor","random","initialLoad","new","contact_name","hex_colour","standard_hourly_rate","address","payment_terms","invoice_schedule","keyPress","focus","prevProps","includes","keyCode","parseInt","innerText","split","reverse","split_field","parent_key","nodeName","click","replace","direction","stopPropagation","splice","color","updateField","hex","clientName","hours_per_day","newClient","that","timer","setInterval","new_client","clearInterval","slug","closeOverlay","updateClient","can_delete","close","strokeMiterlimit","autoFocus","tabIndex","onKeyDown","onChangeComplete","updateColour","classNamePrefix","options","menuPlacement","components","getSymbolFromCurrency","innerRef","html","toString","numericOnly","createClient","setOverlay","checkClientName","confirmDeleteClient","ownProps","startsWith","transitionState","Filter","Landing","icon","params","Item","can_be_invoiced","project_title","substring","unit","unit_value_formatted","note","fixed_price","Info","data-title","Project","amount_worked_percentage","estimate_remaining_percentage","COLORS","billing_type","billing_type_formatted","amount_formatted","amount_revenue_string","startAngle","endAngle","innerRadius","outerRadius","paddingAngle","entry","Client","tab","classList","toggle","stroke-width","archived","stroke-linecap","stroke-linejoin","stroke-miterlimit","project_total","result","option","amount","months_worked","hash","orderBy","values","pickBy","work_days","data-month","toggleMonth","amount_worked_string","updateWorkState","rollbackInvoiceWork","client_name","total_revenue","total_revenue_last_3_months","hourly_rate_formatted","day_rate_formatted","next_work_at","openOverlay","switchTabs","data-count","issues","issue","description","client_state","clientKeyPress","newClientButtonRef","loadClients","unsetClient","filtered_clients","grouped_clients","groupBy","sortBy","plus","updateFilter","group","Switch","Route","exact","path","render","AdminUserItem","created_at","last_seen_at","AdminUserList","Title","Option","link","search","newState","stringify","resetFilter","admin_users","points","AdminUser","user_slug","finished","on_track","cancelled","last_contact_received_at","country","standard_hourly_rate_formatted","work_count","latest_work_added_at","clients_count","project_count","task_count","subscription_name","stripe_link","masqueradeAsUser","activity","userId","project_rate_unit","estimated_time_unit","deadline","toggleUnit","checked","colon","unit_value_in_time","selectedDays","disabledDays","before","onDayClick","onTodayButtonClick","fromMonth","todayButton","initialMonth","ProjectOptions","deleteProject","confirmCancelProject","confirmDeleteProject","searchClientsRef","clientTitleRef","projectTitleRef","projectButtonRef","deleteProjectButtonRef","keyword","getAvailability","estimated","estimated_time_value","results","list","flow","partialRight","some","method","RegExp","setupNewClient","rate","project_rate_value","blur","address_line_1","address_line_2","city","postal_code","projectName","newProject","new_project","dates","availableDates","clientDayRate","time_outstanding","amount_scheduled_time","remaining_hours","parseFloat","unit_value","hoursToUse","AvailabilityDateBuilder","updateProject","autoPopulateSchedule","arrow","data-stroke","setClient","fixedPriceRef","slice","createProject","closeAvailability","estimate_remaining","time_formatted","calc","String","toFixed","checkProjectName","border","y","rx","invoiceWork","not_started","you_have_contextual","amount_in_base_currency_formatted","project_rate_value_formatted","project_rate_unit_formatted","project_rate_value_in_base_currency_formatted","amount_invoiced","amount_invoiced_string","amount_uninvoiced","amount_uninvoiced_string","isAfter","estimated_time_formatted","amount_scheduled","actual_rate","rate_unit_short","amount_worked","project_state","projectKeyPress","newProjectButtonRef","loadProjects","unsetProject","filtered_projects","grouped_projects","onStateTransition","updateSummary","pdfLink","download","errors_preventing_submission","confirm","amountReceived","overlayName","amount_received","invoicePayment","recipients","business_attributes","business","updateBusiness","updateSelectedClient","createInvoicePayment","invoice_number","total_formatted","updateAmountReceived","total","formatDate","parseDate","onDayChange","dayPickerProps","after","InvoiceTime","destroySummary","getSummary","gross_total_in_base_currency","date_received","useMountedRef","mountedRef","useDispatch","QueryString","setSummary","filterState","setFilterState","filterClient","setFilterClient","filterInvoice","setFilterInvoice","setOverlayName","invoicesEnabled","enableInvoices","datePickerEnabled","showDatepicker","unbilledWorkEnabled","enableUnbilledWork","isSameDay","find","inv","updateStateFilter","confirmStartDate","invoices_enabled","invoiceable_from","clientList","label","sort","a","b","sub_total_formatted","bodyOfWork","client_slug","isClearable","overdue","due_date","days_overdue","sub_total_in_base_currency","sub_total","total_in_base_currency_formatted","currency_conversion_at","sub_total_in_base_currency_formatted","isNil","classNames","InvoicePayment","differenceInMonths","subDays","InvoicesForm","setWorks","filteredWorks","setFilteredWorks","setProjects","filteredProjects","setFilteredProjects","selectedClient","changeSelectedClient","missingInvoiceData","setMissingInvoiceData","missingClientData","setMissingClientData","sending","setSending","FORMAT","cl","filterWorkByCurrency","invoice_line_items","line_item","invoiceable_id","WhenFieldChanges","becomes","input","form","paymentTerms","term","invoice_line_items_attributes","invoiceLineItemTotal","li","_destroy","invoiceLineItemWithoutDeleted","Number","invoiceSubtotal","invoiceTotal","invoiceCurrency","getCurrency","ReactSelectAdapter","selected","isDisabled","rest","initialValues","mutators","arrayMutators","handleSubmit","pop","submitting","pristine","previous","onClientChange","inputProps","component","fields","quantity","subtotal","tax_rate","invoiceable_type","unit_amount","w","invoiceTax","saveSend","InvoiceNew","dataLoaded","setDataLoaded","newInvoice","invoice_note","payment_details","lineItems","workInCurrency","projectsInCurrency","invoiceLineItems","InvoiceEdit","setInvoice","pause","pause_loading","cancel","cancel_loading","icon_delete","confirmPauseSubscription","confirmCancelSubscription","CheckoutForm","stripe","createToken","_element","clear","submit","duration","dark_mode","switchDuration","onReady","c","base","fontSize","fontWeight","available_plans","beta","role","aria-label","monthly","trialable","trial_period","handleCancel","injectStripe","SettingsForm","updateCurrency","updateCountry","countries","countryList","getData","monday","tuesday","wednesday","thursday","friday","saturday","sunday","work_on_public_holidays","unsubscribe_from_emails","year_end","getLabel","plan_name","next_invoice_at","payment_method","brand","last4","apiKey","showform","cancelSubscription","pauseSubscription","updatePayment","createSubscription","rel","errorMessage","mask","maskChar","Settings","str","n","stripe_token_id","subscription_id","Billings","nextStep","exp_month","exp_year","allDates","OverlayItem","incrementDecrementTime","firstNumber","secondNumber","updateDate","changeTime","changeAllTimes","updateAllDates","searchProjectsRef","scheduleButtonRef","scrollTop","setupNewProject","total_price","total_time","project_name","override","total_days","total_hours","calc_hours","calc_minutes","forEach","$push","hours","minutes","calculatePrice","0","holiday","updateSchedule","updated","holiday__sm","saveHoliday","setProject","onScroll","handleScheduleScroll","maxLength","updateInput","saveWork","dragItem","dragItemFrontend","isScrolling","inViewMonth","ScheduleItem","onMouseEnter","add","onDragEnter","onDragLeave","onDragOver","handleDrop","getAttribute","onDragEnd","onDragStart","parentNode","handleWorkClick","shiftKey","deleteWork","handleDateEnter","handleDateLeave","booked","nextState","selectableRef","isSelecting","isSelected","isEqual","addWork","isToday","blackout","data-day","add_inline","draggable","data-index","data-work","unit_value_formatted_short","onDrop","data-select","todayRef","targetMonth","targetDay","modal","ScheduleWeek","endOfWeek","weekStartsOn","isFirstDayOfMonth","total_time_formatted","total_price_formatted","convertToHHMM","decimal","hrs","SelectableComponent","createSelectable","ScheduleMonth","consecutive_client","previous_project","previous_length","hideOnBoundaryHit","boundaryElement","scrollElement","topOffset","bottomOffset","sumBy","o","first","last","isMonday","selectableKey","highlighted","weekend","isWeekend","weekStart","weekFinish","isSunday","monthStart","monthEnd","isLastDayOfMonth","hoursFree","invoiced","paid","ScheduleList","scheduleRef","scrollUp","scrolling","handleSelection","handleDelete","backListener2","listen","handleShiftDown","handleShiftUp","findDOMNode","scrollHeight","scrollIntoView","outerWidth","querySelectorAll","onHistory","onMove","clearTimeout","sticky","uniq","person","threshold","inView","goBack","data-view","minHeight","onSelectionFinish","selectOnClick","tolerance","resetOnStart","ignoreList","goForward","revenue_target_string","total_earning_potential_string","monthly_revenue_target_string","in_past","days_empty","revenue_percentage","revenue_missed_percentage","chart","standard_day_rate_string","toLocaleString","unworked_days","maximum_hours","available_hours","holidays","header","business_year","amount_agreed_percentage","amount_agreed_string","dates_booked_count_string","available_time","total_workable_days","revenue_in_base_currency","first_name","target_remaining_formatted","target_remaining_days_formatted","monthly_revenue_target_formatted","ry","revenue_exceeded_string","switchMonth","loadDays","loadSchedule","yearly_revenue","endOfYear","previous_year","next_year","amount_revenue_formatted","target_remaining_days","number_of_days_holiday","number_of_days_unworked_to_date","client_breakdown","revenue_formatted","startOfWeek","difference_from_target_width_percentage","dayClass","empty","outside","inside","above","difference_from_target","below","revenue_string","difference_from_target_formatted","Login","changeEmail","onChangeEmail","changePassword","onChangePassword","auth","RegisterForm","step","prevStep","Register","startOfToday","RegisterDemo","ForgottenPassword","ResetPassword","updateStatewithValue","PrivateRoute","isLoggedIn","getItem","Redirect","AppRoute","setPath","expiredTrial","cancelledAndSubcriptionExpired","paid_subscription_ends_at","registeredButNoSubscription","billingRequired","subcription","App","newUser","onboardingStep","onRedirect","onClients","onProjects","clientSize","theme","new_user","nextScreen","appName","projectSize","checkSubscription","preloadedState","createStore","combineReducers","home","router","connectRouter","compose","applyMiddleware","routerMiddleware","configureStore","getElementById"],"mappings":"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","file":"static/js/main.5886492d.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo.6c54851f.svg\";","module.exports = __webpack_public_path__ + \"static/media/dashboard.8af9600c.svg\";","module.exports = __webpack_public_path__ + \"static/media/schedule.b439877c.svg\";","module.exports = __webpack_public_path__ + \"static/media/calendar.262df4da.svg\";","module.exports = __webpack_public_path__ + \"static/media/performance.ffbf2485.svg\";","module.exports = __webpack_public_path__ + \"static/media/tasks.a183e59a.svg\";","module.exports = __webpack_public_path__ + \"static/media/clients.c34f2607.svg\";","module.exports = __webpack_public_path__ + \"static/media/settings.58c46f2d.svg\";","module.exports = __webpack_public_path__ + \"static/media/login.3fde0d08.svg\";","module.exports = __webpack_public_path__ + \"static/media/logout.174e1393.svg\";","module.exports = __webpack_public_path__ + \"static/media/onboarding__00.87d212d3.svg\";","module.exports = __webpack_public_path__ + \"static/media/onboarding__01.dd287305.svg\";","module.exports = __webpack_public_path__ + \"static/media/onboarding__02.a3ad80b2.svg\";","module.exports = __webpack_public_path__ + \"static/media/onboarding__03.00f125c7.svg\";","module.exports = __webpack_public_path__ + \"static/media/onboarding__04.fa9a3521.svg\";","module.exports = __webpack_public_path__ + \"static/media/onboarding__05.8b53da1e.svg\";","module.exports = __webpack_public_path__ + \"static/media/onboarding__06.6f38226b.svg\";","import superagentPromise from 'superagent-promise';\nimport _superagent from 'superagent';\n\nconst superagent = superagentPromise(_superagent, global.Promise);\n\nconst API_ROOT = process.env.REACT_APP_RAILS_API;\n\nconst responseBody = res => {\n return { body: res.body, headers: res.headers };\n}\n\nlet token = null;\nconst tokenPlugin = req => {\n if (token) {\n req.set('authorization', `Token ${token}`);\n }\n}\n\nconst requests = {\n del: (url, body) =>\n superagent.del(`${API_ROOT}${url}`).send(body).use(tokenPlugin).then(responseBody),\n get: url =>\n superagent.get(`${API_ROOT}${url}`).use(tokenPlugin).then(responseBody),\n put: (url, body) =>\n superagent.put(`${API_ROOT}${url}`, body).use(tokenPlugin).then(responseBody),\n post: (url, body) =>\n superagent.post(`${API_ROOT}${url}`, body).use(tokenPlugin).then(responseBody)\n};\n\nconst Auth = {\n current: () =>\n requests.get('/user'),\n login: (email, password) =>\n requests.post('/users/login', { user: { email, password } }),\n logout: () =>\n requests.del('/users/sign_out'),\n register: user =>\n requests.post('/user', { user: user }),\n demo_register: user =>\n requests.post('/demo', { user: user }),\n save: user =>\n requests.put('/user', { user })\n};\n\nconst Password = {\n forgot: (email) =>\n requests.post('/users/password', { email: email }),\n reset: (token, password) =>\n requests.put('/users/password', { reset_password_token: token, password: password }),\n};\n\nconst Unsubscribe = {\n get: (token) =>\n requests.get('/unsubscriptions?token=' + token),\n unsubscribe: (token) =>\n requests.post('/unsubscriptions', { token: token }),\n};\n\nconst Clients = {\n all: page =>\n requests.get('/clients'),\n show: id =>\n requests.get(`/clients/${id}`),\n create: client =>\n requests.post('/clients', { client }),\n update: client =>\n requests.put(`/clients/${client.id}`, { client: Object.assign({}, client, { id: undefined } )}),\n remove: (client, prompt) =>\n requests.del(`/clients/${client.id}`, { prompt: prompt }),\n transition_state: (id, state) =>\n requests.post(`/clients/${id}/state`, { state: state }),\n schedule: id =>\n requests.get(`/works/search?by_client_id=${id}`),\n invoiceable_works: (clientId, projectId) =>\n requests.get(`/invoices/works?client_id=${clientId}&project_id=${projectId}`),\n invoiceable_projects: id =>\n requests.get(`/invoices/projects?client_id=${id}`),\n}\n\nconst Projects = {\n all: page =>\n requests.get('/projects'),\n show: id =>\n requests.get(`/projects/${id}`),\n create: project =>\n requests.post('/projects', { project }),\n update: project =>\n requests.put(`/projects/${project.id}`, { project: Object.assign({}, project, { id: undefined } )}),\n remove: (project, prompt) =>\n requests.del(`/projects/${project.id}`, { prompt: prompt }),\n transition_state: (id, state) =>\n requests.post(`/projects/${id}/state`, { state: state }),\n}\n\nconst Invoices = {\n all: page =>\n requests.get('/invoices'),\n show: id =>\n requests.get(`/invoices/${id}`),\n create: invoice =>\n requests.post('/invoices', { invoice }),\n update: invoice =>\n requests.put(`/invoices/${invoice.id}`, { invoice: Object.assign({}, invoice, { id: undefined } )}),\n remove: (invoice, prompt) =>\n requests.del(`/invoices/${invoice.id}`, { prompt: prompt }),\n transition_state: (id, state) =>\n requests.post(`/invoices/${id}/state`, { state: state }),\n email: (id, emailInvoice) =>\n requests.post(`/invoices/${id}/email`, emailInvoice),\n summary: () =>\n requests.get(`/invoices/summary`),\n filter: (filters) =>\n requests.get(`/invoices${filters}`),\n time: (client_id, project_id, currency) =>\n project_id ?\n requests.get(`/invoices/works?client_id=${client_id}&project_id=${project_id}¤cy=${currency}`)\n :\n requests.get(`/invoices/works?client_id=${client_id}¤cy=${currency}`),\n payment: (id) =>\n requests.get(`/invoices/${id}/invoice_payments`),\n}\n\nconst InvoicePayments = {\n create: (invoiceId, invoice_payment) =>\n requests.post(`/invoices/${invoiceId}/invoice_payments`, { invoice_payment })\n}\n\nconst Tasks = {\n all: page =>\n requests.get('/tasks'),\n create: task =>\n requests.post('/tasks', { task }),\n update: task =>\n requests.put(`/tasks/${task.id}`, { task: Object.assign({}, task, { id: undefined } )}),\n complete: id =>\n requests.del(`/tasks/${id}`),\n}\n\nconst Schedule = {\n all: (from, to) =>\n requests.get(`/works?from=${from}&to=${to}`),\n summary: (from, to) =>\n requests.get(`/works/summary?from=${from}&to=${to}`),\n availability: (from, to) =>\n requests.get(`/works/availability?from=${from}&to=${to}`),\n create: work =>\n requests.post('/works', { work }),\n create_multiple: work =>\n requests.post('/works/batches', { works: work }),\n remove: id =>\n requests.del(`/works/${id}`),\n remove_multiple: work =>\n requests.del('/works/batches', { works: work }),\n update: work =>\n requests.put(`/works/${work.id}`, { work: Object.assign({}, work, { id: undefined } )}),\n transition_state: (id, state) =>\n requests.post(`/works/${id}/state`, { state: state }),\n rollback_transition_state: (id) =>\n requests.del(`/works/${id}/state`)\n}\n\nconst Subscription = {\n create: (token,annual) =>\n requests.post('/subscriptions', { stripeToken: token, annual: annual }),\n remove: id =>\n requests.del(`/subscriptions/${id}`),\n extend: id =>\n requests.put(`/subscriptions/${id}/extend`),\n}\n\nconst PaymentMethod = {\n create: token =>\n requests.post('/payment_methods', { stripeToken: token })\n}\n\nconst Month = {\n show: (month, year) =>\n requests.get(`/month/${month}/${year}`)\n}\n\nconst Year = {\n show: (year) =>\n requests.get(`/year/${year}`)\n}\n\nconst AdminUsers = {\n all: queryString =>\n requests.get('/admin/users?' + queryString),\n show: id =>\n requests.get(`/admin/users/${id}`),\n masquerade: id =>\n requests.get(`/users/masquerade/${id}`),\n revertMasquerade: () =>\n requests.get(`/users/masquerade/back`)\n}\n\nexport default {\n Auth,\n Clients,\n Projects,\n Invoices,\n InvoicePayments,\n Schedule,\n Tasks,\n Month,\n Year,\n Password,\n PaymentMethod,\n Subscription,\n Unsubscribe,\n AdminUsers,\n setToken: _token => { token = _token; }\n};\n","import {\n LOGIN,\n REGISTER,\n DEMO_REGISTER,\n LOGIN_PAGE_UNLOADED,\n REGISTER_PAGE_UNLOADED,\n PASSWORD_FORGET,\n PASSWORD_RESET,\n UPDATE_FIELD_AUTH,\n CHECK_UNSUBSCRIBE_TOKEN,\n UNSUBSCRIBE_UNLOADED,\n UNSUBSCRIBE\n} from '../constants/actionTypes';\n\nexport default (state = {}, action) => {\n switch (action.type) {\n case LOGIN:\n //console.log(action);\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n inProgress: false\n };\n }\n case REGISTER:\n //console.log(action);\n return {\n ...state,\n inProgress: false,\n errors: action.error ? action.payload.errors : null\n };\n case DEMO_REGISTER:\n //console.log(action);\n return {\n ...state,\n inProgress: false,\n errors: action.error ? action.payload.errors : null\n };\n case PASSWORD_FORGET:\n //console.log(action);\n return {\n ...state,\n inProgress: false,\n message: action.error ? null : 'Thanks! Please check your email account for a link to reset your password.',\n errors: action.error ? action.payload.errors : null\n };\n case PASSWORD_RESET:\n //console.log(action);\n return {\n ...state,\n inProgress: false,\n errors: action.error ? action.payload.errors : null\n };\n case LOGIN_PAGE_UNLOADED:\n //console.log(action);\n case REGISTER_PAGE_UNLOADED:\n //console.log(action);\n return {};\n case UPDATE_FIELD_AUTH:\n //console.log(action);\n return { ...state, [action.key]: action.value };\n case CHECK_UNSUBSCRIBE_TOKEN:\n //console.log(action);\n return {\n ...state,\n inProgress: false,\n unsubscribe_email: action.error ? undefined : action.payload.body.email,\n unsubscribed: undefined\n };\n case UNSUBSCRIBE:\n //console.log(action);\n return {\n ...state,\n inProgress: false,\n unsubscribe_email: action.error ? state.unsubscribe_email : undefined,\n unsubscribed: action.error ? true : false,\n errors: action.error ? ['Sorry there was a problem unsubscribing, please contact hello@heyslate.com and we will be able to help you.'] : null\n };\n case UNSUBSCRIBE_UNLOADED:\n //console.log(action);\n return {\n ...state,\n inProgress: false,\n unsubscribe_email: undefined,\n unsubscribed: undefined\n };\n default:\n //console.log(action);\n return state;\n }\n\n return state;\n};\n","export const APP_LOAD = 'APP_LOAD';\nexport const ASYNC_END = 'ASYNC_END';\nexport const ASYNC_START = 'ASYNC_START';\nexport const CHANGE_NEXT_MONTH = 'CHANGE_NEXT_MONTH';\nexport const CHANGE_PREV_MONTH = 'CHANGE_PREV_MONTH';\nexport const CLIENT_CREATE = 'CLIENT_CREATE';\nexport const CLIENT_IN_FOCUS = 'CLIENT_IN_FOCUS';\nexport const CLIENT_REMOVE = 'CLIENT_REMOVE';\nexport const CLIENT_UPDATE = 'CLIENT_UPDATE';\nexport const CLIENT_LOADED = 'CLIENT_LOADED';\nexport const CLIENT_UNLOADED = 'CLIENT_UNLOADED';\nexport const CLIENT_SCHEDULE_LOADED = 'CLIENTS_SCHEDULE_LOADED';\nexport const CLIENTS_PAGE_LOADED = 'CLIENTS_PAGE_LOADED';\nexport const CLIENTS_PAGE_UNLOADED = 'CLIENTS_PAGE_UNLOADED';\nexport const PROJECT_CREATE = 'PROJECT_CREATE';\nexport const PROJECT_REMOVE = 'PROJECT_REMOVE';\nexport const PROJECT_UPDATE = 'PROJECT_UPDATE';\nexport const PROJECT_LOADED = 'PROJECT_LOADED';\nexport const PROJECT_UNLOADED = 'PROJECT_UNLOADED';\nexport const PROJECTS_PAGE_LOADED = 'PROJECTS_PAGE_LOADED';\nexport const PROJECTS_PAGE_UNLOADED = 'PROJECTS_PAGE_UNLOADED';\nexport const HOME_PAGE_LOADED = 'HOME_PAGE_LOADED';\nexport const HOME_PAGE_UNLOADED = 'HOME_PAGE_UNLOADED';\nexport const LOAD_DAYS = 'LOAD_DAYS';\nexport const LOGIN = 'LOGIN';\nexport const LOGIN_PAGE_UNLOADED = 'LOGIN_PAGE_UNLOADED';\nexport const LOGOUT = 'LOGOUT';\nexport const DEMO_LOGOUT = 'DEMO_LOGOUT';\nexport const MONTH_CACHED = 'MONTH_CACHED';\nexport const MONTH_LOADED = 'MONTH_LOADED';\nexport const MONTH_UNLOADED = 'MONTH_UNLOADED';\nexport const REDIRECT = 'REDIRECT';\nexport const DEMO_REGISTER = 'DEMO_REGISTER';\nexport const REGISTER = 'REGISTER';\nexport const REGISTER_PAGE_UNLOADED = 'REGISTER_PAGE_UNLOADED';\nexport const REQUEST_CLIENTS = 'REQUEST_CLIENTS';\nexport const REQUEST_PROJECTS = 'REQUEST_PROJECTS';\nexport const REQUEST_YEAR = 'REQUEST_YEAR';\nexport const SCHEDULE_BACK = 'SCHEDULE_BACK';\nexport const SCHEDULE_CREATE = 'SCHEDULE_CREATE';\nexport const SCHEDULE_FORWARD = 'SCHEDULE_FORWARD';\nexport const SCHEDULE_LOADED = 'SCHEDULE_LOADED';\nexport const SCHEDULE_MONTH = 'SCHEDULE_MONTH';\nexport const SCHEDULE_SUMMARY = 'SCHEDULE_SUMMARY';\nexport const DESTROY_SCHEDULE_SUMMARY = 'DESTROY_SCHEDULE_SUMMARY';\nexport const SCHEDULE_AVAILABILITY = 'SCHEDULE_AVAILABILITY';\nexport const DESTROY_SCHEDULE_AVAILABILITY = 'DESTROY_SCHEDULE_AVAILABILITY';\nexport const SCHEDULE_REMOVE = 'SCHEDULE_REMOVE';\nexport const SCHEDULE_RESET = 'SCHEDULE_RESET';\nexport const SCHEDULE_UNLOADED = 'SCHEDULE_UNLOADED';\nexport const SCHEDULE_UPDATE = 'SCHEDULE_UPDATE';\nexport const SCHEDULE_INVOICE = 'SCHEDULE_INVOICE';\nexport const SCHEDULE_UNDO_INVOICE = 'SCHEDULE_UNDO_INVOICE';\nexport const SET_PAGE = 'SET_PAGE';\nexport const SETTINGS_PAGE_UNLOADED = 'SETTINGS_PAGE_UNLOADED';\nexport const SETTINGS_UPDATE = 'SETTINGS_UPDATE';\nexport const SETTINGS_SAVED = 'SETTINGS_SAVED';\nexport const COUNTRY_SAVED = 'COUNTRY_SAVED';\nexport const SWITCH_MONTH = 'SWITCH_MONTH';\nexport const TASK_COMPLETE = 'TASK_COMPLETE';\nexport const TASK_CREATE = 'TASK_CREATE';\nexport const TASK_UPDATE = 'TASK_UPDATE';\nexport const TASKS_PAGE_LOADED = 'TASKS_PAGE_LOADED';\nexport const TASKS_PAGE_UNLOADED = 'TASKS_PAGE_UNLOADED';\nexport const UPDATE_FIELD_AUTH = 'UPDATE_FIELD_AUTH';\nexport const YEAR_LOADED = 'YEAR_LOADED';\nexport const YEAR_UNLOADED = 'YEAR_UNLOADED';\nexport const PASSWORD_RESET = 'PASSWORD_RESET';\nexport const PASSWORD_RESET_PAGE_UNLOADED = 'PASSWORD_RESET_PAGE_UNLOADED';\nexport const PASSWORD_FORGET = 'PASSWORD_FORGET';\nexport const PASSWORD_FORGET_PAGE_UNLOADED = 'PASSWORD_FORGET_PAGE_UNLOADED';\nexport const SUBSCRIPTION_CREATE = 'SUBSCRIPTION_CREATE';\nexport const SUBSCRIPTION_CANCEL = 'SUBSCRIPTION_CANCEL';\nexport const SUBSCRIPTION_REQUIRED = 'SUBSCRIPTION_REQUIRED';\nexport const SUBSCRIPTION_EXTEND = 'SUBSCRIPTION_EXTEND';\nexport const PAYMENT_METHOD_CREATE = 'PAYMENT_METHOD_CREATE';\nexport const PAYMENT_METHOD_UPDATE = 'PAYMENT_METHOD_UPDATE';\nexport const UNSUBSCRIBE = 'UNSUBSCRIBE';\nexport const UNSUBSCRIBE_UNLOADED = 'UNSUBSCRIBE_UNLOADED';\nexport const CHECK_UNSUBSCRIBE_TOKEN = 'CHECK_UNSUBSCRIBE_TOKEN';\nexport const REQUEST_ADMIN_USERS = 'REQUEST_ADMIN_USERS';\nexport const ADMIN_USERS_PAGE_LOADED = 'ADMIN_USERS_PAGE_LOADED';\nexport const ADMIN_USERS_PAGE_UNLOADED = 'ADMIN_USERS_PAGE_UNLOADED';\nexport const FORBIDDEN = 'FORBIDDEN'\nexport const ADMIN_USER_LOADED = 'ADMIN_USER_LOADED';\nexport const ADMIN_USER_UNLOADED = 'ADMIN_USER_UNLOADED';\nexport const SET_ERRORS = 'SET_ERRORS';\nexport const OPEN_PROJECTS_OVERLAY = 'OPEN_PROJECTS_OVERLAY';\nexport const CLOSE_PROJECTS_OVERLAY = 'CLOSE_PROJECTS_OVERLAY';\nexport const OPEN_SCHEDULE_OVERLAY = 'OPEN_SCHEDULE_OVERLAY';\nexport const CLOSE_SCHEDULE_OVERLAY = 'CLOSE_SCHEDULE_OVERLAY';\nexport const OPEN_CLIENTS_OVERLAY = 'OPEN_CLIENTS_OVERLAY';\nexport const CLOSE_CLIENTS_OVERLAY = 'CLOSE_CLIENTS_OVERLAY';\nexport const OPEN_SETTINGS_OVERLAY = 'OPEN_SETTINGS_OVERLAY';\nexport const CLOSE_SETTINGS_OVERLAY = 'CLOSE_SETTINGS_OVERLAY';\nexport const MASQUERADE='MASQUERADE'\nexport const MASQUERADE_REVOKE='MASQUERADE_REVOKE'\nexport const REQUEST_INVOICES = 'REQUEST_INVOICES'\nexport const INVOICE_CREATE = 'INVOICE_CREATE'\nexport const INVOICE_LOADED = 'INVOICE_LOADED'\nexport const INVOICE_UNLOADED = 'INVOICE_UNLOADED'\nexport const INVOICE_UPDATE = 'INVOICE_UPDATE'\nexport const INVOICE_REMOVE = 'INVOICE_REMOVE'\nexport const INVOICE_EMAIL = 'INVOICE_EMAIL'\nexport const INVOICES_PAGE_LOADED = 'INVOICES_PAGE_LOADED'\nexport const INVOICES_PAGE_UNLOADED = 'INVOICES_PAGE_UNLOADED'\nexport const INVOICE_PAYMENT_CREATE = 'INVOICE_PAYMENT_CREATE'\nexport const OPEN_INVOICES_OVERLAY = 'OPEN_INVOICES_OVERLAY'\nexport const CLOSE_INVOICES_OVERLAY = 'CLOSE_INVOICES_OVERLAY'\nexport const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION'\nexport const HIDE_NOTIFICATION = 'HIDE_NOTIFICATION'\nexport const OPEN_OVERLAY = 'OPEN_OVERLAY';\nexport const CLOSE_OVERLAY = 'CLOSE_OVERLAY';\nexport const TIME_SUMMARY = 'TIME_SUMMARY';\nexport const DESTROY_TIME_SUMMARY = 'DESTROY_TIME_SUMMARY';\nexport const PAYMENT_SUMMARY = 'PAYMENT_SUMMARY';\nexport const DESTROY_PAYMENT_SUMMARY = 'DESTROY_PAYMENT_SUMMARY';","import {\n APP_LOAD,\n FORBIDDEN,\n REDIRECT,\n LOGOUT,\n DEMO_LOGOUT,\n SETTINGS_SAVED,\n COUNTRY_SAVED,\n LOGIN,\n REGISTER,\n DEMO_REGISTER,\n HOME_PAGE_UNLOADED,\n SETTINGS_PAGE_UNLOADED,\n REGISTER_PAGE_UNLOADED,\n SWITCH_MONTH,\n CHANGE_NEXT_MONTH,\n CHANGE_PREV_MONTH,\n PASSWORD_RESET,\n SUBSCRIPTION_CREATE,\n SUBSCRIPTION_CANCEL,\n SUBSCRIPTION_EXTEND,\n SUBSCRIPTION_REQUIRED,\n PAYMENT_METHOD_CREATE,\n PAYMENT_METHOD_UPDATE,\n ASYNC_START,\n ASYNC_END,\n SET_ERRORS,\n SHOW_NOTIFICATION,\n HIDE_NOTIFICATION,\n MASQUERADE,\n MASQUERADE_REVOKE,\n INVOICE_CREATE,\n OPEN_OVERLAY,\n CLOSE_OVERLAY,\n INVOICE_EMAIL\n} from '../constants/actionTypes';\nimport dateFns from 'date-fns';\nimport { getUserLocale } from 'get-user-locale';\n\nconst defaultState = {\n token: null\n};\n\nexport default (state = defaultState, action) => {\n switch (action.type) {\n case APP_LOAD: {\n //console.log(action)\n\n let currentMonth = dateFns.startOfMonth(dateFns.parse(new Date()));\n let activeMonth;\n\n if(window.location.pathname.indexOf('/month/') >= 0) {\n\n let months = {\n 'january' : '01',\n 'february' : '02',\n 'march' : '03',\n 'april' : '04',\n 'may' : '05',\n 'june' : '06',\n 'july' : '07',\n 'august' : '08',\n 'september' : '09',\n 'october' : '10',\n 'november' : '11',\n 'december' : '12'\n }\n\n let url_date = window.location.pathname.match(/\\/month\\/(.*)\\/([0-9]{4})/);\n let date = dateFns.parse(url_date[2] + '-' + months[url_date[1]] + '-01');\n\n activeMonth = dateFns.startOfMonth(date);\n\n } else {\n\n activeMonth = currentMonth;\n\n }\n\n return {\n ...state,\n token: action ? (action.token || null) : null,\n appLoaded: true,\n currentUser: action ? (action.payload ? action.payload.body : null) : null,\n subscription: action ? (action.payload ? (action.payload.body ? action.payload.body.subscription : null) : null) : null,\n activeMonth: activeMonth,\n nextMonth: dateFns.startOfMonth(dateFns.addMonths(activeMonth,1)),\n prevMonth: dateFns.startOfMonth(dateFns.subMonths(activeMonth,1)),\n currentMonth: currentMonth,\n locale: getUserLocale()\n };\n }\n case REDIRECT:\n return {\n ...state,\n redirectTo: null\n };\n case MASQUERADE:\n //console.log(action)\n return {\n ...state,\n redirectTo: '/',\n currentUser: action.payload.body\n };\n case MASQUERADE_REVOKE:\n //console.log(action)\n return {\n ...state,\n redirectTo: '/',\n currentUser: action.payload.body\n };\n case FORBIDDEN:\n //console.log(action)\n return {\n ...state,\n redirectTo: '/'\n };\n case LOGOUT:\n //console.log(action)\n return { ...state, redirectTo: '/', token: null, currentUser: null };\n case DEMO_LOGOUT:\n //console.log(action)\n return {\n ...state,\n redirectTo: '/register',\n token: null,\n currentUser: null,\n email: action.email,\n name: action.name\n };\n case SETTINGS_SAVED:\n //console.log(action)\n return {\n ...state,\n //redirectTo: action.error ? '/' : '/',\n currentUser: action.error ? state.currentUser : action.payload.body\n };\n case COUNTRY_SAVED:\n //console.log(action)\n return {\n ...state,\n redirectTo: action.error ? '/settings/billing' : '/settings/billing',\n currentUser: action.error ? state.currentUser : action.payload.body\n };\n case PASSWORD_RESET:\n case LOGIN:\n //console.log(action)\n return {\n ...state,\n redirectTo: action.error ? undefined : '/month/' + dateFns.format(state.currentMonth, 'MMMM/YYYY').toLowerCase(),\n token: action.error ? null : action.token,\n currentUser: action.error ? null : action.payload,\n subscription: action.error ? null : action.payload.subscription\n };\n case REGISTER:\n //console.log(action)\n return {\n ...state,\n redirectTo: action.error ? undefined : '/month/' + dateFns.format(state.currentMonth, 'MMMM/YYYY').toLowerCase(),\n //redirectTo: action.error ? undefined : '/settings/billing',\n token: action.error ? null : action.token,\n currentUser: action.error ? null : action.payload,\n subscription: action.error ? null : action.payload.subscription\n };\n case DEMO_REGISTER:\n //console.log(action)\n return {\n ...state,\n //redirectTo: action.error ? undefined : '/month/' + dateFns.format(state.currentMonth, 'MMMM/YYYY').toLowerCase(),\n redirectTo: action.error ? undefined : '/',\n token: action.error ? null : action.token,\n currentUser: action.error ? null : action.payload,\n subscription: action.error ? null : action.payload.subscription\n };\n case SUBSCRIPTION_CANCEL:\n //console.log(action)\n return {\n ...state,\n redirectTo: '/settings',\n subscription: action.error ? state.subscription : null\n };\n case SUBSCRIPTION_EXTEND:\n //console.log(action.payload.body)\n return {\n ...state,\n subscription: action.error ? null : action.payload.body\n };\n case SUBSCRIPTION_CREATE:\n case PAYMENT_METHOD_CREATE:\n return {\n ...state,\n //redirectTo: action.error ? undefined : '/month/' + dateFns.format(state.currentMonth, 'MMMM/YYYY').toLowerCase(),\n redirectTo: action.error ? undefined : '/settings',\n subscription: action.error ? null : action.payload.body\n };\n case PAYMENT_METHOD_UPDATE:\n return {\n ...state,\n redirectTo: action.error ? undefined : '/settings',\n subscription: action.error ? null : action.payload.body\n };\n case SUBSCRIPTION_REQUIRED:\n // console.log(action)\n return {\n ...state,\n redirectTo: action.payload ? undefined : '/settings/billing'\n };\n case HOME_PAGE_UNLOADED:\n case SETTINGS_PAGE_UNLOADED:\n case REGISTER_PAGE_UNLOADED:\n case SWITCH_MONTH:\n //console.log(action)\n return {\n ...state,\n activeMonth: action.month,\n redirectTo: null\n };\n case CHANGE_NEXT_MONTH:\n //console.log(action)\n return {\n ...state,\n nextMonth: dateFns.addMonths(action.month, 1)\n };\n case CHANGE_PREV_MONTH:\n //console.log(action)\n return {\n ...state,\n prevMonth: dateFns.subMonths(action.month, 1)\n };\n case SET_ERRORS:\n //console.log(action)\n return {\n ...state,\n errors: action.errors\n };\n case SHOW_NOTIFICATION:\n console.log(action)\n return {\n ...state,\n notification: action.payload\n };\n case HIDE_NOTIFICATION:\n //console.log(action)\n return {\n ...state,\n notification: false\n };\n case ASYNC_START:\n //console.log( action )\n return {\n ...state,\n loading: true\n };\n case ASYNC_END:\n //console.log( action )\n return {\n ...state,\n loading: false\n };\n case OPEN_OVERLAY:\n return {\n ...state,\n overlay: true\n };\n case CLOSE_OVERLAY:\n return {\n ...state,\n overlay: false\n };\n case INVOICE_CREATE:\n //console.log( action )\n if(action.error){\n return state;\n }else{\n return {\n ...state,\n redirectTo: '/invoices/' + action.payload.body.id + '/edit'\n };\n }\n case INVOICE_EMAIL:\n if(action.error){\n return state;\n }else{\n return {\n ...state,\n redirectTo: '/invoices'\n };\n }\n default:\n return state;\n }\n};\n","import {\n HOME_PAGE_LOADED,\n HOME_PAGE_UNLOADED\n} from '../constants/actionTypes';\n\nexport default (state = {}, action) => {\n switch (action.type) {\n //console.log(action)\n case HOME_PAGE_LOADED:\n return {\n ...state\n };\n case HOME_PAGE_UNLOADED:\n //console.log(action)\n return {};\n default:\n //console.log(action)\n return state;\n }\n};\n","import {\n REQUEST_CLIENTS,\n CLIENT_CREATE,\n CLIENT_LOADED,\n CLIENT_UNLOADED,\n CLIENT_UPDATE,\n CLIENT_REMOVE,\n CLIENT_IN_FOCUS,\n CLIENTS_PAGE_LOADED,\n CLIENTS_PAGE_UNLOADED,\n OPEN_CLIENTS_OVERLAY,\n CLOSE_CLIENTS_OVERLAY\n} from '../constants/actionTypes';\n\nexport default (state = {}, action) => {\n\n switch (action.type) {\n case REQUEST_CLIENTS:\n //console.log(action)\n return {\n ...state,\n isFetching: true\n }\n case CLIENTS_PAGE_LOADED:\n //console.log(action)\n return {\n ...state,\n clients: action.payload.body,\n //isFetching: false\n };\n case CLIENT_IN_FOCUS:\n //console.log(action)\n return {\n ...state,\n currentClient: action.client_id\n };\n case CLIENTS_PAGE_UNLOADED:\n //console.log(action)\n return {\n ...state\n };\n case CLIENT_LOADED:\n //console.log(action)\n return {\n ...state,\n client: action.payload.body,\n isFetching: false\n };\n case CLIENT_UNLOADED:\n //console.log(action)\n return {\n ...state,\n client: false,\n work: false\n };\n case CLIENT_CREATE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n clients: [...state.clients, action.payload.body],\n };\n };\n case CLIENT_UPDATE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n client: action.payload.body,\n clients: state.clients.map(function(value, index, arr){\n return value.id === action.payload.body.id ? action.payload.body : value\n })\n };\n };\n case CLIENT_REMOVE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n clients: [...state.clients].filter(function(value, index, arr){\n return value.id !== action.payload.body.id;\n }),\n overlay: false,\n project: false,\n errors: false\n };\n };\n case OPEN_CLIENTS_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: true\n }\n case CLOSE_CLIENTS_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: false,\n errors: false\n }\n default:\n //console.log(action);\n return state;\n }\n};\n","import {\n REQUEST_PROJECTS,\n PROJECT_CREATE,\n PROJECT_LOADED,\n PROJECT_UNLOADED,\n PROJECT_UPDATE,\n PROJECT_REMOVE,\n PROJECTS_PAGE_LOADED,\n PROJECTS_PAGE_UNLOADED,\n OPEN_PROJECTS_OVERLAY,\n CLOSE_PROJECTS_OVERLAY\n} from '../constants/actionTypes';\n\nexport default (state = {}, action) => {\n\n switch (action.type) {\n case REQUEST_PROJECTS:\n //console.log(action)\n return {\n ...state,\n isFetching: true\n }\n case PROJECTS_PAGE_LOADED:\n //console.log(action)\n return {\n ...state,\n projects: action.payload.body,\n //isFetching: false,\n //errors: false\n };\n case PROJECTS_PAGE_UNLOADED:\n //console.log(action)\n return {\n ...state\n };\n case PROJECT_LOADED:\n //console.log(action)\n return {\n ...state,\n project: action.payload.body,\n isFetching: false\n };\n case PROJECT_UNLOADED:\n //console.log(action)\n return {\n ...state,\n project: false\n };\n case PROJECT_CREATE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n projects: [...state.projects, action.payload.body],\n errors: false\n };\n };\n case PROJECT_UPDATE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n project: action.payload.body,\n projects: state.projects.map(function(value){\n return value.id === action.payload.body.id ? action.payload.body : value\n }),\n errors: false\n };\n };\n case PROJECT_REMOVE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n projects: [...state.projects].filter(function(value){\n return value.id !== action.payload.body.id;\n }),\n overlay: false,\n project: false,\n errors: false\n };\n };\n case OPEN_PROJECTS_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: true\n }\n case CLOSE_PROJECTS_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: false,\n errors: false\n }\n default:\n return state;\n }\n};\n","import {\n REQUEST_INVOICES,\n INVOICE_CREATE,\n INVOICE_LOADED,\n INVOICE_UNLOADED,\n INVOICE_UPDATE,\n INVOICE_REMOVE,\n INVOICE_PAYMENT_CREATE,\n INVOICES_PAGE_LOADED,\n INVOICES_PAGE_UNLOADED,\n OPEN_INVOICES_OVERLAY,\n CLOSE_INVOICES_OVERLAY,\n TIME_SUMMARY,\n DESTROY_TIME_SUMMARY,\n PAYMENT_SUMMARY,\n DESTROY_PAYMENT_SUMMARY\n} from '../constants/actionTypes';\nimport update from 'immutability-helper';\n\nexport default (state = { invoices:[] }, action) => {\n\n switch (action.type) {\n case REQUEST_INVOICES:\n //console.log(action)\n return {\n ...state,\n isFetching: true\n }\n case INVOICES_PAGE_LOADED:\n // console.log(action)\n return {\n ...state,\n invoices: action.payload.body,\n //isFetching: false,\n //errors: false\n };\n case INVOICES_PAGE_UNLOADED:\n //console.log(action)\n return {\n ...state\n };\n case INVOICE_LOADED:\n //console.log(action)\n return {\n ...state,\n invoice: action.payload.body,\n isFetching: false\n };\n case INVOICE_UNLOADED:\n //console.log(action)\n return {\n ...state,\n invoice: false\n };\n case INVOICE_CREATE:\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n invoices: [...state.invoices, action.payload.body],\n errors: false\n };\n };\n case INVOICE_UPDATE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n invoice: action.payload.body,\n invoices: state.invoices.map(function(value){\n return value.id === action.payload.body.id ? action.payload.body : value\n }),\n errors: false\n };\n };\n case INVOICE_REMOVE:\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n invoices: [...state.invoices].filter(function(value){\n return value.id !== action.payload.body.id;\n }),\n overlay: false,\n invoice: false,\n errors: false\n };\n };\n case INVOICE_PAYMENT_CREATE:\n let index = state.invoices.findIndex(invoice => invoice.id === action.payload.body.invoice_id);\n let newData = update(state.invoices, {\n [index]: {\n 'state': {$set: 'paid'},\n }\n })\n return {\n ...state,\n invoices: newData\n }\n case OPEN_INVOICES_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: true\n }\n case CLOSE_INVOICES_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: false,\n errors: false\n }\n case TIME_SUMMARY:\n //console.log(action)\n return {\n ...state,\n summary: action.payload.body\n };\n case DESTROY_TIME_SUMMARY:\n //console.log(action)\n return {\n ...state,\n summary: false\n };\n case PAYMENT_SUMMARY:\n //console.log(action)\n return {\n ...state,\n summary: action.payload.body\n };\n case DESTROY_PAYMENT_SUMMARY:\n //console.log(action)\n return {\n ...state,\n summary: false\n };\n default:\n return state;\n }\n};\n","import {\n TASK_CREATE,\n TASK_UPDATE,\n TASK_COMPLETE,\n TASKS_PAGE_LOADED,\n TASKS_PAGE_UNLOADED,\n} from '../constants/actionTypes';\n\nexport default (state = {}, action) => {\n switch (action.type) {\n case TASKS_PAGE_LOADED:\n // console.log(action)\n return {\n ...state,\n tasks: action.payload.body,\n };\n case TASKS_PAGE_UNLOADED:\n // console.log(action)\n return {};\n case TASK_CREATE:\n // console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n task: action.payload.body,\n tasks: [...state.tasks, action.payload.body],\n };\n };\n case TASK_COMPLETE:\n // console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n task: action.payload.body,\n tasks: [...state.tasks].filter(function(value, index, arr){\n return value.id !== action.payload.body.id;\n })\n };\n };\n case TASK_UPDATE:\n // console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n return {\n ...state,\n tasks: state.tasks.map(function(value, index, arr){\n return value.id === action.payload.body.id ? action.payload.body : value\n })\n };\n };\n default:\n // console.log(action)\n return state;\n }\n};\n","import {\n SETTINGS_SAVED,\n SETTINGS_PAGE_UNLOADED,\n SETTINGS_UPDATE,\n OPEN_SETTINGS_OVERLAY,\n CLOSE_SETTINGS_OVERLAY\n} from '../constants/actionTypes';\n\nconst defaultState = {\n inProgress: false,\n success: false\n};\n\nexport default (state = defaultState, action) => {\n switch (action.type) {\n case SETTINGS_SAVED:\n // console.log(action)\n return {\n ...state,\n inProgress: false,\n success: action.error ? null : true,\n errors: action.error ? action.payload.errors : null\n };\n case SETTINGS_PAGE_UNLOADED:\n // console.log(action)\n return {};\n case SETTINGS_UPDATE:\n // console.log(action)\n return {\n ...state,\n success: false,\n inProgress: true\n };\n case OPEN_SETTINGS_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: true\n }\n case CLOSE_SETTINGS_OVERLAY:\n //console.log(action)\n return {\n ...state,\n overlay: false,\n errors: false\n }\n default:\n // console.log(action)\n return state;\n }\n};\n","import {\n SCHEDULE_RESET,\n SCHEDULE_LOADED,\n SCHEDULE_UNLOADED,\n SCHEDULE_FORWARD,\n SCHEDULE_BACK,\n SCHEDULE_CREATE,\n SCHEDULE_REMOVE,\n SCHEDULE_UPDATE,\n SCHEDULE_MONTH,\n SCHEDULE_SUMMARY,\n DESTROY_SCHEDULE_SUMMARY,\n SCHEDULE_AVAILABILITY,\n DESTROY_SCHEDULE_AVAILABILITY,\n SCHEDULE_INVOICE,\n SCHEDULE_UNDO_INVOICE,\n CLIENT_SCHEDULE_LOADED,\n LOAD_DAYS,\n OPEN_SCHEDULE_OVERLAY,\n CLOSE_SCHEDULE_OVERLAY\n} from '../constants/actionTypes';\nimport dateFns from 'date-fns';\nimport update from 'immutability-helper';\n\nconst defaultState = {\n loading: false\n};\n\nexport default (state = defaultState, action) => {\n\n const arrayToObject = (array) =>\n array.reduce((obj, item) => {\n obj[item.id] = item\n return obj\n }, {})\n\n switch (action.type) {\n case LOAD_DAYS: {\n //console.log(action)\n let currentMonth = dateFns.startOfMonth(dateFns.parse(action.month));\n let nextMonth = dateFns.startOfMonth(dateFns.addMonths(currentMonth, 1));\n let days = [];\n let day = dateFns.startOfMonth(currentMonth);\n while (day <= dateFns.endOfMonth(nextMonth)) {\n days.push({\n key: dateFns.format(day, 'DDMMYY'),\n day: day\n });\n day = dateFns.addDays(day, 1);\n }\n return {\n days: days\n };\n }\n case SCHEDULE_LOADED: {\n if (action.payload.body === undefined){\n return {...state}\n }\n let currentMonth = dateFns.startOfMonth(dateFns.parse(action.month));\n let nextMonth = dateFns.startOfMonth(dateFns.addMonths(currentMonth, 1));\n \n let days = [];\n let day = dateFns.startOfMonth(currentMonth);\n while (day <= dateFns.endOfMonth(nextMonth)) {\n days.push({\n key: dateFns.format(day, 'DDMMYY'),\n day: day\n });\n day = dateFns.addDays(day, 1);\n }\n return {\n ...state,\n work: arrayToObject(action.payload.body.works),\n blackouts: action.payload.body.blackouts\n }\n }\n case CLIENT_SCHEDULE_LOADED:\n //console.log(action)\n return {\n ...state,\n work: arrayToObject(action.payload.body)\n };\n case SCHEDULE_SUMMARY:\n //console.log(action)\n return {\n ...state,\n summary: action.payload.body\n };\n case DESTROY_SCHEDULE_SUMMARY:\n //console.log(action)\n return {\n ...state,\n summary: false\n };\n case SCHEDULE_AVAILABILITY:\n //console.log(action)\n return {\n ...state,\n availability: action.payload.body\n };\n case DESTROY_SCHEDULE_AVAILABILITY:\n //console.log(action)\n return {\n ...state,\n availability: false\n };\n case SCHEDULE_UNLOADED:\n return {\n ...state\n };\n case SCHEDULE_RESET: {\n // console.log(action)\n let currentMonth = dateFns.startOfMonth(dateFns.parse(action.month));\n let nextMonth = dateFns.startOfMonth(dateFns.addMonths(currentMonth, 1));\n let prevMonth = dateFns.startOfMonth(dateFns.subMonths(currentMonth, 1));\n let days = [];\n let day = dateFns.startOfMonth(prevMonth);\n while (day <= dateFns.endOfMonth(nextMonth)) {\n days.push({\n key: dateFns.format(day, 'DDMMYY'),\n day: day\n });\n day = dateFns.addDays(day, 1);\n }\n return {\n work: arrayToObject(action.payload.body.works),\n blackouts: action.payload.body.blackouts,\n days: days,\n currentMonth: currentMonth,\n nextMonth: nextMonth,\n prevMonth: prevMonth\n };\n }\n case SCHEDULE_FORWARD: {\n //console.log(action)\n let next_days = [];\n let day = action.month;\n while (day <= dateFns.endOfMonth(action.month)) {\n next_days.push({\n key: dateFns.format(day, 'DDMMYY'),\n day: day\n });\n day = dateFns.addDays(day, 1);\n }\n let newHash = arrayToObject(action.payload.body.works)\n return {\n ...state,\n work: Object.assign({}, state.work, newHash),\n blackouts: [\n ...state.blackouts,\n ...action.payload.body.blackouts\n ],\n days: [...state.days, next_days].flat(2)\n };\n }\n case SCHEDULE_BACK: {\n //console.log(action)\n let previous_days = [];\n let day = action.month;\n while (day <= dateFns.endOfMonth(action.month)) {\n previous_days.push({\n key: dateFns.format(day, 'DDMMYY'),\n day: day\n });\n day = dateFns.addDays(day, 1);\n }\n let newHash = arrayToObject(action.payload.body.works)\n return {\n ...state,\n work: Object.assign({}, state.work, newHash),\n blackouts: [\n ...state.blackouts,\n ...action.payload.body.blackouts\n ],\n days: [previous_days, ...state.days].flat(2)\n };\n }\n case SCHEDULE_CREATE: {\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n } else {\n\n let newData = state.work;\n\n if (newData) {\n\n // add the new days to the work state\n action.payload.body.works.map((item) => {\n return newData = update(newData, {\n [item.id]: {$set: item }\n })\n })\n\n // update related days\n action.payload.body.related_work_day_prices.map(item => {\n\n // work item in view\n try {\n return newData = update(newData, {\n [item.id]: {\n 'price': {$set: item.price},\n 'price_formatted': {$set: item.price_formatted}\n }\n })\n }\n\n // work item not in view\n catch(error) {\n return false\n }\n\n });\n\n return {\n ...state,\n work: newData,\n availability: false\n };\n\n } else {\n\n return {\n ...state,\n availability: false\n };\n\n }\n\n };\n }\n case SCHEDULE_UPDATE: {\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n\n let newData;\n\n // work item loaded\n try {\n newData = update(state.work, {\n [action.payload.body.id]: {$set: action.payload.body}\n })\n }\n\n // work item not loaded\n catch(error) {\n newData = {\n [action.payload.body.id]: action.payload.body\n }\n }\n\n return {\n ...state,\n work: newData\n };\n\n };\n }\n case SCHEDULE_INVOICE: {\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n \n let newData;\n\n // work item loaded\n try {\n newData = update(state.work, {\n [action.payload.body.id]: {$set: action.payload.body}\n })\n }\n\n // work item not loaded\n catch(error) {\n newData = {\n [action.payload.body.id]: action.payload.body\n }\n }\n\n return {\n ...state,\n work: newData\n };\n\n };\n }\n case SCHEDULE_UNDO_INVOICE: {\n //console.log(action)\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n \n let newData;\n\n // work item loaded\n try {\n newData = update(state.work, {\n [action.payload.body.id]: {$set: action.payload.body}\n })\n }\n\n // work item not loaded\n catch(error) {\n newData = {\n [action.payload.body.id]: action.payload.body\n }\n }\n\n return {\n ...state,\n work: newData\n };\n\n };\n }\n case SCHEDULE_REMOVE:\n //console.log(action);\n if(action.error){\n return {\n ...state,\n errors: action.payload.errors\n };\n }else{\n\n let newData = state.work;\n\n // remove days from the work state\n // https://stackoverflow.com/questions/55436821/using-immutability-helper-with-array-object-map\n action.payload.body.works.map((item) => {\n return newData = update(newData, {$unset: [item.id] })\n })\n\n // update related days:\n action.payload.body.related_work_day_prices.map(item => {\n\n // work item in view\n try {\n return newData = update(newData, {\n [item.id]: {\n 'price': {$set: item.price},\n 'price_formatted': {$set: item.price_formatted}\n }\n })\n }\n\n // work item not in view\n catch(error) {\n return false\n }\n\n });\n\n return {\n ...state,\n work: newData\n };\n };\n case SCHEDULE_MONTH: {\n //console.log(action);\n let nextMonth = dateFns.startOfMonth(dateFns.addMonths(action.month, 1));\n let prevMonth = dateFns.startOfMonth(dateFns.subMonths(action.month, 1));\n return {\n ...state,\n activeMonth: action.month,\n nextMonth: nextMonth,\n prevMonth: prevMonth\n };\n }\n case OPEN_SCHEDULE_OVERLAY:\n //console.log(action);\n return {\n ...state,\n overlay: true\n }\n case CLOSE_SCHEDULE_OVERLAY:\n //console.log(action);\n return {\n ...state,\n overlay: false,\n errors: false\n }\n default: {\n //console.log(action);\n let currentMonth = new Date();\n return {\n ...state,\n currentMonth: currentMonth\n };\n }\n }\n};\n","import {\n MONTH_LOADED,\n MONTH_CACHED\n} from '../constants/actionTypes';\n\nconst defaultState = {\n loading: false\n};\n\nexport default (state = defaultState, action) => {\n\n switch (action.type) {\n case MONTH_LOADED:\n //console.log(action)\n return {\n ...state,\n activeMonth: action.month,\n data: action.payload.body,\n months: {...state.months, [action.month_string]: action.payload.body}\n };\n case MONTH_CACHED:\n //console.log(action)\n return {\n ...state,\n activeMonth: action.month,\n data: action.payload\n };\n default:\n //console.log(action)\n return {\n ...state\n };\n }\n};\n","import {\n REQUEST_YEAR,\n YEAR_LOADED\n} from '../constants/actionTypes';\n\nconst defaultState = {\n isFetching: false\n};\n\nexport default (state = defaultState, action) => {\n\n switch (action.type) {\n case REQUEST_YEAR:\n //console.log(action)\n return {\n ...state,\n isFetching: true\n }\n case YEAR_LOADED:\n //console.log(action)\n return {\n ...state,\n data: action.payload.body,\n isFetching: false\n };\n default:\n // console.log(action)\n return {\n ...state\n };\n }\n};\n","import {\n REQUEST_ADMIN_USERS,\n ADMIN_USERS_PAGE_LOADED,\n ADMIN_USERS_PAGE_UNLOADED,\n ADMIN_USER_LOADED,\n ADMIN_USER_UNLOADED,\n} from '../constants/actionTypes';\n\nexport default (state = {}, action) => {\n\n switch (action.type) {\n case REQUEST_ADMIN_USERS:\n //console.log(action);\n return {\n ...state,\n isFetching: true\n }\n case ADMIN_USERS_PAGE_LOADED:\n //console.log(action);\n return {\n ...state,\n users: action.payload.body,\n isFetching: false\n };\n case ADMIN_USERS_PAGE_UNLOADED:\n //console.log(action);\n return {\n ...state\n };\n case ADMIN_USER_LOADED:\n //console.log(action);\n return {\n ...state,\n user: action.payload.body,\n isFetching: false\n };\n case ADMIN_USER_UNLOADED:\n //console.log(action);\n return {\n ...state,\n user: null\n };\n default:\n //console.log(action);\n return state;\n }\n};\n","import agent from './agent';\nimport {\n APP_LOAD,\n ASYNC_START,\n ASYNC_END,\n LOGIN,\n LOGOUT,\n DEMO_LOGOUT,\n REGISTER,\n DEMO_REGISTER,\n PASSWORD_RESET,\n FORBIDDEN,\n SUBSCRIPTION_REQUIRED\n} from './constants/actionTypes';\n\nconst promiseMiddleware = store => next => action => {\n if (isPromise(action.payload)) {\n store.dispatch({ type: ASYNC_START, subtype: action.type });\n\n const currentView = store.getState().viewChangeCounter;\n const skipTracking = action.skipTracking;\n\n action.payload.then(\n res => {\n const currentState = store.getState()\n if (!skipTracking && currentState.viewChangeCounter !== currentView) {\n return\n }\n //console.log('RESULT', res);\n action.payload = res;\n store.dispatch({ type: ASYNC_END, promise: action.payload });\n store.dispatch(action);\n },\n error => {\n if (error.status === 401){\n store.dispatch({ type: LOGOUT });\n }else if (error.status === 403){\n store.dispatch({ type: FORBIDDEN });\n }else if (error.status === 402){\n store.dispatch({ type: SUBSCRIPTION_REQUIRED });\n }\n\n const currentState = store.getState()\n if (!skipTracking && currentState.viewChangeCounter !== currentView) {\n return\n }\n //console.log('ERROR', error);\n action.error = true;\n action.payload = error.response.body;\n if (!action.skipTracking) {\n store.dispatch({ type: ASYNC_END, promise: action.payload });\n }\n store.dispatch(action);\n }\n );\n\n return;\n }\n\n next(action);\n};\n\nconst localStorageMiddleware = store => next => action => {\n if (action.type === REGISTER || action.type === DEMO_REGISTER || action.type === LOGIN || action.type === PASSWORD_RESET) {\n if (!action.error) {\n var headers = action.payload.headers;\n if(headers.authorization){\n var token = headers.authorization.match(/Bearer (.*)/)[1]\n }\n window.localStorage.setItem('jwt', token);\n agent.setToken(token);\n action.token = token;\n action.payload = action.payload.body;\n }\n } else if (action.type === LOGOUT || action.type === DEMO_LOGOUT) {\n window.localStorage.setItem('jwt', '');\n agent.setToken(null);\n } else if (action.type === APP_LOAD) {\n if(action.error){\n window.localStorage.setItem('jwt', '');\n agent.setToken(null);\n }\n }\n next(action);\n};\n\nfunction isPromise(v) {\n return v && typeof v.then === 'function';\n}\n\n\nexport { promiseMiddleware, localStorageMiddleware }\n","import { createBrowserHistory } from 'history'\nimport { applyMiddleware, compose, createStore } from 'redux'\nimport { routerMiddleware } from 'connected-react-router'\nimport createRootReducer from './reducer'\nimport { promiseMiddleware, localStorageMiddleware } from './middleware';\n\nexport const history = createBrowserHistory()\n\nexport default function configureStore(preloadedState) {\n const store = createStore(\n createRootReducer(history), // root reducer with router state\n preloadedState,\n compose(\n applyMiddleware(\n routerMiddleware(history), // for dispatching history actions\n promiseMiddleware,\n localStorageMiddleware\n // ... other middlewares ...\n ),\n ),\n )\n\n return store\n}\n","import logo from './images/logo.svg';\nimport dashboard from './images/dashboard.svg';\nimport schedule from './images/schedule.svg';\nimport calendar from './images/calendar.svg';\nimport performance from './images/performance.svg';\nimport tasks from './images/tasks.svg';\nimport clients from './images/clients.svg';\nimport settings from './images/settings.svg';\nimport login from './images/login.svg';\nimport logout from './images/logout.svg';\nimport onboarding__00 from './images/onboarding__00.svg';\nimport onboarding__01 from './images/onboarding__01.svg';\nimport onboarding__02 from './images/onboarding__02.svg';\nimport onboarding__03 from './images/onboarding__03.svg';\nimport onboarding__04 from './images/onboarding__04.svg';\nimport onboarding__05 from './images/onboarding__05.svg';\nimport onboarding__06 from './images/onboarding__06.svg';\nexport default {\n logo,\n dashboard,\n schedule,\n calendar,\n performance,\n tasks,\n clients,\n settings,\n login,\n logout,\n onboarding__00,\n onboarding__01,\n onboarding__02,\n onboarding__03,\n onboarding__04,\n onboarding__05,\n onboarding__06\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nclass Tooltip extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n displayTooltip: false\n }\n this.hideTooltip = this.hideTooltip.bind(this)\n this.showTooltip = this.showTooltip.bind(this)\n this.mouseMoved = this.mouseMoved.bind(this)\n }\n\n hideTooltip (event) {\n this.setState({\n displayTooltip: false,\n left: null,\n top: null\n })\n }\n\n showTooltip (event) {\n\n var bounds = event.currentTarget.getBoundingClientRect();\n var x = bounds.left + (bounds.width / 2);\n // var y = bounds.top + (bounds.height / 2);\n\n this.setState({\n displayTooltip: true,\n left: x,\n top: bounds.top\n })\n\n }\n\n mouseMoved (event) {\n var bounds = event.target.getBoundingClientRect();\n var x = event.clientX;// - bounds.left;\n this.setState({left: x, top: bounds.top})\n }\n\n render() {\n let message = this.props.message\n let position = this.props.position\n let size = this.props.size\n\n return (\n \n {this.state.displayTooltip &&\n (\n ReactDOM.createPortal(\n
\n
,\n document.querySelector('main')\n )\n )\n }\n \n {this.props.children}\n
\n \n )\n\n }\n\n}\n\nexport default Tooltip;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport agent from '../agent';\nimport { connect } from 'react-redux';\nimport images from '../images';\nimport dateFns from 'date-fns';\nimport Tooltip from './Tooltip';\n\nimport {\n LOGOUT,\n MASQUERADE\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => ({\n ...state.settings,\n currentUser: state.common.currentUser,\n subscription: state.common.subscription,\n activeMonth: state.common.activeMonth,\n redirectTo: state.common.redirectTo\n});\n\nconst mapDispatchToProps = dispatch => ({\n onClickLogout: (currentUser) => {\n if(currentUser.masquerading){\n dispatch({ type: MASQUERADE, payload: agent.AdminUsers.revertMasquerade() })\n }else{\n dispatch({ type: LOGOUT, payload: agent.Auth.logout() })\n }\n }\n});\n\nconst LoggedOutView = props => {\n if (!props.currentUser) {\n return (\n \n \"Sign\n \n );\n }\n return null;\n};\n\nconst LoggedInView = props => {\n\n if (props.currentUser) {\n\n let trial_days = 30;\n let trial_remaining;\n let trial_remaining_percentage;\n\n if (props.currentUser && !props.currentUser.admin && props.currentUser.state === 'trialing' && props.currentUser.trial_ends_at) {\n trial_remaining = dateFns.differenceInDays(props.currentUser.trial_ends_at, dateFns.parse(Date.now()));\n trial_remaining_percentage = Math.ceil((trial_remaining / trial_days * 100) / 10) * 10;\n\n if(trial_remaining < 0 ) {\n trial_remaining = 0;\n }\n }\n\n return (\n \n
\n \"Slate\"/\n
\n
\n \n \n \n \n \n \n Dashboard\n \n \n \n \n \n \n \n \n \n Schedule\n \n \n \n \n \n \n \n Performance\n \n \n \n \n \n \n \n Clients\n \n \n \n \n \n \n \n Projects\n \n \n \n \n \n \n \n Invoices\n \n \n \n \n \n \n \n Settings\n \n { props.currentUser.admin && (\n \n \n \n \n \n \n Admin\n \n )}\n {trial_remaining >= 0 && (\n \n \n { trial_remaining }\n \n \n )}\n \n \n \n \n \n \n \n { props.onClickLogout(props.currentUser)} }\n className=\"bottom\">\n \n \n \n \n \n Logout\n \n
\n
\n );\n }\n\n return null;\n};\n\nclass Nav extends React.Component {\n\n render() {\n\n if(this.props.currentUser) {\n return (\n \n \n \n )\n }\n\n return (\n \n )\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Nav);\n","import React from 'react';\nimport update from 'immutability-helper';\n\nclass TaskItem extends React.Component {\n\n constructor(props) {\n super();\n\n this.state = {\n id: props.task ? props.task.id : '',\n text: props.task ? props.task.text : ''\n };\n\n }\n\n pushChange = change => {\n this.props.updateTask(change);\n }\n\n updateState = field => ev => {\n\n let newData = update(this.state, {\n [field]: {$set: ev.target.value}\n })\n\n this.pushChange(newData)\n\n // cleanup\n newData = null;\n\n };\n\n render() {\n\n return (\n
  • \n {this.props.removeTask(this.props.task)}}>\n \n
  • \n );\n }\n}\n\nexport default TaskItem;\n","import React from 'react';\nimport TaskItem from './TaskItem';\nimport _ from 'lodash';\n\nconst TaskList = props => {\n if (_.isEmpty(props.tasks, true)) {\n return false\n }\n\n return (\n \n {\n props.tasks.map(task => {\n return (\n \n );\n })\n }\n \n );\n\n};\n\nexport default TaskList;\n","import React from 'react';\n\nclass ListErrors extends React.Component {\n render() {\n const errors = this.props.errors;\n if (errors) {\n return (\n \n );\n } else {\n return null;\n }\n }\n}\n\nexport default ListErrors;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport TaskList from './TaskList';\nimport ListErrors from '../ListErrors';\nimport update from 'immutability-helper';\nimport agent from '../../agent';\nimport {\n TASKS_PAGE_LOADED,\n TASKS_PAGE_UNLOADED,\n TASK_CREATE,\n TASK_COMPLETE,\n TASK_UPDATE\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.tasks,\n token: state.common.token,\n errors: state.tasks.errors\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n onLoad: (payload) =>\n dispatch({ type: TASKS_PAGE_LOADED, payload: payload }),\n onUnload: () =>\n dispatch({ type: TASKS_PAGE_UNLOADED }),\n onSubmitForm: task =>\n dispatch({ type: TASK_CREATE, payload: agent.Tasks.create(task) }),\n removeTask: task =>\n dispatch({ type: TASK_COMPLETE, payload: agent.Tasks.complete(task.id) }),\n updateTask: task =>\n dispatch({ type: TASK_UPDATE, payload: agent.Tasks.update(task) }),\n});\n\nclass TaskForm extends React.Component {\n constructor() {\n super();\n\n this.state = {\n id: '',\n text: ''\n };\n\n this.updateState = field => ev => {\n\n let newData = update(this.state, {\n [field]: {$set: ev.target.value}\n })\n \n this.setState(newData);\n \n // cleanup\n newData = null;\n\n };\n\n this.submitForm = ev => {\n ev.preventDefault();\n\n this.props.onSubmitForm(this.state);\n\n let newData = {\n ...this.state,\n text: ''\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n };\n }\n\n componentWillMount() {\n }\n\n componentWillReceiveProps(nextProps) {\n }\n\n render() {\n return (\n
  • \n \n
    \n \n \n
  • \n );\n }\n}\n\nclass Tasks extends React.Component {\n\n componentWillMount() {\n this.props.onLoad(\n agent.Tasks.all()\n );\n }\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n render() {\n return (\n \n
      \n {!this.props.clients && (\n
    • \n \n Create your first client\n
    • \n )}\n {!this.props.amountAgreed && (\n
    • \n \n Add some work to your schedule\n
    • \n )}\n \n \n \n
    \n
    \n );\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Tasks);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8v4m0 4h.01M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0z\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgError = function SvgError(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgError, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/error.12d30b4b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n fill: \"none\"\n});\n\nvar SvgPositive = function SvgPositive(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgPositive, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/positive.03dd7db5.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n transform: \"translate(3 3)\"\n}, /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12,\n cy: 11,\n r: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 2v13.5C0 16.6045695.8954305 18 2 18h14c1.1045695 0 2-.8954305 2-2V6c0-1.1045695-.8954305-2-2-2H2h0C.8954305 4 0 3.1045695 0 2s.8954305-2 2-2h11\"\n}));\n\nvar SvgPrice = function SvgPrice(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgPrice, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/price.ee7dda8e.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Link } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport _ from 'lodash';\nimport Tasks from '../Tasks/index';\nimport { ResponsiveContainer, ComposedChart, Line, XAxis, Tooltip, ReferenceLine } from 'recharts';\nimport {default as HelpTooltip} from '../Tooltip';\nimport {ReactComponent as ErrorIcon} from '../../images/error.svg';\nimport {ReactComponent as PositiveIcon} from '../../images/positive.svg';\nimport {ReactComponent as PriceIcon} from '../../images/icons/price.svg';\n\nimport agent from '../../agent';\nimport {\n MONTH_LOADED,\n YEAR_LOADED\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.common,\n ...state.clients,\n ...state.projects,\n monthData: state.months.data,\n yearData: state.years.data,\n currentUser: state.common.currentUser,\n currentMonth: state.common.currentMonth,\n currentYear: state.common.currentUser.current_year,\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n loadMonth: (month) => {\n let month_name = dateFns.format(month, 'MMMM').toLowerCase()\n let year = dateFns.format(month, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: month, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n },\n loadYear: (year) => {\n dispatch({ type: YEAR_LOADED, payload: agent.Year.show(year) })\n }\n});\n\nconst CustomTooltip = (props) => {\n\n var formatter = new Intl.NumberFormat( navigator.language, {\n style: 'currency',\n currency: props.currency,\n maximumFractionDigits: 0,\n minimumFractionDigits: 0\n });\n\n if (props.active && props.payload) {\n\n return (\n\n ReactDOM.createPortal(\n
    \n {props.payload[0].payload.name}
    \n {dateFns.isFuture(Date.parse( props.payload[0].payload.name )) && \"Forecast\"} Cumulative Total is {formatter.format(props.payload[0].payload.forecast)}\n
    ,\n document.querySelector('div.status')\n )\n\n )\n\n }\n\n return null;\n\n}\n\nclass Home extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n notifications: true,\n multipleDates: [],\n shift: false,\n selectedKeys: [],\n deleteKeys: [],\n selectorEnabled: true\n }\n\n }\n\n componentWillMount() {\n this.props.loadMonth(this.props.currentMonth)\n this.props.loadYear(this.props.currentUser.current_year)\n }\n\n componentWillUnmount() {\n }\n\n componentDidUpdate() {\n\n }\n\n clearNotifications = (e) => {\n\n this.setState(prevState => ({\n notifications: !prevState.notifications\n }));\n\n }\n\n formatPrice(price) {\n\n return new Intl.NumberFormat(this.props.locale, {\n style: 'currency',\n currency: this.props.currentUser.currency,\n maximumFractionDigits: 0,\n minimumFractionDigits: 0\n }).format(price)\n\n }\n\n render() {\n\n if(this.props.monthData && this.props.yearData && this.props.projects && this.props.clients){\n\n const revenue_data = [];\n let revenue_forecast = 0;\n\n this.props.yearData.month_breakdown.filter(function(item) {\n if( item.cumulative_revenue === 0 && !dateFns.isThisMonth(Date.parse( item.month_name )) && dateFns.isPast(Date.parse( item.month_name )) ) {\n return false;\n }\n return true;\n }).map((item, key) => {\n\n if (item.revenue === 0 || item.revenue < this.props.yearData.monthly_average_revenue)\n revenue_forecast += this.props.yearData.monthly_average_revenue\n else\n revenue_forecast += item.revenue\n\n const date = Date.parse( item.month_date );\n const past = dateFns.isPast(date);\n\n return(\n revenue_data.push({\n key: ++key,\n number: item.month_number,\n month: dateFns.format(date, 'MMM'),\n target: this.props.currentUser.monthly_revenue_target * item.month_number,\n forecast: past ? item.cumulative_revenue : revenue_forecast,\n earned: past ? ( item.cumulative_revenue === 0 ? null : item.cumulative_revenue) : null,\n name: item.month_name\n })\n )\n\n }\n )\n\n // add unscheduled project revenue to forecast\n revenue_forecast += this.props.yearData.unscheduled_project_revenue\n\n // add unscheduled project revenue to last month in year\n revenue_data[revenue_data.length-1].forecast += this.props.yearData.unscheduled_project_revenue\n\n var formatter = new Intl.NumberFormat( navigator.language, {\n style: 'currency',\n currency: this.props.currentUser.currency,\n maximumFractionDigits: 0,\n minimumFractionDigits: 0,\n notation: 'compact'\n });\n\n const forecast = revenue_forecast;\n //const annual_estimate = formatter.format( forecast )\n const annual_estimate_low_range = Math.round( forecast * 0.95 /1000 ) * 1000\n const annual_estimate_high_range = Math.round( forecast * 1.05 /1000 ) * 1000\n const annual_estimate_low_range_string = formatter.format( annual_estimate_low_range )\n const annual_estimate_high_range_string = formatter.format( annual_estimate_high_range )\n\n const in_range = _.inRange(this.props.yearData.yearly_target, annual_estimate_low_range - 1, annual_estimate_high_range + 1)\n\n const next_month_name = dateFns.format(dateFns.addMonths(new Date(), 1), 'MMMM').toLowerCase()\n const next_month = this.props.yearData.month_breakdown.filter(function(item) {\n if( item.month === next_month_name) {\n return true;\n }\n return false;\n })\n\n const risks = {\n \"count\" : 0,\n \"revenue\" : [],\n \"productivity\" : [],\n \"availability\": []\n }\n\n // check if your average monthly revenue lower than target\n if ( this.props.yearData.yearly_target >= forecast || in_range ) {\n risks.revenue.push( in_range ? {\n title: \"Could miss annual target\",\n tooltip: \"It's going to be close if you meet your annual target\"\n } : {\n title: \"Annual target\",\n tooltip: \"We don't think you'll meet your annual target\"\n })\n ++risks.count\n }\n\n // check if you're going to miss target for this month\n if ( this.props.monthData.revenue < this.props.currentUser.monthly_revenue_target ) {\n risks.revenue.push({\n title: this.props.monthData.month_name + \" \" + this.props.monthData.year + \" Target\",\n tooltip: \"We don't think you'll meet your target for \" + this.props.monthData.month_name + \" \" + this.props.monthData.year\n })\n ++risks.count\n }\n\n // check if your day rate is lower than standard\n if ( this.props.yearData.average_day_rate < this.props.currentUser.standard_day_rate ) {\n risks.productivity.push({\n title: \"Avg. day rate is \" + this.props.yearData.average_day_rate_formatted,\n tooltip: \"Your standard day rate is \" + this.props.currentUser.standard_day_rate_formatted\n })\n ++risks.count\n }\n\n // check if you've got enough work scheduled for next month\n if ( next_month[0].revenue < this.props.currentUser.monthly_revenue_target ) {\n risks.revenue.push({\n title: next_month[0].month_name + \" Target\",\n tooltip: \"We don't think you'll meet your target for \" + next_month[0].month_name\n })\n ++risks.count\n }\n\n // check if you've got less than 20% of work booked for the next 2 months\n if ( this.props.yearData.total_productivity_forecast_percentage < 20) {\n risks.productivity.push({\n title: \"Low % of days planned\",\n tooltip: \"You don't have much work scheduled for the future.\"\n })\n ++risks.count\n }\n\n // check if you've worked less than 60% of available days so far this year\n if ( this.props.yearData.total_productivity_percentage < 60) {\n risks.productivity.push({\n title: \"High % of days unpaid\",\n tooltip: \"You haven't worked for a lot of days this year.\"\n })\n ++risks.count\n }\n\n return (\n \n
    \n\n
    \n

    Dashboard

    \n Here’s a summary of how your business is doing\n
    \n\n
    \n\n
    \n\n {this.props.yearData.amount_agreed !== 0 && (\n
    0 && this.props.yearData.amount_agreed !== 0) ? 'message message__issue' : 'message message__success'}>\n\n { (risks.count > 0 && this.props.yearData.amount_agreed !== 0) ? : }\n\n
    { (risks.count > 0 && this.props.yearData.amount_agreed !== 0) ? \"We've spotted a few risks in your business\" : \"Everything looks good, nice work!\"}
    \n\n
    \n )}\n\n
    \n\n
    \n\n

    Reminders

    \n\n \n
    \n\n
    \n\n {( (this.props.yearData.amount_revenue === 0) && (this.props.yearData.amount_agreed === 0) ) ? (\n \n
    \n\n
    \n\n

    Revenue

    \n\n

    Add some work to your schedule to get a breakdown of your revenue.

    \n\n
    \n\n {(this.props.yearData.unscheduled_project_revenue > 0) && (\n
    \n \n You have { this.props.yearData.unscheduled_project_revenue_formatted } from fixed price projects that are yet to be scheduled.\n
    \n )}\n\n
    \n
    \n\n
    \n\n

    Performance

    \n\n

    Add some work to your schedule to get a breakdown of your performance.

    \n\n
    \n\n
    \n
    \n ):(\n \n
    \n\n
    \n\n

    Revenue

    \n\n

    { revenue_forecast < this.props.yearData.yearly_target ?\n in_range ? 'Target Uncertain' : 'Off Target'\n : 'On Target'}

    \n\n { revenue_forecast < this.props.yearData.yearly_target ?\n in_range?\n

    It's going to be tight to meet your annual goal of {this.props.yearData.yearly_target_formatted}.\n We estimate your total annual revenue will be somewhere between {annual_estimate_low_range_string} and {annual_estimate_high_range_string}.

    \n :\n

    We don't think you'll meet your annual goal of {this.props.yearData.yearly_target_formatted} as you're\n averaging {this.props.yearData.monthly_average_revenue_formatted}/month. To get back on track,\n you need to be earning {this.props.yearData.amount_required_each_month_to_now_hit_target_formatted}/month going forward.

    \n :\n

    You’re on target to meet your annual goal of {this.props.yearData.yearly_target_formatted} and\n are averaging {this.props.yearData.monthly_average_revenue_formatted}/month.\n If you keep this up, we estimate your total annual revenue will be {annual_estimate_low_range_string} – {annual_estimate_high_range_string}.

    \n }\n\n
    \n\n
    \n\n

    Risks

    \n\n { risks.revenue.length > 0 ?\n
      \n {risks.revenue.map((item, key) =>\n
    • \n \n { item.title }\n
    • \n )}\n
    \n :\n
      \n
    • \n \n None, looks good\n
    • \n
    \n }\n\n
    \n\n
    \n\n
    \n
    \n
    Estimated Total Annual Revenue
    {annual_estimate_low_range_string} – {annual_estimate_high_range_string}
    \n
    \n
    Target
    \n
    Forecast
    \n
    Cumulative Total
    \n
    \n
    \n\n
    \n \n \n \n \n \n \n \n }/>\n \n \n
    \n\n
    \n\n { this.props.yearData.unscheduled_projects.map((item, key) =>\n
    \n \n You still need to schedule { this.formatPrice(item.remaining) } for the { item.title } project.\n
    \n )}\n\n
    \n\n
    \n\n
    \n\n

    Productivity

    \n\n

    { risks.productivity.length > 0 ? 'Needs Improving' : 'Excellent'}

    \n\n { risks.productivity.length > 1 ?\n

    You’ve only worked {this.props.yearData.total_productivity_percentage}% of the days available to work so far this year\n ({this.props.yearData.number_of_days_worked} out of {this.props.yearData.total_workable_days_to_date}). We recommend finding some new\n clients to help fill this gap in the coming months.

    \n :\n

    You’ve worked over {this.props.yearData.total_productivity_percentage}% of the days available so far this year\n and have worked planned for another {this.props.yearData.total_productivity_forecast_percentage}%.

    \n }\n\n
    \n\n
    \n\n

    Risks

    \n\n { risks.productivity.length > 0 ?\n
      \n {risks.productivity.map((item, key) =>\n
    • \n \n { item.title }\n
    • \n )}\n
    \n :\n
      \n
    • \n \n None, looks good\n
    • \n
    \n }\n\n
    \n\n
    \n\n
    \n {this.props.yearData.month_breakdown.map((item, key) =>\n ${item.productivity}% Productivity`} position={'top'} size={'small'}>\n \n 60 ? 'above' : 'below'}>\n
    \n \n \n )}\n
    \n\n
    \n\n
    \n \n )}\n\n \n\n
    \n\n
    \n\n
    \n );\n } else {\n return (
    )\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Home);\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { scrollPosition } from './Overlay';\n\nexport const Dropdown = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (field, value, persist) => {\n props.onChange(field,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n node.current.offsetParent.addEventListener(\"scroll\", handleScroll);\n\n const dropdown_menu = document.querySelector('#dropdown__menu');\n const position_top = ((node.current.offsetParent.offsetTop + node.current.offsetTop + node.current.offsetHeight + 8) - scrollPosition);\n \n // set default position\n dropdown_menu.style.top = position_top + 'px';\n\n // get bounds now dropdown has default position\n const dropdown_menu_bounds = dropdown_menu.getBoundingClientRect();\n\n // dropdown outside window, recalculate position\n if ( dropdown_menu_bounds.bottom > window.innerHeight ) {\n const position_recalc = ((node.current.offsetParent.offsetTop + node.current.offsetTop - 8) - scrollPosition) - dropdown_menu.offsetHeight;\n dropdown_menu.style.top = position_recalc + 'px';\n }\n\n // finally, show dropdown (to stop position popping effect)\n dropdown_menu.style.visibility = 'visible';\n\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n node.current.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n node.current.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n return (\n
    \n \n {open && (\n ReactDOM.createPortal(\n \n {props.content === 'preferred_billing_unit' && ( // client.preferred_billing_unit\n
    \n handleChange('client.preferred_billing_unit','days')}>By the day
    \n handleChange('client.preferred_billing_unit','hours')}>By the hour
    \n handleChange('client.preferred_billing_unit','projects')}>By the project\n \n ) || props.content === 'rates' && ( // client.day_rate & client.hourly_rate\n
    \n {props.client.preferred_billing_unit === 'days' && (\n
    \n
    \n handleChange('client.day_rate', e.target.value, true)} />\n
    \n ) || props.client.preferred_billing_unit === 'hours' && (\n
    \n
    \n handleChange('client.hourly_rate', e.target.value, true)} />\n
    \n )}\n
    \n )}\n , document.querySelector('.overlay__block:last-child')\n )\n )}\n \n );\n};","'use strict';\n\n// The STRIPE-supported currencies, sorted by value\nexport const currencies = [\n {\n 'value':'',\n 'label':'Popular Currencies',\n 'isDisabled': true\n },\n {\n 'value':'AUD',\n 'label':'Australian Dollar ($)'\n },\n {\n 'value':'CAD',\n 'label':'Canadian Dollar ($)'\n },\n {\n 'value':'CHF',\n 'label':'Swiss Franc (CHF)'\n },\n {\n 'value':'CNY',\n 'label':'Chinese Renminbi Yuan (¥)'\n },\n {\n 'value':'DKK',\n 'label':'Danish Krone (Kr.)'\n },\n {\n 'value':'EUR',\n 'label':'Euro (€)'\n },\n {\n 'value':'GBP',\n 'label':'British Pound (£)'\n },\n {\n 'value':'JPY',\n 'label':'Japanese Yen (¥)'\n },\n {\n 'value':'NOK',\n 'label':'Norwegian Krone (kr)'\n },\n {\n 'value':'SEK',\n 'label':'Swedish Krona (kr)'\n },\n {\n 'value':'USD',\n 'label':'United States Dollar ($)'\n },\n {\n 'value':'',\n 'label':'Other Currencies',\n 'isDisabled': true\n },\n {\n 'value':'AED',\n 'label':'United Arab Emirates Dirham'\n },\n {\n 'value':'AFN',\n 'label':'Afghan Afghani'\n },\n {\n 'value':'ALL',\n 'label':'Albanian Lek'\n },\n {\n 'value':'AMD',\n 'label':'Armenian Dram'\n },\n {\n 'value':'ANG',\n 'label':'Netherlands Antillean Gulden'\n },\n {\n 'value':'AOA',\n 'label':'Angolan Kwanza'\n },\n {\n 'value':'ARS',\n 'label':'Argentine Peso'\n },\n {\n 'value':'AWG',\n 'label':'Aruban Florin'\n },\n {\n 'value':'AZN',\n 'label':'Azerbaijani Manat'\n },\n {\n 'value':'BAM',\n 'label':'Bosnia & Herzegovina Convertible Mark'\n },\n {\n 'value':'BBD',\n 'label':'Barbadian Dollar'\n },\n {\n 'value':'BDT',\n 'label':'Bangladeshi Taka'\n },\n {\n 'value':'BGN',\n 'label':'Bulgarian Lev'\n },\n {\n 'value':'BIF',\n 'label':'Burundian Franc'\n },\n {\n 'value':'BMD',\n 'label':'Bermudian Dollar'\n },\n {\n 'value':'BND',\n 'label':'Brunei Dollar'\n },\n {\n 'value':'BOB',\n 'label':'Bolivian Boliviano'\n },\n {\n 'value':'BRL',\n 'label':'Brazilian Real'\n },\n {\n 'value':'BSD',\n 'label':'Bahamian Dollar'\n },\n {\n 'value':'BWP',\n 'label':'Botswana Pula'\n },\n {\n 'value':'BZD',\n 'label':'Belize Dollar'\n },\n {\n 'value':'CDF',\n 'label':'Congolese Franc'\n },\n {\n 'value':'CLP',\n 'label':'Chilean Peso'\n },\n {\n 'value':'COP',\n 'label':'Colombian Peso'\n },\n {\n 'value':'CRC',\n 'label':'Costa Rican Colón'\n },\n {\n 'value':'CVE',\n 'label':'Cape Verdean Escudo'\n },\n {\n 'value':'CZK',\n 'label':'Czech Koruna'\n },\n {\n 'value':'DJF',\n 'label':'Djiboutian Franc'\n },\n {\n 'value':'DOP',\n 'label':'Dominican Peso'\n },\n {\n 'value':'DZD',\n 'label':'Algerian Dinar'\n },\n {\n 'value':'EGP',\n 'label':'Egyptian Pound'\n },\n {\n 'value':'ETB',\n 'label':'Ethiopian Birr'\n },\n {\n 'value':'FJD',\n 'label':'Fijian Dollar'\n },\n {\n 'value':'FKP',\n 'label':'Falkland Islands Pound'\n },\n {\n 'value':'GEL',\n 'label':'Georgian Lari'\n },\n {\n 'value':'GIP',\n 'label':'Gibraltar Pound'\n },\n {\n 'value':'GMD',\n 'label':'Gambian Dalasi'\n },\n {\n 'value':'GNF',\n 'label':'Guinean Franc'\n },\n {\n 'value':'GTQ',\n 'label':'Guatemalan Quetzal'\n },\n {\n 'value':'GYD',\n 'label':'Guyanese Dollar'\n },\n {\n 'value':'HKD',\n 'label':'Hong Kong Dollar'\n },\n {\n 'value':'HNL',\n 'label':'Honduran Lempira'\n },\n {\n 'value':'HRK',\n 'label':'Croatian Kuna'\n },\n {\n 'value':'HTG',\n 'label':'Haitian Gourde'\n },\n {\n 'value':'HUF',\n 'label':'Hungarian Forint'\n },\n {\n 'value':'IDR',\n 'label':'Indonesian Rupiah'\n },\n {\n 'value':'ILS',\n 'label':'Israeli New Sheqel'\n },\n {\n 'value':'INR',\n 'label':'Indian Rupee'\n },\n {\n 'value':'ISK',\n 'label':'Icelandic Króna'\n },\n {\n 'value':'JMD',\n 'label':'Jamaican Dollar'\n },\n {\n 'value':'KES',\n 'label':'Kenyan Shilling'\n },\n {\n 'value':'KGS',\n 'label':'Kyrgyzstani Som'\n },\n {\n 'value':'KHR',\n 'label':'Cambodian Riel'\n },\n {\n 'value':'KMF',\n 'label':'Comorian Franc'\n },\n {\n 'value':'KRW',\n 'label':'South Korean Won'\n },\n {\n 'value':'KYD',\n 'label':'Cayman Islands Dollar'\n },\n {\n 'value':'KZT',\n 'label':'Kazakhstani Tenge'\n },\n {\n 'value':'LAK',\n 'label':'Lao Kip'\n },\n {\n 'value':'LBP',\n 'label':'Lebanese Pound'\n },\n {\n 'value':'LKR',\n 'label':'Sri Lankan Rupee'\n },\n {\n 'value':'LRD',\n 'label':'Liberian Dollar'\n },\n {\n 'value':'LSL',\n 'label':'Lesotho Loti'\n },\n {\n 'value':'MAD',\n 'label':'Moroccan Dirham'\n },\n {\n 'value':'MDL',\n 'label':'Moldovan Leu'\n },\n {\n 'value':'MGA',\n 'label':'Malagasy Ariary'\n },\n {\n 'value':'MKD',\n 'label':'Macedonian Denar'\n },\n {\n 'value':'MNT',\n 'label':'Mongolian Tögrög'\n },\n {\n 'value':'MOP',\n 'label':'Macanese Pataca'\n },\n {\n 'value':'MRO',\n 'label':'Mauritanian Ouguiya'\n },\n {\n 'value':'MUR',\n 'label':'Mauritian Rupee'\n },\n {\n 'value':'MVR',\n 'label':'Maldivian Rufiyaa'\n },\n {\n 'value':'MWK',\n 'label':'Malawian Kwacha'\n },\n {\n 'value':'MXN',\n 'label':'Mexican Peso'\n },\n {\n 'value':'MYR',\n 'label':'Malaysian Ringgit'\n },\n {\n 'value':'MZN',\n 'label':'Mozambican Metical'\n },\n {\n 'value':'NAD',\n 'label':'Namibian Dollar'\n },\n {\n 'value':'NGN',\n 'label':'Nigerian Naira'\n },\n {\n 'value':'NIO',\n 'label':'Nicaraguan Córdoba'\n },\n {\n 'value':'NPR',\n 'label':'Nepalese Rupee'\n },\n {\n 'value':'NZD',\n 'label':'New Zealand Dollar'\n },\n {\n 'value':'PAB',\n 'label':'Panamanian Balboa'\n },\n {\n 'value':'PEN',\n 'label':'Peruvian Nuevo Sol'\n },\n {\n 'value':'PGK',\n 'label':'Papua New Guinean Kina'\n },\n {\n 'value':'PHP',\n 'label':'Philippine Peso'\n },\n {\n 'value':'PKR',\n 'label':'Pakistani Rupee'\n },\n {\n 'value':'PLN',\n 'label':'Polish Złoty'\n },\n {\n 'value':'PYG',\n 'label':'Paraguayan Guaraní'\n },\n {\n 'value':'QAR',\n 'label':'Qatari Riyal'\n },\n {\n 'value':'RON',\n 'label':'Romanian Leu'\n },\n {\n 'value':'RSD',\n 'label':'Serbian Dinar'\n },\n {\n 'value':'RUB',\n 'label':'Russian Ruble'\n },\n {\n 'value':'RWF',\n 'label':'Rwandan Franc'\n },\n {\n 'value':'SAR',\n 'label':'Saudi Riyal'\n },\n {\n 'value':'SBD',\n 'label':'Solomon Islands Dollar'\n },\n {\n 'value':'SCR',\n 'label':'Seychellois Rupee'\n },\n {\n 'value':'SGD',\n 'label':'Singapore Dollar'\n },\n {\n 'value':'SHP',\n 'label':'Saint Helenian Pound'\n },\n {\n 'value':'SLL',\n 'label':'Sierra Leonean Leone'\n },\n {\n 'value':'SOS',\n 'label':'Somali Shilling'\n },\n {\n 'value':'SRD',\n 'label':'Surinamese Dollar'\n },\n {\n 'value':'STD',\n 'label':'São Tomé and Príncipe Dobra'\n },\n {\n 'value':'SVC',\n 'label':'Salvadoran Colón'\n },\n {\n 'value':'SZL',\n 'label':'Swazi Lilangeni'\n },\n {\n 'value':'THB',\n 'label':'Thai Baht'\n },\n {\n 'value':'TJS',\n 'label':'Tajikistani Somoni'\n },\n {\n 'value':'TOP',\n 'label':'Tongan Paʻanga'\n },\n {\n 'value':'TRY',\n 'label':'Turkish Lira'\n },\n {\n 'value':'TTD',\n 'label':'Trinidad and Tobago Dollar'\n },\n {\n 'value':'TWD',\n 'label':'New Taiwan Dollar'\n },\n {\n 'value':'TZS',\n 'label':'Tanzanian Shilling'\n },\n {\n 'value':'UAH',\n 'label':'Ukrainian Hryvnia'\n },\n {\n 'value':'UGX',\n 'label':'Ugandan Shilling'\n },\n {\n 'value':'UYU',\n 'label':'Uruguayan Peso'\n },\n {\n 'value':'UZS',\n 'label':'Uzbekistani Som'\n },\n {\n 'value':'VND',\n 'label':'Vietnamese Đồng'\n },\n {\n 'value':'VUV',\n 'label':'Vanuatu Vatu'\n },\n {\n 'value':'WST',\n 'label':'Samoan Tala'\n },\n {\n 'value':'XAF',\n 'label':'Central African Cfa Franc'\n },\n {\n 'value':'XCD',\n 'label':'East Caribbean Dollar'\n },\n {\n 'value':'XOF',\n 'label':'West African Cfa Franc'\n },\n {\n 'value':'XPF',\n 'label':'Cfp Franc'\n },\n {\n 'value':'YER',\n 'label':'Yemeni Rial'\n },\n {\n 'value':'ZAR',\n 'label':'South African Rand'\n },\n {\n 'value':'ZMW',\n 'label':'Zambian Kwacha'\n }\n];","export function validateEmail(email) {\n let re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n if ( re.test(email) ) {\n return true;\n } else {\n alert('Please use a valid email address')\n return false;\n }\n}","export function showNotificationWithTimeout(dispatch, text) {\n dispatch({ type: 'SHOW_NOTIFICATION', payload: text})\n setTimeout(() => {\n dispatch({ type: 'HIDE_NOTIFICATION' })\n }, 2000)\n}","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\",\n clipRule: \"evenodd\"\n});\n\nvar SvgLock = function SvgLock(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgLock, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/lock.0891b6f1.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useDispatch, useSelector } from 'react-redux'\nimport agent from '../../agent';\nimport { Link } from 'react-router-dom';\nimport { showNotificationWithTimeout } from '../../components/Notifications';\nimport { get, isEmpty } from 'lodash';\nimport {ReactComponent as LockIcon} from '../../images/lock.svg';\nimport Tooltip from '../Tooltip';\n\nconst ClientOptions = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n let loading = useSelector(state => get(state.common, 'loading', false));\n let notification = useSelector(state => get(state.common, 'notification', false));\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (filter, value, persist) => {\n props.onChange(filter,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n const onStateTransition = (type, invoice, state, message) => {\n props.dispatch({\n type: type,\n payload: agent.Invoices.transition_state(invoice.id, state).then((res) => {\n if(!res.body.errors) {\n showNotificationWithTimeout(props.dispatch, message);\n setOpen(false);\n if(state === 'submitted') {\n props.openOverlay('email_invoice', invoice)\n }\n }\n return res;\n })\n })\n }\n\n useEffect(() => {\n\n var element = node.current;\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.addEventListener(\"scroll\", handleScroll);\n\n const dropdown_menu = document.querySelector('#dropdown__menu');\n const position_top = (element.offsetHeight + 8);\n\n // set default position\n dropdown_menu.style.top = position_top + 'px';\n\n // get bounds now dropdown has default position\n const dropdown_menu_bounds = dropdown_menu.getBoundingClientRect();\n\n // dropdown outside window, recalculate position\n if ( dropdown_menu_bounds.bottom > window.innerHeight ) {\n const position_recalc = dropdown_menu.offsetHeight + 8;\n dropdown_menu.style.top = -Math.abs(position_recalc) + 'px';\n }\n\n // finally, show dropdown (to stop position popping effect)\n dropdown_menu.style.visibility = 'visible';\n\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n const renderSwitch = e => {\n switch(props.client.can_be_deleted){\n case true:\n return (\n <>\n
    {\n props.deleteClient(props.client)\n }} className=\"item\">Delete Client
    \n \n )\n default:\n return (\n <>\n \n
    \n Delete Client\n \n
    \n
    \n \n )\n }\n }\n\n return (\n
    \n \n {open && (\n ReactDOM.createPortal(\n \n {loading && (\n
    \n )}\n
    \n {renderSwitch(props.client.state)}\n
    \n
    , node.current\n )\n )}\n { notification &&
    {notification}
    }\n \n );\n};\n\nexport default ClientOptions;\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport ListErrors from '../ListErrors';\nimport ContentEditable from 'react-contenteditable';\nimport FocusTrap from 'focus-trap-react';\nimport { connect } from 'react-redux';\nimport { _ , isEmpty } from 'lodash';\nimport { TwitterPicker } from 'react-color';\nimport { history } from '../../configureStore';\nimport update from 'immutability-helper';\nimport { Dropdown } from './Dropdown';\nimport agent from '../../agent';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport { components } from 'react-select';\nimport Select from 'react-select';\nimport { currencies } from '../../currencies';\nimport { validateEmail } from '../../components/Validate';\nimport Tooltip from '../../components/Tooltip';\nimport ClientOptions from './ClientOptions';\n\nimport {\n CLIENT_CREATE,\n CLIENT_UPDATE,\n CLIENT_REMOVE,\n PROJECTS_PAGE_LOADED,\n CLOSE_CLIENTS_OVERLAY\n} from '../../constants/actionTypes';\n\nconst Input = ({ autoComplete, ...props }) => ;\nconst DropdownIndicator = props => {\n return (\n \n \n \n )\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n ...state,\n errors: state.clients.errors\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n newClient: client => {\n dispatch({ type: CLIENT_CREATE, payload: agent.Clients.create(client) })\n },\n\n updateClient: client => {\n dispatch({\n type: CLIENT_UPDATE,\n payload: agent.Clients.update(client).then((res) => {\n if(!res.body.errors) {\n dispatch({ type: CLOSE_CLIENTS_OVERLAY })\n // don't do anything if we're on invoices\n if (!history.location.pathname.startsWith('/invoices')) {\n // check if client name has changed\n if (history.location.pathname !== '/clients/' + res.body.slug) {\n history.push('/clients/')\n }\n }\n }\n return res;\n })\n })\n },\n\n transitionState: (client, state) => {\n dispatch({\n type: CLIENT_UPDATE,\n payload: agent.Clients.transition_state(client.id, state).then((res) => {\n if(!res.body.errors) {\n dispatch({ type: CLOSE_CLIENTS_OVERLAY })\n }\n return res;\n })\n })\n },\n\n deleteClient: (client, prompt) => {\n dispatch({\n type: CLIENT_REMOVE,\n payload: agent.Clients.remove(client, prompt).then((res) => {\n if(!res.body.errors) {\n history.push('/clients/')\n dispatch({\n type: PROJECTS_PAGE_LOADED, payload: agent.Projects.all()\n });\n }\n return res;\n })\n })\n },\n\n})\n\nexport let scrollPosition = 0;\n\nclass Overlay extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.clientNameRef = React.createRef();\n this.clientButtonRef = React.createRef();\n this.deleteClientButtonRef = React.createRef();\n\n let client;\n\n if (this.props.overlay === 'new_client') {\n\n var r = ((Math.floor(Math.random() * 255) + 255) / 2);\n var g = ((Math.floor(Math.random() * 255) + 255) / 2);\n var b = ((Math.floor(Math.random() * 255) + 255) / 2);\n var random_colour = 'rgb(' + r + ', ' + g + ', ' + b + ')';\n\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: 'new_client',\n overlay_history: ['new_client'],\n new: true,\n loading: false,\n client: {\n name: '',\n contact_name: '',\n email: '',\n hex_colour: random_colour,\n day_rate: this.props.common.currentUser.standard_day_rate,\n hourly_rate: this.props.common.currentUser.standard_hourly_rate,\n preferred_billing_unit: 'days',\n address: '',\n payment_terms: 30,\n invoice_schedule: 'end_of_month',\n currency: this.props.common.currentUser.currency,\n can_be_deleted: false\n }\n }\n\n } else {\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: this.props.overlay,\n overlay_history: ['client'],\n new: false,\n loading: false,\n client: this.props.client\n }\n\n }\n\n }\n\n componentDidMount(){\n document.addEventListener(\"keydown\", this.keyPress.bind(this), false);\n\n if(this.state.overlay === 'new_client') {\n this.clientNameRef.current.focus()\n }\n\n }\n\n componentWillUnmount(){\n document.removeEventListener(\"keydown\", this.keyPress.bind(this), false);\n scrollPosition = 0\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if(prevState.loading && this.props.clients.errors) {\n\n this.setState({\n loading: false\n })\n\n }\n\n }\n\n keyPress(e, field=false){\n\n // up/down arrow\n if ( field && [38,40].includes( e.keyCode ) ) {\n\n let value = parseInt(e.target.innerText)\n\n // down\n if( e.keyCode === 40 ) {\n\n if (value === 0) {\n return false\n }\n\n --value\n\n }\n\n // up\n if( e.keyCode === 38 ) {\n ++value\n }\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n // enter\n if(e.keyCode === 13) {\n\n const overlay = this.state.overlay;\n\n if (e.target.nodeName === 'TEXTAREA') {\n return false;\n }\n\n if ((overlay === 'client' || overlay === 'new_client') && this.clientButtonRef.current) {\n this.clientButtonRef.current.click()\n }\n\n if (overlay === 'delete' && this.deleteClientButtonRef.current) {\n this.deleteClientButtonRef.current.click()\n }\n\n }\n\n }\n\n formatPrice(price, currency=undefined) {\n\n return new Intl.NumberFormat(this.props.common.locale, {\n style: 'currency',\n currency: currency || this.props.common.currentUser.currency\n }).format(price)\n\n }\n\n numericOnly(value){\n return value.replace(/[^0-9.]/g, '')\n }\n\n setOverlay(e, overlay, direction) {\n\n e.stopPropagation();\n\n let overlay_history;\n\n if (direction === 'back') {\n let array = this.state.overlay_history\n overlay_history = array.splice(0, array.length-1)\n } else {\n overlay_history = this.state.overlay_history.concat(overlay);\n }\n\n this.setState({\n ...this.state, // needed?\n initialLoad: false,\n overlay: overlay,\n overlay_history: overlay_history,\n counter: overlay === 'client' ? 1 : (direction === 'forward' ? this.state.counter + 1 : this.state.counter - 1)\n });\n\n }\n\n updateField(field, value) {\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n updateColour(color) {\n this.updateField('client.hex_colour', color.hex)\n\n this.setState({\n displayColorPicker: false\n })\n\n }\n\n createClient(e, clientName) {\n\n let newData;\n\n // pro-rata day / hourly rate\n if (this.state.client.preferred_billing_unit === 'projects') {\n\n newData = update(this.state.client, {\n day_rate: {$set: this.props.common.currentUser.standard_day_rate },\n hourly_rate: {$set: this.props.common.currentUser.standard_hourly_rate }\n })\n\n }\n\n // pro-rata day rate\n if (this.state.client.preferred_billing_unit === 'hours') {\n\n newData = update(this.state.client, {\n day_rate: {$set: this.state.client.hourly_rate * this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n // pro-rata hourly rate\n if (this.state.client.preferred_billing_unit === 'days') {\n newData = update(this.state.client, {\n hourly_rate: {$set: this.state.client.day_rate / this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n // create the client\n this.props.newClient( newData );\n\n this.setState({\n newData,\n loading: true\n });\n\n let that = this;\n let timer = setInterval(function() {\n\n let new_client = that.props.clients.clients.filter(function (el) {\n return el.name === clientName\n });\n\n if (new_client[0]) {\n\n clearInterval(timer);\n\n history.push('/clients/' + new_client[0].slug);\n\n that.props.closeOverlay(e)\n\n }\n\n }, 100);\n\n // cleanup\n newData = null;\n\n }\n\n updateClient(e, client) {\n\n // validate email if provided\n if( client.email && !validateEmail(client.email) ) {\n return false;\n }\n\n let newData;\n\n // pro-rata day / hourly rate\n if (this.state.client.preferred_billing_unit === 'projects') {\n\n newData = update(this.state.client, {\n day_rate: {$set: this.props.common.currentUser.standard_day_rate },\n hourly_rate: {$set: this.props.common.currentUser.standard_hourly_rate }\n })\n\n }\n\n // pro-rata day rate\n if (this.state.client.preferred_billing_unit === 'hours') {\n\n newData = update(this.state.client, {\n day_rate: {$set: this.state.client.hourly_rate * this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n // pro-rata hourly rate\n if (this.state.client.preferred_billing_unit === 'days') {\n newData = update(this.state.client, {\n hourly_rate: {$set: this.state.client.day_rate / this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n this.props.updateClient( newData );\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n deleteClient = () => {\n\n this.setState({\n overlay: 'delete',\n overlay_history: this.state.overlay_history.concat('delete'),\n counter: this.state.counter + 1,\n });\n\n }\n\n confirmDeleteClient(e, client) {\n\n this.props.deleteClient( this.state.client, this.state.prompt );\n\n }\n\n checkClientName(e, name) {\n\n e.stopPropagation();\n\n if (name === this.state.client.name) {\n\n this.setState({\n can_delete: true,\n prompt: name\n });\n\n } else {\n\n this.setState({\n can_delete: false,\n prompt: name\n });\n\n }\n\n }\n\n handleClick = () => {\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\n };\n\n handleClose = () => {\n this.setState({ displayColorPicker: false })\n };\n\n render() {\n\n const close =\n \n \n \n \n \n\n const price =\n \n \n \n \n \n\n const arrow =\n \n \n \n \n \n\n const client =\n \n \n \n \n \n \n \n \n \n \n\n const archive =\n \n \n \n \n \n \n\n const icon_delete =\n \n \n \n \n \n\n return (\n ReactDOM.createPortal(\n\n \n
    \n
    \n\n {(this.state.overlay_history.includes('client') || this.state.overlay_history.includes('new_client')) && (\n
    \n
    \n this.updateField('client.name', e.target.value)} />\n this.props.closeOverlay(e)}>\n {close}\n \n
    \n\n
    \n
    \n this.keyPress(e)}\n onChange={(e) => this.updateField('client.address', e.target.value)} />\n
    \n
    \n \n
    \n \n \n\n
    \n
    Currency
    \n { return el.value === this.state.client.currency})}\n menuPlacement=\"auto\"\n onChange={(e) => this.updateField('client.currency', e.value)}\n components={{ Input, DropdownIndicator }}\n />\n
    \n\n
    \n
    How do you want to bill {this.state.client.name}?
    \n \n
    \n\n {this.state.client.preferred_billing_unit !== 'projects' && (\n this.state.client.preferred_billing_unit === 'hours' ? (\n
    \n
    How much do you charge per hour?
    \n e.currentTarget.querySelector('[contentEditable]').focus() }>\n {getSymbolFromCurrency(this.state.client.currency)}\n this.keyPress(e)}\n onChange={(e) => this.updateField('client.hourly_rate', this.numericOnly(e.target.value))} />\n
    \n
    \n ) : (\n
    \n
    How much do you charge per day?
    \n e.currentTarget.querySelector('[contentEditable]').focus() }>\n {getSymbolFromCurrency(this.state.client.currency)}\n this.keyPress(e)}\n onChange={(e) => this.updateField('client.day_rate', this.numericOnly(e.target.value))} />\n
    \n
    \n )\n )}\n \n
    \n {this.state.new ? (\n this.createClient(e, this.state.client.name)}>\n
    \n Create Client\n \n ) : (\n
    \n \n this.updateClient(e, this.state.client)}>\n
    \n Update\n \n
    \n )}\n
    \n \n )}\n\n {this.state.overlay_history.includes('delete') && (\n
    \n
    \n

    Delete {this.state.client.name}

    \n this.setOverlay(e, 'client', 'back')}>\n {close}\n \n
    \n
    \n
    \n
    \n

    Deleting this client cannot be undone. This will delete everything related to this client, include any work added to it. There is no going back.

    \n
    \n \n
    \n this.confirmDeleteClient(e, this.state.client)}>\n
    \n Delete {this.state.client.name} (cannot be undone)\n \n
    \n
    \n
    \n
    \n )}\n\n \n\n this.props.closeOverlay(e) }>\n\n \n\n \n
    ,\n document.querySelector('.overlay')\n )\n )\n\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Overlay);\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\n\nlet scrollPosition = 0;\n\nconst Filter = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (filter, value, persist) => {\n props.onChange(filter,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n useEffect(() => {\n var element = node.current;\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.addEventListener(\"scroll\", handleScroll);\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n return (\n
    \n \n {open && (\n ReactDOM.createPortal(\n \n
    \n {props.filters.map(filter => {\n return (\n handleChange('client_state', filter )}>\n { filter }\n
    \n )\n })}\n
    \n , document.querySelector('.filter')\n )\n )}\n \n );\n};\n\nexport default Filter;\n","import React from 'react';\nexport class Landing extends React.Component {\n render() {\n const icon = \n \n \n \n \n ;\n return (!this.props.match.params.slug && (
    \n {icon}\n

    Choose a client...

    \n
    ));\n }\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n className: \"nc-icon-wrapper\",\n fill: \"currentColor\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 4h2v5H7z\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 8,\n cy: 11,\n r: 1\n}));\n\nvar SvgErrorSmall = function SvgErrorSmall(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 16 16\",\n width: 16,\n height: 16,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgErrorSmall, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/error_small.a52e5de5.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n stroke: \"#979797\",\n strokeWidth: 2,\n d: \"M12,2 L6,2 C5.17157288,2 4.42157288,2.33578644 3.87867966,2.87867966 C3.33578644,3.42157288 3,4.17157288 3,5 L3,9.84314575 C3,11.1692282 2.4732158,12.4409978 1.53553391,13.3786797 L0.974873734,14 L12,14 C12.8284271,14 13.5784271,13.6642136 14.1213203,13.1213203 C14.6642136,12.5784271 15,11.8284271 15,11 L15,5 C15,4.17157288 14.6642136,3.42157288 14.1213203,2.87867966 C13.5784271,2.33578644 12.8284271,2 12,2 Z\"\n});\n\nvar SvgNote = function SvgNote(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgNote, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/note.599200d9.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport dateFns from 'date-fns';\nimport Tooltip from '../Tooltip';\nimport {ReactComponent as ErrorIcon} from '../../images/error_small.svg';\nimport {ReactComponent as NoteIcon} from '../../images/note.svg';\n\nexport class Item extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n id: props.day.id,\n state: props.day.state,\n can_be_invoiced: props.day.can_be_invoiced\n };\n }\n render() {\n const day = this.props.day;\n return (
    \n \n {day.project && (\n {day.project_title.substring(0, 2)}\n )}\n \n \n {dateFns.format(day.date, 'ddd D MMMM YYYY')} ({day.unit === 'days' ? 'All-day' : `${day.unit_value_formatted}`})\n {day.note && ()}\n \n
    \n {(day.fixed_price) ? '' : day.state}\n
    \n
    );\n }\n}\n","import React from 'react';\n\nconst Info = (props) => {\n return (\n \n \n \n \n \n );\n}\n\nconst Success = (props) => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst Warning = (props) => {\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport {\n Info,\n Success,\n Warning\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Link } from 'react-router-dom';\nimport dateFns from 'date-fns';\nimport Tooltip from '../Tooltip';\nimport { Info } from '../Info';\nimport { ResponsiveContainer, PieChart, Pie, Cell } from 'recharts';\n\nexport class Project extends React.Component {\n\n render() {\n\n const data = [\n { name: 'worked', value: this.props.project.amount_worked_percentage },\n { name: 'remaining', value: this.props.project.estimate_remaining_percentage }\n ];\n const COLORS = ['#1381FF', '#78b0fd'];\n\n return (\n \n
    \n\n
    \n\n

    {this.props.project.title} ({this.props.project.state})

    \n\n

    {this.props.project.billing_type === 'fixed_price' ? `${this.props.project.billing_type_formatted} of ${this.props.project.amount_formatted}` : this.props.project.billing_type_formatted}

    \n\n {this.props.project.billing_type === 'fixed_price' ? (\n

    Earned {this.props.project.amount_revenue_string}\n {this.props.project.state !== 'finished' && (\n \n )}\n

    \n ) : (\n

    Earned {this.props.project.amount_revenue_string}

    \n )}\n\n
    \n\n {this.props.project.billing_type === 'fixed_price' && (\n \n \n \n \n {\n data.map((entry, index) => )\n }\n \n \n \n \n )}\n\n
    \n \n );\n }\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"currentColor\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.293.293L2.586 3 4 4.414l2-2 2 2L9.414 3 6.707.293a1 1 0 00-1.414 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 9.586l-2-2L2.586 9l2.707 2.707a1 1 0 001.414 0L9.414 9 8 7.586z\"\n}));\n\nvar SvgToggle = function SvgToggle(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 12,\n height: 12,\n viewBox: \"0 0 12 12\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgToggle, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/toggle.c9c6cac0.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2z\",\n stroke: \"currentColor\",\n fill: \"none\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgCalendar = function SvgCalendar(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgCalendar, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/calendar.84160407.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport _ from 'lodash';\nimport { history } from '../../configureStore';\nimport { Item } from './Item';\nimport { Project } from './Project';\nimport {ReactComponent as ErrorIcon} from '../../images/error.svg';\nimport {ReactComponent as PriceIcon} from '../../images/icons/price.svg';\nimport {ReactComponent as ToggleIcon} from '../../images/icons/toggle.svg';\nimport {ReactComponent as CalendarIcon} from '../../images/icons/calendar.svg';\n\nimport agent from '../../agent';\nimport {\n REQUEST_CLIENTS,\n CLIENT_LOADED,\n PROJECTS_PAGE_LOADED\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = (state, ownProps) => (\n {\n loading: state.common.loading\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n\n onLoad: (slug) => {\n dispatch({ type: REQUEST_CLIENTS })\n dispatch({\n type: CLIENT_LOADED,\n payload: agent.Clients.show(slug)\n .then((res) => {\n if(!res.body.errors) {\n // need a way to query by client_id\n dispatch({\n type: PROJECTS_PAGE_LOADED, payload: agent.Projects.all()\n });\n }\n return res;\n })\n })\n },\n\n});\n\nclass Client extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n tab: 'schedule'\n }\n\n }\n\n componentDidMount(){\n\n this.props.onLoad(this.props.match.params.slug)\n\n }\n\n componentDidUpdate(prevProps,prevState){\n\n if(prevProps.match.params.slug !== this.props.match.params.slug) {\n\n this.props.onLoad(this.props.match.params.slug);\n\n }\n\n }\n\n toggleMonth(e, month) {\n e.stopPropagation()\n document.querySelector(`[data-month='${month}']`).classList.toggle('collapsed')\n }\n\n updateClient(e, id, state) {\n this.props.transitionState(id,state)\n }\n\n formatPrice(price) {\n\n return new Intl.NumberFormat(this.props.common.locale, {\n style: 'currency',\n currency: this.props.common.currentUser.currency\n }).format(price)\n\n }\n\n switchTabs(e, tab) {\n\n e.stopPropagation();\n\n this.setState({\n tab: tab\n });\n\n }\n\n render() {\n\n if (this.props.isFetching || !this.props.client) {\n\n return (\n
    \n )\n\n }\n\n const active =\n \n \n \n \n \n \n\n const archived =\n \n \n \n \n \n \n\n // redirect if client not found\n if(!this.props.client) {\n history.push('/clients');\n return false\n }\n\n var project_total = 0;\n let projects = false;\n\n // get client projects\n if(this.props.projects) {\n\n projects = this.props.projects.reduce((result, option) => {\n if (option.client_id === this.props.client.id) {\n\n if(option.state === 'pending') {\n project_total += parseInt(option.amount)\n }\n if(option.state === 'active') {\n project_total += parseInt(option.remaining)\n }\n\n return result.concat(option);\n }\n return result;\n }, []);\n\n }\n \n const work = this.props.client.months_worked.map(hash => {\n\n var work = _.orderBy(_.values(_.pickBy(this.props.client.work_days,function(value, key){\n return value.month_name === hash.month_name;\n })), ['date'],['desc']);\n\n if(!work.length){\n return '';\n }\n\n return (\n \n this.toggleMonth(e, hash.month_name)}>\n

    \n \n { hash.month_name}\n \n

    \n
    \n {hash.amount_worked_string} ({ hash.revenue})\n \n
    \n \n
    \n {work.map(day =>\n \n )}\n
    \n \n )\n\n })\n\n return (\n\n \n
    \n\n
    \n\n
    \n { this.props.client.client_name }\n

    { this.props.client.name }

    \n
    \n\n
    \n
    \n \n

    You've earned {this.props.client.total_revenue} in total

    \n
    \n
    \n\n
    \n
    \n \n

    You've earned {this.props.client.total_revenue_last_3_months} over the last 3 months

    \n
    \n
    \n\n
    \n
    \n \n { this.props.client.billing_type === 'hours' ? (\n

    Your hourly rate is {this.props.client.hourly_rate_formatted}

    \n ) : (\n

    Your day rate is {this.props.client.day_rate_formatted}

    \n )}\n
    \n
    \n\n { this.props.client.next_work_at && (\n
    \n
    \n \n

    Next working on {this.props.client.next_work_at}

    \n
    \n
    \n )}\n\n
    \n
    \n { this.props.client.state === 'active' && (\n \n
    \n { active }\n This client is active.\n
    \n\n this.updateClient(e, this.props.client.id, 'archived')}>\n
    \n Archive Client\n \n\n this.props.openOverlay(e, 'client', this.props.client)}>Edit Client\n
    \n )}\n { this.props.client.state === 'archived' && (\n \n
    \n { archived }\n This client has been archived.\n
    \n \n this.updateClient(e, this.props.client.id, 'active')}>\n
    \n Restart Client\n \n\n this.props.openOverlay(e, 'client', this.props.client)}>Edit Client\n
    \n )}\n
    \n
    \n\n
    \n
    \n this.switchTabs(e, 'schedule')}>Schedule\n this.switchTabs(e, 'projects')}>Projects\n this.switchTabs(e, 'issues')}>Issues\n
    \n
    \n \n
    \n\n {(this.state.tab === 'issues') && (\n this.props.client.issues.length > 0 ? (\n
    \n
    \n

    We've spotted a few things...

    \n
    \n
    \n {this.props.client.issues.map(issue => {\n return (\n
    \n \n {issue.description}\n
    \n );\n })}\n
    \n
    \n ) : (\n
    \n
    \n

    No issues with this client, all good :)

    \n
    \n
    \n )\n )}\n\n {(this.state.tab === 'projects') && (\n projects.length > 0 ? (\n
    \n
    \n

    You've got { this.formatPrice(project_total) } agreed in pending projects

    \n
    \n\n
    \n\n
    \n {projects.map(project =>\n \n )}\n
    \n
    \n ) : (\n
    \n
    \n

    You haven't created any projects for this client yet.

    \n
    \n
    \n )\n )}\n\n {(this.state.tab === 'schedule') && (\n this.props.client.work_days.length === 0 ? (\n
    \n
    \n

    You haven't scheduled any work yet for this client.

    \n
    \n
    \n ) : (\n work\n )\n )}\n\n
    \n\n
    \n\n )\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Client);","import React from 'react';\nimport { Switch, Route } from 'react-router';\nimport { Link } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport Overlay from './Overlay';\nimport Filter from './Filter';\nimport agent from '../../agent';\nimport { Landing } from './Landing';\nimport Client from './Client';\n\nimport {\n CLIENT_UPDATE,\n CLIENT_UNLOADED,\n SCHEDULE_INVOICE,\n SCHEDULE_UNDO_INVOICE,\n OPEN_CLIENTS_OVERLAY,\n CLOSE_CLIENTS_OVERLAY,\n CLIENTS_PAGE_LOADED\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.clients,\n token: state.common.token,\n common: state.common,\n overlay: state.clients.overlay,\n schedule: state.schedule.work,\n projects: state.projects.projects\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n\n transitionState: (client, state) => {\n dispatch({ type: CLIENT_UPDATE, payload: agent.Clients.transition_state(client, state ) })\n },\n\n updateWorkState: (client, day, state) => {\n dispatch({\n type: SCHEDULE_INVOICE,\n payload: agent.Schedule.transition_state(day, state )\n .then((res) => {\n if(!res.body.errors) {\n dispatch({\n type: CLIENT_UPDATE, payload: agent.Clients.update(client)\n });\n }\n return res;\n })\n })\n\n },\n\n rollbackInvoiceWork: (client, day) => {\n dispatch({\n type: SCHEDULE_UNDO_INVOICE,\n payload: agent.Schedule.rollback_transition_state(day)\n .then((res) => {\n if(!res.body.errors) {\n dispatch({\n type: CLIENT_UPDATE, payload: agent.Clients.update(client)\n });\n }\n return res;\n })\n })\n\n },\n\n openOverlay: () => {\n dispatch({ type: OPEN_CLIENTS_OVERLAY });\n },\n\n closeOverlay: () => {\n dispatch({ type: CLOSE_CLIENTS_OVERLAY });\n },\n\n unsetClient: () => {\n dispatch({ type: CLIENT_UNLOADED });\n },\n\n loadClients: () => {\n dispatch({ type: CLIENTS_PAGE_LOADED, payload: agent.Clients.all() })\n }\n\n});\n\nclass Clients extends React.Component {\n\n constructor(props){\n super(props);\n\n this.state = {\n client: false,\n overlay: false,\n client_state: 'All',\n initialLoad: true\n }\n\n this.clientKeyPress = this.clientKeyPress.bind(this);\n this.newClientButtonRef = React.createRef();\n\n }\n\n componentDidMount(){\n document.addEventListener(\"keydown\", this.clientKeyPress);\n\n this.props.loadClients();\n\n if (this.state.initialLoad && this.props.clients && this.props.clients.length === 0) {\n this.newClientButtonRef.current.click()\n this.setState({\n initialLoad: false\n });\n }\n\n }\n\n componentWillUnmount() {\n this.props.unsetClient();\n document.removeEventListener(\"keydown\", this.clientKeyPress);\n }\n\n clientKeyPress(e){\n\n // new client shortcut\n if ( e.keyCode === 78 && !this.state.overlay ) {\n this.openOverlay(e, 'new_client')\n }\n\n }\n\n openOverlay(e, overlay, client=false) {\n\n e.preventDefault();\n e.stopPropagation();\n\n this.setState({\n overlay: overlay,\n client: client\n });\n\n this.props.openOverlay()\n\n }\n\n closeOverlay(e=false) {\n\n this.setState({\n overlay: false,\n client: false\n });\n\n this.props.closeOverlay()\n\n }\n\n updateFilter(filter, value) {\n\n this.setState({\n [filter]: value\n });\n\n }\n\n render() {\n\n if (typeof this.props.clients === 'undefined') {\n\n return (\n
    \n )\n\n } else {\n\n let filtered_clients;\n\n const grouped_clients = _(this.props.clients)\n .groupBy(x => x.state)\n .map((value, key) => ({\n state: key,\n clients: _.orderBy(value, ['id'],['desc'])\n }))\n .sortBy(this.props.clients, function(element){\n var rank = {\n \"active\": 1,\n \"archived\": 2\n };\n return rank[element.state];\n })\n .value();\n\n if(this.state.client_state === 'All') {\n\n filtered_clients = grouped_clients;\n\n } else {\n\n filtered_clients = _.orderBy(this.props.clients.filter((el) => {\n return el.state === this.state.client_state.toLowerCase()\n }), ['id'],['desc']);\n\n }\n\n\n const plus =\n \n \n \n \n \n\n return (\n \n
    \n
    \n

    Clients

    \n \n
    \n
      \n
    • \n this.openOverlay(e, 'new_client')}>\n New Client\n { plus }\n \n
    • \n
    • \n {this.props.clients.length === 0 && (\n
    • Create your first client above.
    • \n )}\n
    \n\n {this.state.client_state === 'All' ? (\n\n grouped_clients.map(group => {\n return (\n \n

    { group.state }

    \n
      \n {group.clients.map(client => {\n return (\n \n \n
      \n { client.name }\n { client.issues.length > 0 && () }\n
      \n \n \n )\n })}\n
    \n
    \n )\n })\n\n ) : (\n\n \n\n

    { this.state.client_state }

    \n\n
      \n {filtered_clients.length === 0 ? (\n
    • Not clients found...
    • \n ) : (\n filtered_clients.map(client => {\n\n return (\n \n \n
      \n { client.name }\n { client.issues.length > 0 && () }\n
      \n \n \n )\n })\n )}\n
    \n\n
    \n\n )}\n\n {this.props.overlay && (\n this.closeOverlay(e)}>\n )}\n
    \n
    \n \n } />\n } />\n \n
    \n
    \n )\n\n }\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Clients);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport {ReactComponent as ErrorIcon} from '../../../images/error.svg';\n\nconst mapStateToProps = state => (\n {\n ...state\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n});\n\nclass AdminUserItem extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n name: props.user.name\n }\n\n }\n\n render() {\n\n return (\n \n {this.props.user.name}\n \n \n {this.props.user.email}\n \n \n {this.props.user.state}\n {this.props.user.created_at}\n {this.props.user.trial_ends_at}\n {this.props.user.last_seen_at}\n \n );\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AdminUserItem);\n","import React from 'react';\nimport AdminUserItem from './AdminUserItem';\n\nconst AdminUserList = props => {\n\n if (!props.users) {\n return false;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {\n props.users.map(user => {\n return (\n \n );\n })\n }\n \n
    NameEmailStateRegistered AtTrial Ends AtLast Seen At
    \n )\n};\n\nexport default AdminUserList;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport AdminUserList from './AdminUserList';\nimport queryString from 'query-string';\nimport { Link } from 'react-router-dom';\nimport { history } from '../../../configureStore';\n\nimport agent from '../../../agent';\nimport {\n REQUEST_ADMIN_USERS,\n ADMIN_USERS_PAGE_LOADED,\n ADMIN_USERS_PAGE_UNLOADED\n} from '../../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.admin_users,\n token: state.common.token\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n onLoad: (payload) => {\n dispatch({ type: REQUEST_ADMIN_USERS })\n dispatch({ type: ADMIN_USERS_PAGE_LOADED, payload: payload })\n },\n onUnload: () =>\n dispatch({ type: ADMIN_USERS_PAGE_UNLOADED })\n});\n\nclass Title extends React.Component {\n\n render() {\n return (\n
    \n

    Admin

    \n
    \n );\n }\n\n}\n\nclass Option extends React.Component {\n\n render() {\n\n return (\n
  • \n \n {this.props.children}\n \n
  • \n );\n }\n\n}\n\nclass AdminUsers extends React.Component {\n\n componentWillMount() {\n }\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n constructor() {\n super();\n this.submitForm = () => ev => {\n ev.preventDefault();\n };\n this.state = { 'order': 'last_seen_at', 'order_direction': 'DESC' };\n }\n\n componentDidMount() {\n const values = queryString.parse(this.props.location.search)\n const newState = Object.assign({}, this.state, values);\n this.setState(newState);\n this.props.onLoad(agent.AdminUsers.all(queryString.stringify(newState)));\n }\n\n componentDidUpdate(prevProps,prevState){\n\n if(prevProps.location.search !== this.props.location.search) {\n\n const values = queryString.parse(this.props.location.search)\n const newState = Object.assign({}, this.state, values);\n this.setState(newState);\n this.props.onLoad(agent.AdminUsers.all(queryString.stringify(newState)));\n\n }\n\n }\n\n resetFilter(filter) {\n\n history.push(`/admin/users?${filter}=`);\n\n this.setState({\n [filter]: ''\n })\n\n }\n\n render() {\n\n return (\n \n
    \n \n <h3 className=\"title\">State <span onClick={(e) => this.resetFilter('in_state')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"in_state\" link=\"trialing\">Trialing</Option>\n <Option state={this.state} filter=\"in_state\" link=\"purchased\">Purchased</Option>\n <Option state={this.state} filter=\"in_state\" link=\"trial_expired\">Trial Expired</Option>\n <Option state={this.state} filter=\"in_state\" link=\"cancelled\">Cancelled</Option>\n </ul>\n <h3 className=\"title\">Last Seen <span onClick={(e) => this.resetFilter('last_seen_within_the_last')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"last_seen_within_the_last\" link=\"day\">Today</Option>\n <Option state={this.state} filter=\"last_seen_within_the_last\" link=\"week\">This Week</Option>\n <Option state={this.state} filter=\"last_seen_within_the_last\" link=\"month\">This Month</Option>\n <Option state={this.state} filter=\"last_seen_within_the_last\" link=\"year\">This Year</Option>\n </ul>\n <h3 className=\"title\">Trial Expiring <span onClick={(e) => this.resetFilter('trial_ends_within_the_next')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"trial_ends_within_the_next\" link=\"day\">Today</Option>\n <Option state={this.state} filter=\"trial_ends_within_the_next\" link=\"week\">This Week</Option>\n <Option state={this.state} filter=\"trial_ends_within_the_next\" link=\"month\">This Month</Option>\n <Option state={this.state} filter=\"trial_ends_within_the_next\" link=\"year\">This Year</Option>\n </ul>\n <h3 className=\"title\">Work Scheduled For <span onClick={(e) => this.resetFilter('work_scheduled_within_the_next')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"work_scheduled_within_the_next\" link=\"day\">Today</Option>\n <Option state={this.state} filter=\"work_scheduled_within_the_next\" link=\"week\">This Week</Option>\n <Option state={this.state} filter=\"work_scheduled_within_the_next\" link=\"month\">This Month</Option>\n <Option state={this.state} filter=\"work_scheduled_within_the_next\" link=\"year\">This Year</Option>\n </ul>\n <h3 className=\"title\">No Work Scheduled For <span onClick={(e) => this.resetFilter('no_work_scheduled_within_the_next')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"no_work_scheduled_within_the_next\" link=\"day\">Today</Option>\n <Option state={this.state} filter=\"no_work_scheduled_within_the_next\" link=\"week\">This Week</Option>\n <Option state={this.state} filter=\"no_work_scheduled_within_the_next\" link=\"month\">This Month</Option>\n <Option state={this.state} filter=\"no_work_scheduled_within_the_next\" link=\"year\">This Year</Option>\n </ul>\n <h3 className=\"title\">Other Filters<span onClick={(e) => this.resetFilter('no_work')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"no_work\" link=\"true\">No work ever added</Option>\n </ul>\n <h3 className=\"title\">Order By <span onClick={(e) => this.resetFilter('order')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"order\" link=\"name\">Name</Option>\n <Option state={this.state} filter=\"order\" link=\"email\">Email</Option>\n <Option state={this.state} filter=\"order\" link=\"created_at\">Registered At</Option>\n <Option state={this.state} filter=\"order\" link=\"trial_ends_at\">Trial Ends At</Option>\n <Option state={this.state} filter=\"order\" link=\"last_seen_at\">Last Seen At</Option>\n </ul>\n <h3 className=\"title\">Order Direction <span onClick={(e) => this.resetFilter('order_direction')}>Clear</span></h3>\n <ul>\n <Option state={this.state} filter=\"order_direction\" link=\"DESC\">DESC</Option>\n <Option state={this.state} filter=\"order_direction\" link=\"ASC\">ASC</Option>\n </ul>\n </section>\n <section className=\"component__project\">\n\n <section className=\"component__list\">\n\n {(this.props.isFetching) ? (\n <div className=\"loading\"><div className=\"loader\"></div></div>\n ) : (\n ((typeof this.props.users === 'undefined') || this.props.users.length === 0) ? (\n <div className=\"empty__list\">\n <p>No users found, try another search</p>\n </div>\n ) : (\n <div className=\"\">\n <AdminUserList users={this.props.users} />\n </div>\n )\n )}\n\n </section>\n\n </section>\n </React.Fragment>\n )\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AdminUsers);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8v4l3 3m6-3a9 9 0 1 1-18 0 9 9 0 0 1 18 0z\",\n stroke: \"currentColor\",\n fill: \"none\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgTime = function SvgTime(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTime, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/time.ee74247c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 24,\n height: 24,\n fill: \"#fff\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n fillRule: \"nonzero\",\n d: \"M20,12 C20.5128358,12 20.9355072,12.3860402 20.9932723,12.8833789 L21,13 L21,23 C21,23.5128358 20.6139598,23.9355072 20.1166211,23.9932723 L20,24 L4,24 C3.48716416,24 3.06449284,23.6139598 3.00672773,23.1166211 L3,23 L3,13 C3,12.4477153 3.44771525,12 4,12 C4.51283584,12 4.93550716,12.3860402 4.99327227,12.8833789 L5,13 L5,22 L8.99996988,22 L9,17 C9,16.4871642 9.38604019,16.0644928 9.88337887,16.0067277 L10,16 L14,16 C14.5128358,16 14.9355072,16.3860402 14.9932723,16.8833789 L15,17 L14.9999699,22 L19,22 L19,13 C19,12.4871642 19.3860402,12.0644928 19.8833789,12.0067277 L20,12 Z M13,18 L11,18 L10.9999699,22 L12.9999699,22 L13,18 Z M13,10 C13.5522847,10 14,10.4477153 14,11 L14,11 L14,13 C14,13.5522847 13.5522847,14 13,14 L13,14 L11,14 C10.4477153,14 10,13.5522847 10,13 L10,13 L10,11 C10,10.4477153 10.4477153,10 11,10 L11,10 Z M12.4182465,1.09153795 L12.5290158,1.15131784 L12.6332378,1.2260427 L23.6332378,10.2260427 C24.0606826,10.5757703 24.1236849,11.205793 23.7739573,11.6332378 C23.4511318,12.0278022 22.889475,12.1118358 22.4687796,11.8473591 L22.3667622,11.7739573 L12,3.291 L1.63323779,11.7739573 C1.23867335,12.0967828 0.671498159,12.0679331 0.31150493,11.7253875 L0.226042701,11.6332378 C-0.0967827527,11.2386733 -0.0679330721,10.6714982 0.274612472,10.3115049 L0.36676221,10.2260427 L11.3667622,1.2260427 C11.6681525,0.979450664 12.0775726,0.934615748 12.4182465,1.09153795 Z\",\n stroke: \"currentColor\",\n strokeWidth: 0,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgDashboard = function SvgDashboard(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgDashboard, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/dashboard.f6b2d9a0.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"M12,0 C15.8659932,0 19,3.13400675 19,7 C19,9.236293 17.9513389,11.2276581 16.3189381,12.5091739 C20.7717334,13.9165889 24,18.0811818 24,23 C24,23.5522847 23.5522847,24 23,24 C22.4477153,24 22,23.5522847 22,23 C22,18.1180475 18.1133334,14.1442032 13.2653701,14.003837 L13,14 L11,14 C6.02928475,14 2,18.0292847 2,23 C2,23.5522847 1.55228475,24 1,24 C0.44771525,24 0,23.5522847 0,23 C0,18.0809472 3.22857447,13.9161918 7.68234406,12.5091129 C6.04909277,11.2284777 5,9.23675324 5,7 C5,3.13400675 8.13400675,0 12,0 Z M12,2 C9.23857625,2 7,4.23857625 7,7 C7,9.76142375 9.23857625,12 12,12 C14.7614237,12 17,9.76142375 17,7 C17,4.23857625 14.7614237,2 12,2 Z\"\n});\n\nvar SvgClients = function SvgClients(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgClients, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/clients.c34f2607.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\",\n transform: \"translate(-3 -2)\"\n}, /*#__PURE__*/React.createElement(\"polygon\", {\n points: \"0 0 24 0 24 24 0 24\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n fill: \"currentColor\",\n fillRule: \"nonzero\",\n transform: \"translate(3 2)\",\n stroke: \"currentColor\",\n strokeWidth: 0,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13,2 L11,2 C11,0.8954305 10.1045695,0 9,0 C7.8954305,0 7,0.8954305 7,2 L5,2 L5,5 L13,5 L13,2 Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16,3 L15,3 L15,7 L3,7 L3,3 L2,3 C0.8954305,3 0,3.8954305 0,5 L0,19 C0,20.1045695 0.8954305,21 2,21 L16,21 C17.1045695,21 18,20.1045695 18,19 L18,5 C18,3.8954305 17.1045695,3 16,3 Z M8,17.415 L4.293,13.707 L5.707,12.294 L8,14.586 L12.293,10.293 L13.707,11.706 L8,17.415 Z\"\n})));\n\nvar SvgTasks = function SvgTasks(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18,\n height: 21,\n viewBox: \"0 0 18 21\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTasks, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/tasks.39281c0c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M20.7272727,0 C22.5347501,0 24,1.46524991 24,3.27272727 L24,3.27272727 L24,20.7272727 C24,22.5347501 22.5347501,24 20.7272727,24 L20.7272727,24 L3.27272727,24 C1.46524991,24 0,22.5347501 0,20.7272727 L0,20.7272727 L0,3.27272727 C0,1.46524991 1.46524991,0 3.27272727,0 L3.27272727,0 Z M7,16 L2,16 L2,20.8888889 C2,21.5025386 2.49746139,22 3.11111111,22 L3.11111111,22 L20.8888889,22 C21.5025386,22 22,21.5025386 22,20.8888889 L22,20.8888889 L22,16 L17,16 L17,18 C17,18.5128358 16.6139598,18.9355072 16.1166211,18.9932723 L16,19 L8,19 C7.48716416,19 7.06449284,18.6139598 7.00672773,18.1166211 L7,18 L7,16 Z M20.8888889,2 L3.11111111,2 C2.49746139,2 2,2.49746139 2,3.11111111 L2,3.11111111 L2,14 L8,14 C8.51283584,14 8.93550716,14.3860402 8.99327227,14.8833789 L9,15 L9,17 L15,17 L15,15 C15,14.4871642 15.3860402,14.0644928 15.8833789,14.0067277 L16,14 L22,14 L22,3.11111111 C22,2.49746139 21.5025386,2 20.8888889,2 L20.8888889,2 Z M17,9 C17.5522847,9 18,9.44771525 18,10 C18,10.5128358 17.6139598,10.9355072 17.1166211,10.9932723 L17,11 L7,11 C6.44771525,11 6,10.5522847 6,10 C6,9.48716416 6.38604019,9.06449284 6.88337887,9.00672773 L7,9 L17,9 Z M17,5 C17.5522847,5 18,5.44771525 18,6 C18,6.51283584 17.6139598,6.93550716 17.1166211,6.99327227 L17,7 L7,7 C6.44771525,7 6,6.55228475 6,6 C6,5.48716416 6.38604019,5.06449284 6.88337887,5.00672773 L7,5 L17,5 Z\",\n stroke: \"currentColor\",\n strokeWidth: 0,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n});\n\nvar SvgProjects = function SvgProjects(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgProjects, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/projects.c75c04e0.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport dateFns from 'date-fns';\nimport {ReactComponent as ErrorIcon} from '../../../images/error.svg';\nimport {ReactComponent as TimeIcon} from '../../../images/icons/time.svg';\nimport {ReactComponent as PriceIcon} from '../../../images/icons/price.svg';\nimport {ReactComponent as ToggleIcon} from '../../../images/icons/toggle.svg';\nimport {ReactComponent as CalendarIcon} from '../../../images/icons/calendar.svg';\nimport {ReactComponent as SettingsIcon} from '../../../images/icons/dashboard.svg';\nimport {ReactComponent as ClientIcon} from '../../../images/clients.svg';\nimport {ReactComponent as TaskIcon} from '../../../images/icons/tasks.svg';\nimport {ReactComponent as ProjectIcon} from '../../../images/icons/projects.svg';\n\nimport agent from '../../../agent';\n\nimport {\n ADMIN_USER_LOADED,\n ADMIN_USER_UNLOADED,\n MASQUERADE\n} from '../../../constants/actionTypes';\n\nconst mapStateToProps = (state, ownProps) => ({\n user: state.admin_users.user,\n user_slug: ownProps.match.params.slug\n});\n\nconst mapDispatchToProps = dispatch => ({\n onLoad: user_slug => {\n dispatch({ type: ADMIN_USER_LOADED, payload: agent.AdminUsers.show(user_slug) })\n },\n masqueradeAsUser: userId => {\n dispatch({ type: MASQUERADE, payload: agent.AdminUsers.masquerade(userId) })\n },\n onUnload: () =>\n dispatch({ type: ADMIN_USER_UNLOADED }),\n});\n\nclass Title extends React.Component {\n\n render() {\n return (\n <header>\n <h2>Admin > <Link to=\"/admin/users\" alt=\"Sign In\">Users</Link> > { this.props.email }</h2>\n </header>\n );\n }\n\n}\n\nclass AdminUser extends React.Component {\n\n componentWillMount() {\n this.props.onLoad(this.props.user_slug);\n }\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n constructor(props) {\n super(props);\n\n this.state = {\n tab: 'activity'\n }\n\n }\n\n switchTabs(e, tab) {\n\n e.stopPropagation();\n\n this.setState({\n tab: tab\n });\n\n }\n\n render() {\n\n const issues = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"#c31840\" stroke-miterlimit=\"10\">\n <circle cx=\"32\" cy=\"32\" r=\"29\"/>\n <path d=\"M32 14v25\"/>\n <circle cx=\"32\" cy=\"47\" r=\"1\"/>\n </g>\n </svg>;\n\n const finished = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M2.5 22.5a7 7 0 007-7 7 7 0 007 7M2.5 22.5a7 7 0 017 7 7 7 0 017-7M48.5 22.5a7 7 0 007-7 7 7 0 007 7M48.5 22.5a7 7 0 017 7 7 7 0 017-7M38.283 9.701l-3.996-.581L32.5 5.5l-1.787 3.62-3.996.581 2.891 2.819-.682 3.98 3.574-1.878 3.574 1.878-.682-3.98 2.891-2.819zM59.244 48.701l-3.996-.581-1.787-3.62-1.788 3.62-3.996.581 2.892 2.819-.683 3.98 3.575-1.878 3.574 1.878-.683-3.98 2.892-2.819zM17.283 47.701l-3.996-.581L11.5 43.5l-1.787 3.62-3.996.581 2.891 2.819-.682 3.98 3.574-1.878 3.574 1.878-.682-3.98 2.891-2.819zM47.5 29.5a13.337 13.337 0 00-9 7M17.5 29.5a13.337 13.337 0 019 7M17.5 42.5a11.743 11.743 0 015-.426c4.363.591 10 4.126 10 18.426M47.5 42.5a11.743 11.743 0 00-5-.426c-4.363.591-10 4.126-10 18.426M32.5 22.5v18\" />\n </g>\n </svg>;\n\n const on_track = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" transform=\"translate(.5 .5)\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M18 34l8 8 20-20\" />\n <circle cx=\"32\" cy=\"32\" r=\"29\" />\n </g>\n </svg>;\n\n const cancelled = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g strokeWidth=\"2\" stroke-linecap=\"round\" strokeLinejoin=\"round\" transform=\"translate(.5 .5)\" fill=\"none\" stroke=\"#c31840\" stroke-miterlimit=\"10\">\n <path d=\"M52.493 11.507L11.507 52.493\" />\n <circle cx=\"32\" cy=\"32\" r=\"29\" />\n </g>\n </svg>;\n\n if(this.props.user) {\n\n return (\n <React.Fragment>\n <section className=\"component__project\">\n <div className=\"summary\">\n <div className=\"data\">\n <header>\n <div>\n <span>{ this.props.user.email ? this.props.user.email : '–' }</span>\n <h2>{ this.props.user.name ? this.props.user.name : '–' }</h2>\n </div>\n </header>\n <div className=\"row\">\n <div className=\"title\">\n <TimeIcon />\n <h4>They were last seen at { this.props.user.last_contact_received_at }</h4>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"title\">\n <SettingsIcon />\n <h4>They are from {this.props.user.country} and using {this.props.user.currency} </h4>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"title\">\n <PriceIcon />\n <h4>Their default rates are {this.props.user.standard_day_rate_formatted} a day and {this.props.user.standard_hourly_rate_formatted} an hour </h4>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"title\">\n <CalendarIcon />\n <h4>They've been a user since { this.props.user.created_at }</h4>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"title\">\n { this.props.user.work_count == 0 ? <ErrorIcon /> : <CalendarIcon /> }\n <h4>They've created { this.props.user.work_count } work with the last one added at { this.props.user.latest_work_added_at }</h4>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"title\">\n <ProjectIcon />\n <h4>Spread across { this.props.user.clients_count } clients and { this.props.user.project_count } projects.</h4>\n </div>\n </div>\n <div className=\"row\">\n <div className=\"title\">\n <TaskIcon />\n <h4>Organised themselves with { this.props.user.task_count} tasks.</h4>\n </div>\n </div>\n </div>\n <div className=\"status\">\n {this.props.user.state === 'cancelled' && (<React.Fragment>\n <div>\n {cancelled}\n <span>This user has cancelled their subscription</span>\n </div>\n </React.Fragment>)}\n {this.props.user.state === 'trialing' && (<React.Fragment>\n <div>\n {on_track}\n <span>This user is trialing</span>\n <span>Their trial expires on { this.props.user.trial_ends_at }</span>\n </div>\n </React.Fragment>)}\n {this.props.user.state === 'purchased' && (<React.Fragment>\n <div>\n {finished}\n <span>This user is a paid user on the { this.props.user.subscription_name} plan</span>\n <a href={this.props.user.stripe_link}>View on Stripe</a>\n </div>\n </React.Fragment>)}\n {this.props.user.state === 'trial_expired' && (<React.Fragment>\n <div>\n {issues}\n <span>Their trial expired at { this.props.user.trial_ends_at } and they chose not to add purchase</span>\n </div>\n </React.Fragment>)}\n <button\n onClick={()=> { this.props.masqueradeAsUser(this.props.user.id)} }\n className=\"btn btn__inline\">\n <span>Masquerade as this user</span>\n </button>\n </div>\n </div>\n <div className=\"options inset\">\n <div className=\"list\">\n <button\n className={this.state.tab === 'activity' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'activity')}>Activity</button>\n <button\n className={this.state.tab === 'schedule' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'schedule')}>Schedule</button>\n </div>\n </div>\n <div className=\"analysis\">\n {(this.state.tab === 'activity') && (\n this.props.user.activity.length > 0 ? (\n <div className=\"schedule\">\n <div className=\"block\" data-month=\"April 2020\">\n <div className=\"list\">\n {\n this.props.user.activity.map(obj => {\n return (\n <div className=\"item booked invoice invoiced\">\n <span className=\"date\">{obj['action']} {obj['type']} on {dateFns.format(obj['date'],'DD/MM/YYYY HH:mm:ss')}</span>\n </div>\n );\n })\n }\n </div>\n </div>\n </div>\n ) : (\n <p>There has been no activity</p>\n )\n )}\n {(this.state.tab === 'schedule') && (\n this.props.user.schedule.works.length > 0 ? (\n <div className=\"schedule\">\n <div className=\"block\" data-month=\"April 2020\">\n <div className=\"list\">\n {\n this.props.user.schedule.works.map(obj => {\n return (\n <div className=\"item booked invoice invoiced\">\n <span className=\"date\">\n { dateFns.format(obj['date'], 'ddd D MMMM YYYY') } working on {obj['client_name'] } { obj['project_title'] && (<React.Fragment>( project : {obj['project_title']})</React.Fragment>)} for { obj['unit_value_formatted'] } and charging { obj['price_formatted'] } </span>\n </div>\n );\n })\n }\n </div>\n </div>\n </div>\n ) : (\n <p>There is no work schedule for the next 30 days</p>\n )\n )}\n </div>\n </section>\n\n </React.Fragment>\n );\n\n } else {\n\n return (<div className=\"loading\"><div className=\"loader\"></div></div>)\n\n }\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AdminUser);\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport TimeField from 'react-simple-timefield';\nimport DayPicker from 'react-day-picker';\nimport dateFns from 'date-fns';\nimport { scrollPosition } from './Overlay';\n\nexport const Dropdown = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (field, value, persist) => {\n props.onChange(field,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n useEffect(() => {\n\n var element = node.current;\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.addEventListener(\"scroll\", handleScroll);\n\n const dropdown_menu = document.querySelector('#dropdown__menu');\n const position_top = ((element.offsetParent.offsetTop + element.offsetTop + element.offsetHeight + 8) - scrollPosition);\n \n // set default position\n dropdown_menu.style.top = position_top + 'px';\n\n // get bounds now dropdown has default position\n const dropdown_menu_bounds = dropdown_menu.getBoundingClientRect();\n\n // dropdown outside window, recalculate position\n if ( dropdown_menu_bounds.bottom > window.innerHeight ) {\n const position_recalc = ((element.offsetParent.offsetTop + element.offsetTop - 8) - scrollPosition) - dropdown_menu.offsetHeight;\n dropdown_menu.style.top = position_recalc + 'px';\n }\n\n // finally, show dropdown (to stop position popping effect)\n dropdown_menu.style.visibility = 'visible';\n\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n return (\n <div ref={node} className=\"dropdown\">\n <button className=\"dropdown-toggler\" onClick={e => setOpen(!open)}>\n <span>\n {((props.content === 'project_rate_unit') && (\n (props.project.project_rate_unit === 'days' && 'By the day') || \n (props.project.project_rate_unit === 'hours' && 'By the hour')\n )) || ((props.content === 'estimated_time_unit') && (\n (props.project.estimated_time_unit === 'hours' && 'Hours') ||\n (props.project.estimated_time_unit === 'days' && 'Days')\n )) || ((props.content === 'preferred_billing_unit') && (\n (props.client.preferred_billing_unit === 'days' && 'By the day') ||\n (props.client.preferred_billing_unit === 'hours' && 'By the hour') ||\n (props.client.preferred_billing_unit === 'projects' && 'By the project')\n )) || ((props.content === 'rates') && (\n (((props.client.preferred_billing_unit === 'days') || (props.client.preferred_billing_unit === 'projects')) && (\n <span><span className={`currency-${props.currency.toLowerCase()}`}></span>{props.client.day_rate}/day</span>\n )) || ((props.client.preferred_billing_unit === 'hours') && (\n <span><span className={`currency-${props.currency.toLowerCase()}`}></span>{props.client.hourly_rate}/hour</span>\n ))\n )) || ((props.content === 'date') && (\n props.unit_value_formatted\n )) || ((props.content === 'deadline') && (\n props.project.deadline ? dateFns.format(props.project.deadline, 'D MMMM YYYY') : 'No'\n ))}\n </span>\n <svg width=\"9\" height=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(-70 -18)\" fill=\"#1282FF\" fillRule=\"evenodd\">\n <path fill=\"currentColor\" d=\"M78.3013153 26.17460431c.15974318.18636704.15830762.45647696.00876349.64041738l-.0629961.06460661-3.5 3c-.16383926.1404336-.39586261.1579879-.57674789.0526626l-.07404349-.0526626-3.5-3c-.20966292-.17971107-.23394369-.49536107-.05423261-.70502399.15974318-.18636704.42689488-.22625929.63154276-.10660658l.07348123.05237397L74.42167794 28.841l3.17461337-2.7206283c.20966292-.17971108.52531292-.15543031.70502399.05423261zm-3.6282761-8.10689523l.07404349.05266262 3.5 3c.20966292.17971107.23394369.49536107.05423261.70502399-.15974318.18636704-.42689488.22625929-.63154276.10660658l-.07348123-.05237397L74.42167794 19.158l-3.17459525 2.7216283c-.18636704.15974318-.45647696.15830762-.64041739.00876349l-.0646066-.0629961c-.15974318-.18636704-.15830762-.45647696-.0087635-.64041738l.06299611-.06460661 3.5-3c.16383926-.14043365.39586261-.15798786.57674789-.05266262z\" opacity=\".5\" fillRule=\"nonzero\"/>\n </g>\n </svg>\n </button>\n {open && (\n ReactDOM.createPortal(\n <div\n style={{position: 'absolute', visibility: 'hidden', right: '32px' }}\n id=\"dropdown__menu\" className={`dropdown__menu ` + props.content}>\n {((props.content === 'project_rate_unit') && ( // project.project_rate_unit\n <div className=\"list\">\n <div\n className={props.project.project_rate_unit === 'days' ? 'item selected' : 'item'}\n onClick={e => handleChange('project.project_rate_unit','days')}>By the day</div>\n <div\n className={props.project.project_rate_unit === 'hours' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('project.project_rate_unit','hours')}>By the hour</div>\n </div>\n )) || ((props.content === 'estimated_time_unit') && ( // project.estimated_time_unit\n <div className=\"list\">\n <div\n className={props.project.estimated_time_unit === 'hours' ? 'item selected' : 'item'}\n onClick={e => handleChange('project.estimated_time_unit','hours')}>Hours</div>\n <div\n className={props.project.estimated_time_unit === 'days' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('project.estimated_time_unit','days')}>Days</div>\n </div>\n )) || ((props.content === 'preferred_billing_unit') && ( // client.preferred_billing_unit\n <div className=\"list\">\n <div\n className={props.client.preferred_billing_unit === 'days' ? 'item selected' : 'item'}\n onClick={e => handleChange('client.preferred_billing_unit','days')}>By the day</div>\n <div\n className={props.client.preferred_billing_unit === 'hours' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('client.preferred_billing_unit','hours')}>By the hour</div>\n <div\n className={props.client.preferred_billing_unit === 'projects' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('client.preferred_billing_unit','projects')}>By the project</div>\n </div>\n )) || ((props.content === 'rates') && ( // client.day_rate & client.hourly_rate\n <div className=\"list\">\n {(((props.client.preferred_billing_unit === 'days') && (\n <div>\n <div className={`currency-${props.currency.toLowerCase()}`}></div>\n <input\n className=\"mini\"\n type=\"text\"\n value={props.client.day_rate}\n onChange={(e) => handleChange('client.day_rate', e.target.value, true)} />\n </div>\n )) || ((props.client.preferred_billing_unit === 'hours') && (\n <div>\n <div className={`currency-${props.currency.toLowerCase()}`}></div>\n <input\n className=\"mini\"\n type=\"text\"\n value={props.client.hourly_rate}\n onChange={(e) => handleChange('client.hourly_rate', e.target.value, true)} />\n </div>\n )))}\n </div>\n )) || ((props.content === 'date') && (\n <React.Fragment>\n <div\n className=\"label\"\n onClick={props.toggleUnit}>\n <span>All-day</span>\n <span className={ props.unit === 'days' ? 'checkbox checked' : 'checkbox' }>\n <input\n checked={props.unit === 'days'}\n type=\"checkbox\" />\n <span></span>\n </span>\n </div>\n <div className=\"divider\"></div>\n <div\n className={ props.unit === 'days' && 'disabled' }>\n <TimeField\n colon=\":\"\n value={props.unit_value_in_time}\n onKeyDown={props.onKeyDown}\n onChange={props.onChange}\n style={{width: '100%'}}\n />\n </div>\n </React.Fragment>\n )) || ((props.content === 'deadline') && (\n <DayPicker\n selectedDays={dateFns.parse(props.project.deadline)}\n disabledDays={{ before: new Date() }}\n onDayClick={(e) => handleChange('project.deadline',e)}\n onTodayButtonClick={(e) => handleChange('project.deadline',false)}\n fromMonth={new Date()}\n todayButton={'Remove Deadline'}\n initialMonth={props.project.deadline ? dateFns.parse(props.project.deadline) : new Date()} />\n ))}\n </div>, document.querySelector('.overlay__block:last-child')\n )\n )}\n </div>\n );\n};","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useDispatch, useSelector } from 'react-redux'\nimport agent from '../../agent';\nimport { Link } from 'react-router-dom';\nimport { showNotificationWithTimeout } from '../../components/Notifications';\nimport { get, isEmpty } from 'lodash';\n\nconst ProjectOptions = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n let loading = useSelector(state => get(state.common, 'loading', false));\n let notification = useSelector(state => get(state.common, 'notification', false));\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (filter, value, persist) => {\n props.onChange(filter,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n const onStateTransition = (type, invoice, state, message) => {\n props.dispatch({\n type: type,\n payload: agent.Invoices.transition_state(invoice.id, state).then((res) => {\n if(!res.body.errors) {\n showNotificationWithTimeout(props.dispatch, message);\n setOpen(false);\n if(state === 'submitted') {\n props.openOverlay('email_invoice', invoice)\n }\n }\n return res;\n })\n })\n }\n\n useEffect(() => {\n\n var element = node.current;\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.addEventListener(\"scroll\", handleScroll);\n\n const dropdown_menu = document.querySelector('#dropdown__menu');\n const position_top = (element.offsetHeight + 8);\n\n // set default position\n dropdown_menu.style.top = position_top + 'px';\n\n // get bounds now dropdown has default position\n const dropdown_menu_bounds = dropdown_menu.getBoundingClientRect();\n\n // dropdown outside window, recalculate position\n if ( dropdown_menu_bounds.bottom > window.innerHeight ) {\n const position_recalc = dropdown_menu.offsetHeight + 8;\n dropdown_menu.style.top = -Math.abs(position_recalc) + 'px';\n }\n\n // finally, show dropdown (to stop position popping effect)\n dropdown_menu.style.visibility = 'visible';\n\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n const renderSwitch = e => {\n switch(props.project.state){\n case 'submitted':\n return (\n <>\n </>\n )\n default:\n return (\n <>\n { props.project.can_be_deleted && (\n <div onClick={() => {\n props.deleteProject(props.project)\n }} className=\"item\">Delete Project</div>\n )}\n <div onClick={() => {\n props.confirmCancelProject(props.project)\n }} className=\"item\">Cancel Project</div>\n </>\n )\n }\n }\n\n return (\n <div ref={node} className={props.disabled ? 'dropdown disabled' : 'dropdown'}>\n <button className=\"btn btn__square dropdown-toggler\" onClick={e => setOpen(!open)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" strokeWidth=\"1.5\" stroke=\"currentColor\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M0 0h24v24H0z\" stroke=\"none\"/>\n <circle cx=\"12\" cy=\"12\" r=\"1\"/>\n <circle cx=\"12\" cy=\"19\" r=\"1\"/>\n <circle cx=\"12\" cy=\"5\" r=\"1\"/>\n </svg>\n </button>\n {open && (\n ReactDOM.createPortal(\n <div\n style={{position: 'absolute', visibility: 'hidden', right: '1px' }}\n id=\"dropdown__menu\" className={`dropdown__menu ` + props.content}>\n {loading && (\n <div className=\"loading\"><div className=\"loader loader__small\"></div></div>\n )}\n <div className=\"list\">\n {renderSwitch(props.project.state)}\n </div>\n </div>, node.current\n )\n )}\n { notification && <div className=\"success\">{notification}</div>}\n </div>\n );\n};\n\nexport default ProjectOptions;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#C31840\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M1,3 L1,13.0555556 C1,13.9146652 2.14089039,15 3,15 L13,15 C14.1045695,15 15,14.1045695 15,13 L15,7 C15,5.8954305 14.1045695,5 13,5 L3,5 C1.8954305,5 1,4.1045695 1,3 L1,3 L1,3 C1,1.8954305 1.8954305,1 3,1 L11.1111111,1 L11.1111111,1\"\n}), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 11,\n cy: 10,\n r: 1,\n fill: \"#C31840\"\n}));\n\nvar SvgPriceSmall = function SvgPriceSmall(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgPriceSmall, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/price_small.558b37b5.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Tooltip from '../Tooltip';\nimport { Info } from '../Info';\nimport ListErrors from '../ListErrors';\nimport ContentEditable from 'react-contenteditable';\nimport FocusTrap from 'focus-trap-react';\nimport { connect } from 'react-redux';\nimport { _ , isEmpty } from 'lodash';\nimport { history } from '../../configureStore';\nimport { TwitterPicker } from 'react-color';\nimport update from 'immutability-helper';\nimport agent from '../../agent';\nimport { Dropdown } from './Dropdown';\nimport ProjectOptions from './ProjectOptions';\nimport {ReactComponent as PriceIcon} from '../../images/price_small.svg';\nimport dateFns from 'date-fns';\nimport { AvailabilityDateBuilder } from '../../services/AvailabilityDateBuilder';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport { components } from 'react-select';\nimport Select from 'react-select';\nimport { currencies } from '../../currencies';\nimport { validateEmail } from '../../components/Validate';\nimport { Link } from 'react-router-dom';\n\nimport {\n SCHEDULE_CREATE,\n CLIENT_CREATE,\n PROJECT_CREATE,\n PROJECT_UPDATE,\n PROJECT_REMOVE,\n CLOSE_PROJECTS_OVERLAY,\n SCHEDULE_AVAILABILITY,\n PROJECTS_PAGE_LOADED\n} from '../../constants/actionTypes';\n\nconst Input = ({ autoComplete, ...props }) => <components.Input {...props} autoComplete=\"new-password\" />;\nconst DropdownIndicator = props => {\n return (\n <components.DropdownIndicator {...props}>\n <svg width=\"9\" height=\"12\" xmlns=\"http://www.w3.org/2000/svg\"><g transform=\"translate(-70 -18)\" fill=\"#1282FF\" fill-rule=\"evenodd\"><path fill=\"currentColor\" d=\"M78.3013153 26.17460431c.15974318.18636704.15830762.45647696.00876349.64041738l-.0629961.06460661-3.5 3c-.16383926.1404336-.39586261.1579879-.57674789.0526626l-.07404349-.0526626-3.5-3c-.20966292-.17971107-.23394369-.49536107-.05423261-.70502399.15974318-.18636704.42689488-.22625929.63154276-.10660658l.07348123.05237397L74.42167794 28.841l3.17461337-2.7206283c.20966292-.17971108.52531292-.15543031.70502399.05423261zm-3.6282761-8.10689523l.07404349.05266262 3.5 3c.20966292.17971107.23394369.49536107.05423261.70502399-.15974318.18636704-.42689488.22625929-.63154276.10660658l-.07348123-.05237397L74.42167794 19.158l-3.17459525 2.7216283c-.18636704.15974318-.45647696.15830762-.64041739.00876349l-.0646066-.0629961c-.15974318-.18636704-.15830762-.45647696-.0087635-.64041738l.06299611-.06460661 3.5-3c.16383926-.14043365.39586261-.15798786.57674789-.05266262z\" opacity=\".5\" fill-rule=\"nonzero\"></path></g></svg>\n </components.DropdownIndicator>\n )\n}\n\nconst mapStateToProps = (state, ownProps) => ({\n ...state,\n errors: state.projects.errors,\n dates: state.dates\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n newClient: client => {\n dispatch({ type: CLIENT_CREATE, payload: agent.Clients.create(client) })\n },\n\n newProject: project => {\n dispatch({ type: PROJECT_CREATE, payload: agent.Projects.create(project) })\n },\n\n getAvailability: (from,to) => {\n dispatch({\n type: SCHEDULE_AVAILABILITY,\n payload: agent.Schedule.availability(from,to)\n })\n\n },\n\n autoPopulateSchedule: (project, dates) => {\n\n dispatch({\n type: SCHEDULE_CREATE,\n payload: agent.Schedule.create_multiple(dates).then((res) => {\n if(!res.body.errors) {\n dispatch({ type: PROJECT_UPDATE, payload: agent.Projects.update(project) })\n dispatch({ type: CLOSE_PROJECTS_OVERLAY });\n }\n return res;\n })\n })\n\n },\n\n updateProject: project => {\n dispatch({\n type: PROJECT_UPDATE,\n payload: agent.Projects.update(project).then((res) => {\n if(!res.body.errors) {\n dispatch({ type: CLOSE_PROJECTS_OVERLAY });\n // check if project name has changed\n if (history.location.pathname !== '/projects/' + res.body.slug) {\n history.push('/projects/')\n }\n }\n return res;\n })\n })\n },\n\n transitionState: (project, state) => {\n dispatch({\n type: PROJECT_UPDATE,\n payload: agent.Projects.transition_state(project.id, state).then((res) => {\n if(!res.body.errors) {\n dispatch({ type: CLOSE_PROJECTS_OVERLAY });\n }\n return res;\n })\n })\n },\n\n deleteProject: (project, prompt) => {\n dispatch({\n type: PROJECT_REMOVE,\n payload: agent.Projects.remove(project, prompt).then((res) => {\n if(!res.body.errors) {\n history.push('/projects/')\n }\n return res;\n })\n })\n },\n\n})\n\nexport let scrollPosition = 0;\n\nclass Overlay extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.searchClientsRef = React.createRef();\n this.clientTitleRef = React.createRef();\n this.projectTitleRef = React.createRef();\n this.clientButtonRef = React.createRef();\n this.projectButtonRef = React.createRef();\n this.deleteProjectButtonRef = React.createRef();\n\n if (this.props.project) {\n\n let client = this.props.clients.clients.filter((el) => {\n return el.id === this.props.project.client_id\n });\n\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: this.props.overlay,\n overlay_history: [this.props.overlay],\n new: false,\n loading: false,\n project: this.props.project,\n client: client[0]\n }\n\n } else {\n\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: this.props.overlay,\n overlay_history: ['client'],\n clients: this.props.clients.clients.filter((el) => {\n return el.state === 'active'\n }),\n keyword: false,\n new: true,\n loading: false\n }\n\n }\n\n }\n\n componentDidMount(){\n document.addEventListener(\"keydown\", this.keyPress.bind(this), false);\n\n if(this.state.overlay === 'auto-populate') {\n this.getAvailability(this.state.project);\n }\n\n if(this.state.overlay === 'client') {\n this.searchClientsRef.current.focus()\n }\n\n if(this.state.overlay === 'new_client') {\n this.clientTitleRef.current.focus()\n }\n\n if(this.state.overlay === 'new_project') {\n this.projectTitleRef.current.focus()\n }\n\n if(this.state.overlay === 'project') {\n let estimated = this.state.project.amount / this.state.project.estimated_time_value\n\n this.setState({\n estimated: estimated\n })\n }\n\n }\n\n componentWillUnmount(){\n document.removeEventListener(\"keydown\", this.keyPress.bind(this), false);\n scrollPosition = 0\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if(prevState.loading && this.props.projects.errors) {\n\n this.setState({\n loading: false\n })\n\n }\n\n if((this.state.overlay === 'new_project' || this.state.overlay === 'project') && prevState.project !== this.state.project) {\n\n let estimated = this.state.project.amount / this.state.project.estimated_time_value\n\n this.setState({\n estimated: estimated\n })\n\n }\n\n if(this.state.overlay === 'client') {\n this.searchClientsRef.current.focus()\n }\n\n if(this.state.overlay === 'new_client' && prevState.overlay !== 'new_client') {\n this.clientTitleRef.current.focus()\n }\n\n if(this.state.overlay === 'new_project' && prevState.overlay !== 'new_project') {\n this.projectTitleRef.current.focus()\n }\n\n\n }\n\n keyPress(e, field=false){\n\n // up/down arrow\n if ( field && [38,40].includes( e.keyCode ) ) {\n\n let value = parseInt(e.target.innerText)\n\n // down\n if( e.keyCode === 40 ) {\n\n if (value === 0) {\n return false\n }\n\n --value\n\n }\n\n // up\n if( e.keyCode === 38 ) {\n ++value\n }\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n // escape\n // if(e.keyCode === 27) {\n // this.props.closeOverlay(e)\n // }\n\n // enter\n if(e.keyCode === 13) {\n\n const overlay = this.state.overlay;\n\n if (e.target.nodeName === 'TEXTAREA') {\n return false;\n }\n\n if (overlay === 'new_client' && this.clientButtonRef.current) {\n this.clientButtonRef.current.click()\n }\n\n if ((overlay === 'project' || overlay === 'new_project') && this.projectButtonRef.current) {\n this.projectButtonRef.current.click()\n }\n\n if (overlay === 'delete' && this.deleteProjectButtonRef.current) {\n this.deleteProjectButtonRef.current.click()\n }\n\n }\n\n }\n\n formatPrice(price, currency=undefined) {\n\n return new Intl.NumberFormat(this.props.common.locale, {\n style: 'currency',\n currency: currency || this.props.common.currentUser.currency\n }).format(price)\n\n }\n\n numericOnly(value){\n return value.replace(/[^0-9.]/g, '')\n }\n\n setOverlay(e, overlay, direction) {\n\n e.stopPropagation();\n\n let overlay_history;\n\n if (direction === 'back') {\n let array = this.state.overlay_history\n overlay_history = array.splice(0, array.length-1)\n } else {\n overlay_history = this.state.overlay_history.concat(overlay);\n }\n\n if(overlay === 'client') {\n this.searchClientsRef.current.value = ''\n }\n\n this.setState({\n ...this.state, // needed?\n initialLoad: false,\n overlay: overlay,\n overlay_history: overlay_history,\n counter: overlay === 'client' ? 1 : (direction === 'forward' ? this.state.counter + 1 : this.state.counter - 1),\n //|| overlay === 'project') ? false : this.state.keyword,\n results: false,\n keyword: false\n });\n\n }\n\n search(e, type) {\n\n let search = e.currentTarget.value;\n let array = {\n 'clients': this.props.clients.clients\n }\n\n if (search.length > 1) {\n\n let list = _.filter(array[type], _.flow(\n _.values,\n _.partialRight(_.some, _.method('match', new RegExp(search, 'i')))\n ));\n\n this.setState({\n ...this.state, // needed?\n results: list,\n keyword: search\n })\n\n if (list.length === 0 && e.keyCode === 13) {\n this.setupNewClient()\n }\n\n }\n\n if (search.length === 0) {\n\n this.setState({\n ...this.state, // needed?\n results: false,\n keyword: false\n })\n\n }\n\n }\n\n updateField(field, value) {\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n // get correct rate for new projects\n if(this.state.new && this.state.client && field === 'project.project_rate_unit') {\n\n let rate;\n\n if (value === 'hours') {\n rate = this.state.client.hourly_rate ? this.state.client.hourly_rate : this.props.common.currentUser.standard_hourly_rate;\n }\n\n if (value === 'days') {\n rate = this.state.client.day_rate ? this.state.client.day_rate : this.props.common.currentUser.standard_day_rate;\n }\n\n newData = update(this.state, {\n 'project': {\n 'project_rate_value': {$set: rate},\n 'project_rate_unit': {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n updateColour(color) {\n this.updateField('client.hex_colour', color.hex)\n\n this.setState({\n displayColorPicker: false\n })\n\n }\n\n setClient(e, client) {\n\n e.stopPropagation();\n\n this.setState({\n ...this.state,\n overlay: 'new_project',\n overlay_history: this.state.overlay_history.concat('new_project'),\n counter: this.state.counter + 1,\n projects: this.state.projects,\n client: client,\n project: {\n title: '',\n billing_type: 'fixed_price',\n client_id: client.id,\n amount: '',\n estimated_time_unit: 'days',\n estimated_time_value: 1,\n project_rate_unit: 'days',\n project_rate_value: client.day_rate\n },\n estimated: 0,\n results: false,\n keyword: false\n })\n\n this.searchClientsRef.current.value = ''\n this.searchClientsRef.current.blur()\n\n }\n\n setupNewClient(e) {\n\n var r = ((Math.floor(Math.random() * 255) + 255) / 2);\n var g = ((Math.floor(Math.random() * 255) + 255) / 2);\n var b = ((Math.floor(Math.random() * 255) + 255) / 2);\n var random_colour = 'rgb(' + r + ', ' + g + ', ' + b + ')';\n\n this.setState({\n ...this.state,\n overlay: 'new_client',\n overlay_history: this.state.overlay_history.concat('new_client'),\n counter: this.state.counter + 1,\n client: {\n name: this.state.keyword ? this.state.keyword : '',\n hex_colour: random_colour,\n day_rate: this.props.common.currentUser.standard_day_rate,\n hourly_rate: this.props.common.currentUser.standard_hourly_rate,\n preferred_billing_unit: 'days',\n address_line_1: '',\n address_line_2: '',\n city: '',\n country: '',\n postal_code: '',\n payment_terms: 30,\n invoice_schedule: 'end_of_month',\n currency: this.props.common.currentUser.currency\n },\n results: false,\n keyword: false\n })\n\n this.searchClientsRef.current.value = ''\n this.searchClientsRef.current.blur()\n\n }\n\n createClient(e, clientName) {\n\n // validate email if provided\n if( this.state.client.email && !validateEmail(this.state.client.email) ) {\n return false;\n }\n\n let newData;\n\n // pro-rata day rate\n if (this.state.client.preferred_billing_unit === 'hours') {\n\n newData = update(this.state.client, {\n day_rate: {$set: this.state.client.hourly_rate * this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n // pro-rata hourly rate\n if (this.state.client.preferred_billing_unit === 'days') {\n newData = update(this.state.client, {\n hourly_rate: {$set: this.state.client.day_rate / this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n // create the client\n this.props.newClient( newData );\n\n this.setState({\n newData,\n loading: true\n })\n\n let that = this;\n let timer = setInterval(function() {\n\n let new_client = that.props.clients.clients.filter(function (el) {\n return el.name === clientName\n });\n\n if (new_client[0]) {\n\n clearInterval(timer);\n\n let client = new_client[0]\n\n let overlay_history = that.state.overlay_history;\n\n let newState = {\n ...that.state,\n overlay: 'new_project',\n overlay_history: overlay_history.splice(0, overlay_history.length-1).concat('new_project'),\n project: {\n title: '',\n billing_type: 'fixed_price',\n client_id: client.id,\n amount: '',\n estimated_time_unit: 'days',\n estimated_time_value: 1,\n project_rate_unit: 'days',\n project_rate_value: client.day_rate\n },\n estimated: 0,\n keyword: false\n }\n\n that.setState(newState);\n\n }\n\n }, 100);\n\n // cleanup\n newData = null;\n\n }\n\n setProject(e, project) {\n\n e.stopPropagation();\n\n this.setState({\n overlay: 'schedule',\n overlay_history: this.state.overlay_history.concat('schedule'),\n counter: this.state.counter + 1,\n project: project,\n project_id: project.id,\n results: false,\n keyword: false\n });\n\n }\n\n createProject(e, projectName) {\n\n this.setState({\n loading: true\n })\n\n // create the project\n this.props.newProject( this.state.project );\n\n let that = this;\n let timer = setInterval(function() {\n\n let new_project = that.props.projects.projects.filter(function (el) {\n return el.title === projectName\n });\n\n if (new_project[0]) {\n\n clearInterval(timer);\n\n if( new_project[0].billing_type === 'fixed_price') {\n\n that.getAvailability(new_project[0]);\n\n } else {\n\n history.push('/projects/' + new_project[0].slug);\n\n that.props.closeOverlay(e)\n\n }\n\n }\n\n }, 100);\n\n }\n\n getAvailability(project) {\n\n // get availability\n this.props.getAvailability(\n dateFns.format(new Date(), 'DD-MM-YYYY'),\n dateFns.format( dateFns.addDays(new Date(), 90), 'DD-MM-YYYY')\n );\n\n let overlay_history = this.state.overlay_history;\n\n let that = this\n\n let timer = setInterval(function() {\n\n if (that.props.schedule.availability) {\n\n clearInterval(timer);\n\n let dates = AvailabilityDateBuilder(project, that.props.schedule.availability.dates, that.props.common.currentUser, undefined)\n\n let newState = {\n ...that.state,\n project: project,\n overlay: 'auto-populate',\n overlay_history: overlay_history.splice(0, overlay_history.length-1).concat('auto-populate'),\n dates: dates,\n loading: false\n }\n\n that.setState(newState);\n\n }\n\n });\n\n }\n\n closeAvailability(e, project) {\n history.push('/projects/' + project.slug);\n this.props.closeOverlay(e)\n }\n\n updateProject(e, project) {\n this.props.updateProject( this.state.project );\n }\n\n deleteProject = () => {\n\n this.setState({\n overlay: 'delete',\n overlay_history: this.state.overlay_history.concat('delete'),\n counter: this.state.counter + 1,\n });\n\n }\n\n confirmCancelProject = (project) => {\n\n this.props.transitionState( this.state.project, 'cancelled' );\n\n }\n\n confirmDeleteProject = (e, project) => {\n\n e.stopPropagation();\n\n this.props.deleteProject( this.state.project, this.state.prompt );\n\n }\n\n autoPopulateSchedule(e, project, dates) {\n\n e.stopPropagation();\n\n let newData = update(project, {\n state: {$set: 'active' }\n })\n\n this.props.autoPopulateSchedule(newData, dates);\n\n this.setState({\n loading: true\n })\n\n }\n\n checkProjectName(e, name) {\n\n e.stopPropagation();\n\n if (name === this.state.project.title) {\n\n this.setState({\n can_delete: true,\n prompt: name\n });\n\n } else {\n\n this.setState({\n can_delete: false,\n prompt: name\n });\n\n }\n\n }\n\n handleClick = () => {\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\n };\n\n handleClose = () => {\n this.setState({ displayColorPicker: false })\n };\n\n render() {\n\n const close =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M19 5L5 19M19 19L5 5\"/>\n </g>\n </svg>\n\n const price =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"10\" r=\"1.5\"/><path d=\"M.5 2.5v11a2 2 0 002 2h13v-11h-13a2 2 0 01-2-2h0a2 2 0 012-2h9v2\"/>\n </g>\n </svg>\n\n const arrow =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M2 12h20M15 5l7 7-7 7\"/>\n </g>\n </svg>\n\n const client =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"currentColor\" stroke=\"currentColor\">\n <path fill=\"none\" strokeMiterlimit=\"10\" d=\"M24 2C11.85 2 2 11.85 2 24v18s6 4 22 4 22-4 22-4V24c0-12.15-9.85-22-22-22z\"/>\n <path fill=\"none\" strokeMiterlimit=\"10\" d=\"M28.577 8.673c-5.07 5.049-11.822 8.409-19.344 9.164C8.441 19.734 8 21.815 8 24c0 8.837 7.163 16 16 16s16-7.163 16-16c0-7.245-4.818-13.357-11.423-15.327z\"/>\n <circle fill=\"none\" strokeMiterlimit=\"10\" cx=\"17\" cy=\"25\" r=\"1\"/>\n <circle fill=\"none\" strokeMiterlimit=\"10\" cx=\"31\" cy=\"25\" r=\"1\"/>\n <circle data-stroke=\"none\" cx=\"17\" cy=\"25\" r=\"1\" stroke=\"none\"/>\n <circle data-stroke=\"none\" cx=\"31\" cy=\"25\" r=\"1\" stroke=\"none\"/>\n </g>\n </svg>\n\n const cancel =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\">\n <circle cx=\"8\" cy=\"8\" r=\"7.5\"/>\n <path d=\"M2.697 13.303L13.303 2.697\"/>\n </g>\n </svg>\n\n const icon_delete =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-miterlimit=\"10\">\n <path d=\"M2.5 6.5v7c0 1.105.895 2 2 2h7c1.105 0 2-.895 2-2v-7M.5 3.5h15M5.5 3.5v-3h5v3\"/>\n </g>\n </svg>\n\n return (\n ReactDOM.createPortal(\n\n <FocusTrap>\n <div className=\"focus\">\n <div className={`overlay__blocks counter__${this.state.counter} ${this.state.initialLoad && 'initialLoad'}`}>\n\n {this.state.overlay_history.includes('client') && (\n <div className={this.props.clients.clients.length === 0 ? 'overlay__block empty' : 'overlay__block client'}>\n {this.props.clients.clients.length === 0 && (\n <div className=\"empty\">\n { client }\n <span>Add your first client.</span>\n </div>\n )}\n <div className=\"header\">\n <input\n autoFocus={true}\n ref={this.searchClientsRef}\n onKeyUp={(e) => this.search(e, 'clients')}\n type=\"text\"\n placeholder={ this.props.clients.clients.length === 0 ? 'Client Name' : 'Search Clients...'} />\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n {(this.state.results ? this.state.results : this.state.clients).map((el) => {\n return (\n <div\n key={el.name}\n className=\"item padding border rounded\"\n onClick={(e) => this.setClient(e, el)}>{el.name}</div>\n )\n })}\n {this.state.keyword.length > 1 ? (\n <React.Fragment>\n <div className=\"divider padding\"></div>\n <div\n className=\"new padding border rounded\"\n onClick={(e) => this.setupNewClient(e)}>Create a client called ­<b>{this.state.keyword}</b> { arrow }</div>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <div className=\"divider padding\"></div>\n <div\n className=\"new padding border rounded\"\n onClick={(e) => this.setupNewClient(e)}>Create a new client { arrow }</div>\n </React.Fragment>\n )}\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('new_client') && (\n <div className=\"overlay__block new_client overflow\">\n <div className=\"header\">\n <input\n type=\"text\"\n ref={this.clientTitleRef}\n value={this.state.client.name}\n placeholder=\"Client Name...\"\n onChange={(e) => this.updateField('client.name', e.target.value)} />\n <button\n onClick={(e) => this.setOverlay(e, 'client', 'back')}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n <div className=\"flex\">\n <textarea\n type=\"text\"\n placeholder=\"Address...\"\n value={this.state.client.address}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.address', e.target.value)} />\n </div>\n <label className=\"flex padding\">\n <div className=\"date\">Contact Name</div>\n <div\n className=\"input text\">\n <input\n type=\"text\"\n placeholder=\"Optional\"\n value={this.state.client.contact_name}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.contact_name', e.target.value)} />\n </div>\n </label>\n <label className=\"flex padding border\">\n <div className=\"date\">Email Address</div>\n <div\n className=\"input text\">\n <input\n type=\"text\"\n placeholder=\"Optional\"\n value={this.state.client.email}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.email', e.target.value)} />\n </div>\n </label>\n <label className=\"flex padding border\">\n <div className=\"date\">Colour</div>\n <div className=\"picker\">\n <div\n className=\"preview\"\n style={{backgroundColor: this.state.client.hex_colour}}\n onClick={ this.handleClick }>\n </div>\n { this.state.displayColorPicker && <div className=\"popover\">\n <div className=\"popover__cover\" onClick={ this.handleClose }/>\n <TwitterPicker\n color={ this.state.client.hex_colour }\n onChangeComplete={this.updateColour.bind(this)}/>\n </div>}\n </div>\n </label>\n <div className=\"flex padding border\">\n <div className=\"date\">Currency</div>\n <Select\n className=\"react-select-container\"\n classNamePrefix=\"react-select\"\n options={currencies}\n defaultValue={currencies.filter((el) => { return el.value === this.state.client.currency})}\n menuPlacement=\"auto\"\n onChange={(e) => this.updateField('client.currency', e.value)}\n components={{ Input, DropdownIndicator }}\n />\n </div>\n <div className=\"flex padding border\">\n <div className=\"date\">How do you want to bill {this.state.client.name}?</div>\n <Dropdown\n client={this.state.client}\n currency={this.props.common.currentUser.currency}\n content=\"preferred_billing_unit\"\n onChange={this.updateField.bind(this)} />\n </div>\n {this.state.client.preferred_billing_unit !== 'projects' && (\n this.state.client.preferred_billing_unit === 'hours' ? (\n <div className=\"flex padding border\">\n <div className=\"date\">How much do you charge per hour?</div>\n <div\n className={`input currency`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.client.hourly_rate.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.hourly_rate', this.numericOnly(e.target.value))} />\n </div>\n </div>\n ) : (\n <div className=\"flex padding border\">\n <div className=\"date\">How much do you charge per day?</div>\n <div\n className={`input currency`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.client.day_rate.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.day_rate', this.numericOnly(e.target.value))} />\n </div>\n </div>\n )\n )}\n </div>\n <div className=\"actions\">\n <button\n ref={this.clientButtonRef}\n className={this.state.loading ? 'btn btn__loading' : 'btn'}\n disabled={this.state.loading || isEmpty(this.state.client.name)}\n onClick={(e) => this.createClient(e, this.state.client.name)}>\n <div className=\"loader loader__button\"></div>\n <span>Save & Continue</span>\n </button>\n </div>\n </div>\n )}\n\n {(this.state.overlay_history.includes('project') || this.state.overlay_history.includes('new_project')) && (\n <div className=\"overlay__block new_project overflow\">\n <div className=\"header\">\n <input\n autoFocus={true}\n ref={this.projectTitleRef}\n className=\"form-control\"\n type=\"text\"\n placeholder=\"Project Name...\"\n value={this.state.project.title}\n onChange={(e) => this.updateField('project.title', e.target.value)} />\n {this.state.overlay_history.includes('new_project') ? (\n <button\n onClick={(e) => this.setOverlay(e, 'client', 'back')}>\n {close}\n </button>\n ) : (\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n )}\n </div>\n <div className=\"content\">\n <div className=\"flex\">\n <textarea\n className=\"form-control\"\n type=\"text\"\n placeholder=\"Description...\"\n value={this.state.project.description ? this.state.project.description : ''}\n onChange={(e) => this.updateField('project.description', e.target.value)}></textarea>\n </div>\n\n <div className=\"tabs\">\n\n <div className=\"title\">I want to bill this project by...</div>\n\n <div className=\"options tabs\">\n <button\n className={this.state.project.billing_type === 'time_spent' ? 'selected' : ''}\n onClick={(e) => this.updateField('project.billing_type', 'time_spent')}>Time Spent</button>\n <button\n className={this.state.project.billing_type === 'fixed_price' ? 'selected' : ''}\n onClick={(e) => this.updateField('project.billing_type', 'fixed_price')}>Fixed Price</button>\n </div>\n\n </div>\n\n {this.state.project.billing_type === 'time_spent' ? (\n <React.Fragment>\n <div className=\"flex padding border\">\n <div className=\"date\">How do you want to bill this project?</div>\n <Dropdown\n project={this.state.project}\n content=\"project_rate_unit\"\n onChange={this.updateField.bind(this)} />\n </div>\n <div className=\"flex padding border\">\n <div className=\"date\">How much do you charge per {this.state.project.project_rate_unit === 'hours' ? 'hour' : 'day'}?</div>\n <div\n className={`input currency`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.project.project_rate_value.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('project.project_rate_value', this.numericOnly(e.target.value))} />\n </div>\n </div>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <div className=\"flex padding border\">\n <div className=\"date\">What is your fixed price?</div>\n <div\n className={`input currency`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n className=\"fixed_price\"\n innerRef={this.fixedPriceRef}\n html={this.state.project.amount.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('project.amount', this.numericOnly(e.target.value))} />\n </div>\n </div>\n <div className=\"flex padding border\">\n <div className=\"date\">How long do you think this will take?</div>\n <div className=\"double\">\n <div\n className=\"input number\"\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.project.estimated_time_value.toString()}\n onKeyDown={(e) => this.keyPress(e, 'project.estimated_time_value')}\n onChange={(e) => this.updateField('project.estimated_time_value', this.numericOnly(e.target.value))} />\n </div>\n <Dropdown\n project={this.state.project}\n content=\"estimated_time_unit\"\n onChange={this.updateField.bind(this)} />\n </div>\n </div>\n </React.Fragment>\n )}\n <div className=\"flex padding border\">\n <div className=\"date\">Do you have a deadline?</div>\n <Dropdown\n project={this.state.project}\n content=\"deadline\"\n onChange={this.updateField.bind(this)} />\n </div>\n </div>\n <div className=\"actions\">\n { this.state.project.billing_type === 'fixed_price' && (\n <div className=\"totals\">\n <div>\n <PriceIcon />\n { this.formatPrice(this.state.estimated, this.state.client ? this.state.client.currency : this.props.common.currentUser.currency) }/{this.state.project.estimated_time_unit.slice(0, -1)} <Tooltip message={`This is an estimate based on your fixed price and the length of time you expect this project to take.`} position={'top'} size={'large'}><Info /></Tooltip>\n </div>\n </div>\n )}\n {this.state.overlay_history.includes('new_project') ? (\n <button\n ref={this.projectButtonRef}\n disabled={this.props.common.loading}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.createProject(e, this.state.project.title)}>\n <div className=\"loader loader__button\"></div>\n <span>Create Project</span>\n </button>\n ) : (\n <div className=\"buttons\">\n <ProjectOptions\n content=\"small\"\n project={this.state.project}\n confirmCancelProject={this.confirmCancelProject}\n deleteProject={this.deleteProject} />\n <button\n ref={this.projectButtonRef}\n disabled={this.props.common.loading}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.updateProject(e, this.state.project)}>\n <div className=\"loader loader__button\"></div>\n <span>Update</span>\n </button>\n </div>\n )}\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('auto-populate') && (\n <div className=\"overlay__block\">\n <div className=\"header\">\n <h2>Auto-populate Schedule</h2>\n <button\n disabled={this.state.loading}\n onClick={(e) => this.closeAvailability(e, this.state.project)}>\n {close}\n </button>\n </div>\n {!this.state.dates ? (\n <div className=\"content\">\n <div className=\"padding\">\n <div className=\"loading\"><div className=\"loader\"></div></div>\n </div>\n </div>\n ) : (\n <React.Fragment>\n <div className=\"content\">\n <div className=\"padding\">\n <p>You still need to schedule {this.state.project.estimate_remaining} for this project. We've found some free dates in your schedule,\n do you want to set them aside for this project?</p>\n <ul className=\"dates\">\n {this.state.dates.map((el) => {\n\n var time_formatted;\n\n if (this.state.project.estimated_time_unit === 'hours') {\n var calc = String(el.unit_value_formatted).split('.')\n var calc_hours = parseFloat(calc[0])\n var calc_minutes = parseFloat('0.'+calc[1]) * 60\n time_formatted = calc_hours + 'h ' + calc_minutes.toFixed() + 'm'\n }\n\n return (\n <li>\n {dateFns.format(el.date, 'ddd D MMMM YYYY')}\n <span>{ this.state.project.estimated_time_unit === 'days' ? el.unit_value_formatted : time_formatted}</span>\n </li>\n )\n })}\n </ul>\n </div>\n </div>\n <div className=\"actions\">\n <div>\n <button\n disabled={this.state.loading}\n className=\"btn btn__outline\" onClick={(e) => this.closeAvailability(e, this.state.project)}>\n Skip\n </button>\n </div>\n <button\n className={this.state.loading ? 'btn btn__loading' : 'btn'}\n disabled={this.state.loading}\n onClick={(e) => this.autoPopulateSchedule(e, this.state.project, this.state.dates)}>\n <div className=\"loader loader__button\"></div>\n <span>Add to my Schedule</span>\n </button>\n </div>\n </React.Fragment>\n )}\n </div>\n )}\n\n {this.state.overlay_history.includes('delete') && (\n <div className=\"overlay__block delete\">\n <div className=\"header\">\n <h2>Delete {this.state.project.title}</h2>\n <button\n onClick={(e) => this.setOverlay(e, 'project', 'back')}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n <div className=\"padding\">\n <div className=\"option delete\">\n <p>Deleting this project cannot be undone. This will delete everything related to this project, include any work added to it. There is no going back.</p>\n <div className=\"field\">\n <label>\n <span className=\"simple\">Please type <b>{this.state.project.title}</b> to confirm.</span>\n <input\n onKeyDown={(e) => this.keyPress(e)}\n onKeyUp={(e) => this.checkProjectName(e, e.target.value)}\n className=\"form-control\"\n type=\"text\" />\n </label>\n </div>\n <button\n ref={this.deleteProjectButtonRef}\n disabled={!this.state.can_delete || this.props.common.loading}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn btn__delete'}\n onClick={(e) => this.confirmDeleteProject(e, this.state.project)}>\n <div className=\"loader loader__button\"></div>\n <span>Delete {this.state.project.title} (cannot be undone)</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('invoice') && (\n <div className=\"overlay__block delete\">\n <div className=\"header\">\n <h2>That's a wrap</h2>\n <button\n onClick={(e) => this.props.closeOverlay(e) }>\n {close}\n </button>\n </div>\n <div className=\"content\">\n <div className=\"padding\">\n <div className=\"option delete\">\n <p>Great work on finishing this project! Don't forget to create an invoice for it so you can \n get paid as soon as possible.</p>\n <Link\n className=\"btn btn__inline\"\n to={`/invoices/new?project_id=${this.state.project.id}&client_id=${this.state.project.client_id}¤cy=${this.state.project.currency}`}>\n <span>Create Invoice</span>\n </Link>\n </div>\n </div>\n </div>\n </div>\n )}\n\n </div>\n\n <div\n className=\"overlay__bg\"\n disabled={this.state.loading}\n onClick={(e) => this.props.closeOverlay(e) }></div>\n\n <ListErrors errors={this.props.errors} />\n\n </div>\n </FocusTrap>,\n document.querySelector('.overlay')\n )\n )\n\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Overlay);\n","export const AvailabilityDateBuilder = (project, availableDates, currentUser, clientDayRate) => {\n let time_outstanding = (project.estimated_time_unit === 'hours' ? project.estimated_time_value : project.estimated_time_value * currentUser.hours_per_day) - project.amount_scheduled_time;\n let dates = [];\n\n availableDates.map((date) => {\n if(time_outstanding <= 0 ){\n return\n }\n var remaining_hours = parseFloat(date.remaining_hours)\n if(project.estimated_time_unit === 'days' && remaining_hours >= currentUser.hours_per_day){\n dates.push({\n date: date.date,\n price: (project.project_rate_value !== null) ? project.project_rate_value : clientDayRate,\n unit: 'days',\n unit_value: 1,\n unit_value_formatted: 'All-day',\n project_id: project.id,\n client_id: project.client_id\n })\n time_outstanding -= remaining_hours;\n }else if(project.estimated_time_unit === 'hours'){\n let hoursToUse = (remaining_hours > time_outstanding) ? time_outstanding : remaining_hours\n dates.push({\n date: date.date,\n price: (project.project_rate_value !== null) ? project.project_rate_value : clientDayRate,\n unit: 'hours',\n unit_value: hoursToUse,\n unit_value_formatted: hoursToUse + ' hour(s)',\n project_id: project.id,\n client_id: project.client_id\n })\n time_outstanding -= hoursToUse;\n }\n\n })\n\n return dates;\n}\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\n\nlet scrollPosition = 0;\n\nconst Filter = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (filter, value, persist) => {\n props.onChange(filter,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n useEffect(() => {\n\n var element = node.current;\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.addEventListener(\"scroll\", handleScroll);\n\n const dropdown_menu = document.querySelector('#dropdown__menu');\n const position_top = ((element.offsetParent.offsetTop + element.offsetTop + element.offsetHeight + 8) - scrollPosition);\n \n // set default position\n dropdown_menu.style.top = position_top + 'px';\n\n // get bounds now dropdown has default position\n const dropdown_menu_bounds = dropdown_menu.getBoundingClientRect();\n\n // dropdown outside window, recalculate position\n if ( dropdown_menu_bounds.bottom > window.innerHeight ) {\n const position_recalc = ((element.offsetParent.offsetTop + element.offsetTop - 8) - scrollPosition) - dropdown_menu.offsetHeight;\n dropdown_menu.style.top = position_recalc + 'px';\n }\n\n // finally, show dropdown (to stop position popping effect)\n dropdown_menu.style.visibility = 'visible';\n\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n return (\n <div ref={node} className={props.disabled ? 'dropdown disabled' : 'dropdown'}>\n <button\n className={props.border ? 'dropdown-toggler border' : 'dropdown-toggler'}\n onClick={e => setOpen(!open)}>\n <span>{props.filter === 'Started' ? 'Active' : props.filter}</span>\n <svg width=\"9\" height=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(-70 -18)\" fill=\"#1282FF\" fillRule=\"evenodd\">\n <path fill=\"currentColor\" d=\"M78.3013153 26.17460431c.15974318.18636704.15830762.45647696.00876349.64041738l-.0629961.06460661-3.5 3c-.16383926.1404336-.39586261.1579879-.57674789.0526626l-.07404349-.0526626-3.5-3c-.20966292-.17971107-.23394369-.49536107-.05423261-.70502399.15974318-.18636704.42689488-.22625929.63154276-.10660658l.07348123.05237397L74.42167794 28.841l3.17461337-2.7206283c.20966292-.17971108.52531292-.15543031.70502399.05423261zm-3.6282761-8.10689523l.07404349.05266262 3.5 3c.20966292.17971107.23394369.49536107.05423261.70502399-.15974318.18636704-.42689488.22625929-.63154276.10660658l-.07348123-.05237397L74.42167794 19.158l-3.17459525 2.7216283c-.18636704.15974318-.45647696.15830762-.64041739.00876349l-.0646066-.0629961c-.15974318-.18636704-.15830762-.45647696-.0087635-.64041738l.06299611-.06460661 3.5-3c.16383926-.14043365.39586261-.15798786.57674789-.05266262z\" opacity=\".5\" fillRule=\"nonzero\"/>\n </g>\n </svg>\n </button>\n {open && (\n ReactDOM.createPortal(\n <div\n style={{position: 'absolute', visibility: 'hidden', right: '32px' }}\n id=\"dropdown__menu\" className={`dropdown__menu ` + props.content}>\n <div className=\"list\">\n {props.filters.map(filter => {\n return (\n <div\n className={filter === props.filter ? 'item selected' : 'item'}\n onClick={e => handleChange('project_state', filter )}>\n {filter === 'Started' ? 'Active' : filter}\n </div>\n )\n })}\n </div>\n </div>, document.querySelector('.filter')\n )\n )}\n </div>\n );\n};\n\nexport default Filter;\n","import React from 'react';\nexport class Landing extends React.Component {\n render() {\n const icon = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"5\" y=\"5\" width=\"54\" height=\"54\" rx=\"5\" />\n <path d=\"M5 39h17v8h20v-8h17M16 30h16M16 22h32M16 14h32\" />\n </g>\n </svg>;\n return (!this.props.match.params.slug && (<div className=\"empty__list\">\n {icon}\n <p>Choose a project...</p>\n </div>));\n }\n}\n","import React from 'react';\nimport dateFns from 'date-fns';\nimport Tooltip from '../Tooltip';\nimport {ReactComponent as NoteIcon} from '../../images/note.svg';\n\nexport class Item extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n id: props.day.id,\n state: props.day.state\n };\n }\n invoiceWork(project, day) {\n this.props.invoiceWork(project, day);\n }\n rollbackInvoiceWork(project, day) {\n this.props.rollbackInvoiceWork(project, day);\n }\n render() {\n const day = this.props.day;\n return (\n <div className={`item booked invoice ${day.state === 'invoiced' ? 'invoiced' : ''}`}>\n <span className=\"date\">\n {dateFns.format(day.date, 'ddd D MMMM YYYY')} ({day.unit === 'days' ? 'All-day' : `${day.unit_value_formatted}`})\n {day.note && (<Tooltip message={`${day.note}`} position={'top'} size={'large'}><NoteIcon /></Tooltip>)}\n </span>\n <div className=\"status\">\n {(this.props.project.billing_type == 'fixed_price') ? '' : day.state}\n </div>\n </div>\n );\n }\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M20 0c.5128358 0 .9355072.38604019.9932723.88337888L21 1v15c0 .5522847-.4477153 1-1 1-.5128358 0-.9355072-.3860402-.9932723-.8833789L19 16V2H2v18.5c0 .7799673.59463286 1.4204806 1.35549495 1.4931362L3.5 22h.93l.061097-.0074159c.15872778-.0266995.37963462-.0870923.60654937-.189877l.17043488-.085173C5.75004509 21.452454 6 21.0900194 6 20.5V19c0-.5522847.44771525-1 1-1h16c.5522847 0 1 .4477153 1 1v1.5c0 1.9332847-1.5667153 3.5-3.5 3.5h-17C1.63115808 24 .10485498 22.5359916.00517793 20.6920621L0 20.5V1C0 .48716416.38604019.06449284.88337888.00672773L1 0h19zm2 20H8v.5c0 .536173-.10398058 1.0146062-.29461802 1.4340729L7.672 22H20.5c.7799673 0 1.4204806-.5946329 1.4931362-1.3554949L22 20.5V20zm-8-7c.5522847 0 1 .4477153 1 1 0 .5128358-.3860402.9355072-.8833789.9932723L14 15H7c-.55228475 0-1-.4477153-1-1 0-.5128358.38604019-.9355072.88337887-.9932723L7 13h7zm0-4c.5522847 0 1 .44771525 1 1 0 .5128358-.3860402.9355072-.8833789.9932723L14 11H7c-.55228475 0-1-.4477153-1-1 0-.51283584.38604019-.93550716.88337887-.99327227L7 9h7zm0-4c.5522847 0 1 .44771525 1 1 0 .51283584-.3860402.93550716-.8833789.99327227L14 7H7c-.55228475 0-1-.44771525-1-1 0-.51283584.38604019-.93550716.88337887-.99327227L7 5h7z\"\n});\n\nvar SvgInvoice = function SvgInvoice(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgInvoice, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/invoice.beeef9c9.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport dateFns from 'date-fns';\nimport _ from 'lodash';\nimport { history } from '../../configureStore';\nimport { Item } from './Item';\nimport {ReactComponent as ErrorIcon} from '../../images/error.svg';\nimport Tooltip from '../Tooltip';\nimport { ResponsiveContainer, PieChart, Pie, Cell } from 'recharts';\nimport {ReactComponent as TimeIcon} from '../../images/icons/time.svg';\nimport {ReactComponent as PriceIcon} from '../../images/icons/price.svg';\nimport {ReactComponent as InvoiceIcon} from '../../images/icons/invoice.svg';\nimport {ReactComponent as ToggleIcon} from '../../images/icons/toggle.svg';\nimport {ReactComponent as CalendarIcon} from '../../images/icons/calendar.svg';\n\nimport agent from '../../agent';\nimport {\n REQUEST_PROJECTS,\n PROJECT_LOADED\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = (state, ownProps) => (\n {\n loading: state.common.loading\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n\n onLoad: (payload) => {\n dispatch({ type: REQUEST_PROJECTS })\n dispatch({ type: PROJECT_LOADED, payload: payload })\n },\n\n});\n\nclass Project extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n tab: 'schedule'\n }\n\n }\n\n componentDidMount(){\n\n this.props.onLoad(\n agent.Projects.show( this.props.match.params.slug )\n );\n\n }\n\n componentDidUpdate(prevProps,prevState){\n\n if(prevProps.match.params.slug !== this.props.match.params.slug) {\n\n this.props.onLoad(\n agent.Projects.show( this.props.match.params.slug )\n );\n\n }\n\n }\n\n toggleMonth(e, month) {\n\n e.stopPropagation();\n document.querySelector(`[data-month='${month}']`).classList.toggle('collapsed');\n\n }\n\n updateProject(e, id, state, invoice) {\n\n this.props.transitionState(id, state, invoice);\n\n if (invoice && this.props.project.billing_type === \"fixed_price\") {\n this.props.openOverlay(e, 'invoice', this.props.project)\n }\n\n }\n\n switchTabs(e, tab) {\n\n e.stopPropagation();\n\n this.setState({\n tab: tab\n });\n\n }\n\n render() {\n\n if (this.props.isFetching || !this.props.project) {\n\n return (\n <div className=\"loading\"><div className=\"loader\"></div></div>\n )\n\n }\n\n const issues = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" fill=\"none\" stroke=\"#c31840\" stroke-miterlimit=\"10\">\n <circle cx=\"32\" cy=\"32\" r=\"29\"/>\n <path d=\"M32 14v25\"/>\n <circle cx=\"32\" cy=\"47\" r=\"1\"/>\n </g>\n </svg>;\n\n const finished = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g stroke-width=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M2.5 22.5a7 7 0 007-7 7 7 0 007 7M2.5 22.5a7 7 0 017 7 7 7 0 017-7M48.5 22.5a7 7 0 007-7 7 7 0 007 7M48.5 22.5a7 7 0 017 7 7 7 0 017-7M38.283 9.701l-3.996-.581L32.5 5.5l-1.787 3.62-3.996.581 2.891 2.819-.682 3.98 3.574-1.878 3.574 1.878-.682-3.98 2.891-2.819zM59.244 48.701l-3.996-.581-1.787-3.62-1.788 3.62-3.996.581 2.892 2.819-.683 3.98 3.575-1.878 3.574 1.878-.683-3.98 2.892-2.819zM17.283 47.701l-3.996-.581L11.5 43.5l-1.787 3.62-3.996.581 2.891 2.819-.682 3.98 3.574-1.878 3.574 1.878-.682-3.98 2.891-2.819zM47.5 29.5a13.337 13.337 0 00-9 7M17.5 29.5a13.337 13.337 0 019 7M17.5 42.5a11.743 11.743 0 015-.426c4.363.591 10 4.126 10 18.426M47.5 42.5a11.743 11.743 0 00-5-.426c-4.363.591-10 4.126-10 18.426M32.5 22.5v18\" />\n </g>\n </svg>;\n\n const on_track = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g stroke-width=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" transform=\"translate(.5 .5)\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M18 34l8 8 20-20\" />\n <circle cx=\"32\" cy=\"32\" r=\"29\" />\n </g>\n </svg>;\n\n const not_started = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g stroke-width=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M10.5 6.5h48v32h-48M10.5 22.5h48M26.5 6.5v32M42.5 6.5v32M10.5 2.5v60\" />\n </g>\n </svg>;\n\n const cancelled = <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\">\n <g stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" transform=\"translate(.5 .5)\" fill=\"none\" stroke=\"currentColor\" stroke-miterlimit=\"10\">\n <path d=\"M52.493 11.507L11.507 52.493\" />\n <circle cx=\"32\" cy=\"32\" r=\"29\" />\n </g>\n </svg>;\n\n // redirect if project not found\n if (!this.props.project) {\n history.push('/projects');\n return false;\n }\n\n const data = [\n { name: 'worked', value: this.props.project.amount_worked_percentage },\n { name: 'remaining', value: this.props.project.estimate_remaining_percentage }\n ];\n const COLORS = ['#1381FF', '#78b0fd'];\n\n const work = this.props.project.months_worked.map(hash => {\n\n var work = _.orderBy(_.values(_.pickBy(this.props.project.work_days,function(value, key){\n return value.month_name === hash.month_name;\n })), ['date'],['desc']);\n\n if (!work.length) {\n return '';\n }\n\n return (\n <div className=\"block\" key={hash.month_name} data-month={hash.month_name}>\n <header onClick={(e) => this.toggleMonth(e, hash.month_name)}>\n <h3>\n <Link to={{\n pathname: `/month/${hash.month}/${hash.year}`,\n state: {\n trigger: 'click'\n }\n }}>\n {hash.month_name}\n </Link>\n </h3>\n <div>\n <span>{hash.amount_worked_string} ({hash.revenue})</span>\n <button>\n <ToggleIcon />\n </button>\n </div>\n </header>\n <div className=\"list\">\n {work.map(day => <Item day={day} project={this.props.project} invoiceWork={this.props.invoiceWork} rollbackInvoiceWork={this.props.rollbackInvoiceWork} />)}\n </div>\n </div>\n )\n\n })\n\n var you_have_contextual = this.props.project.state == 'finished' ? 'You' : \"You've\"\n\n return (<React.Fragment>\n <div className=\"summary\">\n\n <div className=\"data\">\n\n <header>\n <div>\n <span>{this.props.project.client_name}</span>\n <h2>{this.props.project.title}</h2>\n </div>\n {this.props.project.billing_type === 'fixed_price' && (\n <Tooltip message={`You've worked ${this.props.project.amount_worked_percentage}% of your estimate`} position={'bottom'} size={'large'}>\n <PieChart width={96} height={48}>\n <Pie\n isAnimationActive={false}\n data={data}\n startAngle={180}\n endAngle={0}\n cy={48}\n innerRadius={32}\n outerRadius={48}\n paddingAngle={0}\n dataKey=\"value\"\n >\n {\n data.map((entry, index) => <Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} strokeWidth={0} />)\n }\n </Pie>\n </PieChart>\n </Tooltip>\n )}\n </header>\n {this.props.project.billing_type === 'fixed_price' && (\n <div className=\"row\">\n <div className=\"title\">\n <PriceIcon />\n <h4>\n You're charging a fixed price of {this.props.project.amount_formatted}.\n {this.props.project.amount_formatted !== this.props.project.amount_in_base_currency_formatted && (\n <span> That's approximately {this.props.project.amount_in_base_currency_formatted}</span>\n )}\n </h4>\n </div>\n </div>\n )}\n {this.props.project.billing_type === 'time_spent' && (\n <div className=\"row\">\n <div className=\"title\">\n <PriceIcon />\n <h4>You're charging {this.props.project.project_rate_value_formatted}/{this.props.project.project_rate_unit_formatted}.\n {this.props.project.project_rate_value_formatted !== this.props.project.project_rate_value_in_base_currency_formatted && (\n <span> That's approximately {this.props.project.project_rate_value_in_base_currency_formatted}/{this.props.project.project_rate_unit_formatted}</span>\n )}\n </h4>\n\n </div>\n </div>\n )}\n {this.props.project.amount_invoiced > 0 && (\n <div className=\"row\">\n <div className=\"title\">\n <InvoiceIcon />\n <h4>\n You've invoiced for {this.props.project.amount_invoiced_string} {this.props.project.amount_uninvoiced > 0 && (\n `and have ${this.props.project.amount_uninvoiced_string} uninvoiced`\n )}.\n </h4>\n </div>\n </div>\n )}\n {this.props.project.deadline && (\n <div className=\"row\">\n <div className=\"title\">\n <CalendarIcon />\n <h4>{ you_have_contextual } set a deadline of {dateFns.format(this.props.project.deadline, 'D MMMM YYYY')} {(dateFns.isAfter(Date.now(), this.props.project.deadline) && this.props.project.state == 'active') && ' (Overdue)'}</h4>\n </div>\n </div>\n )}\n </div>\n <div className=\"status\">\n {this.props.project.state === 'cancelled' && (<React.Fragment>\n <div>\n {cancelled}\n <span>This project has been cancelled.</span>\n </div>\n\n <button\n ref={this.clientButtonRef}\n className={this.props.loading ? 'btn btn__loading' : 'btn'} disabled={this.props.loading}\n onClick={(e) => this.updateProject(e, this.props.project.id, 'active', false)}>\n <div className=\"loader loader__button\"></div>\n <span>Restart Project</span>\n </button>\n\n <button className=\"btn btn__outline\" onClick={(e) => this.props.openOverlay(e, 'project', this.props.project)}>Edit Project</button>\n </React.Fragment>)}\n {this.props.project.state === 'pending' && (<React.Fragment>\n <div>\n {not_started}\n <span>Not started yet...</span>\n </div>\n\n <button\n ref={this.clientButtonRef}\n className={this.state.loading ? 'btn btn__loading' : 'btn'} disabled={this.state.loading}\n onClick={(e) => this.updateProject(e, this.props.project.id, 'active', false)}>\n <div className=\"loader loader__button\"></div>\n <span>Start Project</span>\n </button>\n\n <button className=\"btn btn__outline\" onClick={(e) => this.props.openOverlay(e, 'project', this.props.project)}>Edit Project</button>\n </React.Fragment>)}\n {this.props.project.state === 'active' && (<React.Fragment>\n <div>\n {this.props.project.issues.length > 0 ? (<React.Fragment>\n {issues}\n <span>Issues Detected</span>\n </React.Fragment>) : (<React.Fragment>\n {on_track}\n <span>This project is on track!</span>\n </React.Fragment>)}\n </div>\n\n <button\n ref={this.clientButtonRef}\n className={this.props.loading ? 'btn btn__loading' : 'btn'} disabled={this.props.loading}\n onClick={(e) => this.updateProject(e, this.props.project.id, 'finished', true)}>\n <div className=\"loader loader__button\"></div>\n <span>Finish Project</span>\n </button>\n\n <button className=\"btn btn__outline\" onClick={(e) => this.props.openOverlay(e, 'project', this.props.project)}>Edit Project</button>\n </React.Fragment>)}\n {(this.props.project.state === 'finished' || this.props.project.state === 'invoiced') && (<React.Fragment>\n <div>\n {finished}\n <span>This project has finished!</span>\n </div>\n\n <button\n ref={this.clientButtonRef}\n className={this.props.loading ? 'btn btn__loading' : 'btn'} disabled={this.props.loading}\n onClick={(e) => this.updateProject(e, this.props.project.id, 'active', false)}>\n <div className=\"loader loader__button\"></div>\n <span>Restart Project</span>\n </button>\n\n <button className=\"btn btn__outline\" onClick={(e) => this.props.openOverlay(e, 'project', this.props.project)}>Edit Project</button>\n </React.Fragment>)}\n </div>\n </div>\n\n <div className=\"options inset\">\n <div className=\"list\">\n <button\n className={this.state.tab === 'schedule' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'schedule')}>Schedule</button>\n <button\n className={this.state.tab === 'statistics' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'statistics')}>Statistics</button>\n <button\n className={this.state.tab === 'issues' ? 'selected' : ''}\n data-count={this.props.project.issues.length}\n onClick={(e) => this.switchTabs(e, 'issues')}>Issues</button>\n </div>\n </div>\n\n <div className=\"analysis\">\n\n {(this.state.tab === 'issues') && (\n this.props.project.issues.length > 0 ? (\n <div className=\"block\">\n <header>\n <h3>We've spotted a few things...</h3>\n </header>\n <div className=\"list\">\n {this.props.project.issues.map(issue => {\n return (\n <div className=\"item\">\n <span className=\"icon\"><ErrorIcon /></span>\n {issue.title}\n {(issue.token === 'remaining') && (\n <button className=\"btn\" onClick={(e) => this.props.openOverlay(e, 'auto-populate', this.props.project)}>Auto-populate</button>\n )}\n </div>\n );\n })}\n </div>\n </div>\n ) : (\n <div className=\"block\">\n <header>\n <h3>No issues with this Project, all good :)</h3>\n </header>\n </div>\n )\n )}\n\n {(this.state.tab === 'statistics') && (\n <div className=\"block\">\n <header>\n <h3>Here's how you're doing...</h3>\n </header>\n <div className=\"list\">\n\n {this.props.project.billing_type === 'fixed_price' ? (\n <>\n <div className=\"item\">\n <span className=\"icon\"><CalendarIcon /></span>\n You estimated this project would take {this.props.project.estimated_time_formatted}.\n </div>\n <div className=\"item\">\n <span className=\"icon\"><CalendarIcon /></span>\n { you_have_contextual } scheduled {this.props.project.amount_scheduled ? this.props.project.amount_scheduled : 'no time yet'}.\n </div>\n <div className=\"item\">\n <span className=\"icon\"><CalendarIcon /></span>\n You have {this.props.project.estimate_remaining} remaining before going over your initial estimate.\n </div>\n <div className=\"item\">\n <span className=\"icon\"><PriceIcon /></span>\n Your total fixed price for this project was {this.props.project.amount_formatted}.\n </div>\n <div className=\"item\">\n <span className=\"icon\"><PriceIcon /></span>\n You're on track to earn {this.props.project.actual_rate}{this.props.project.rate_unit_short} for this project.\n </div>\n </>\n ) : (\n <>\n <div className=\"item\">\n <span className=\"icon\"><PriceIcon /></span>\n You're charging {this.props.project.project_rate_value_formatted}/{this.props.project.project_rate_unit_formatted}.\n </div>\n <div className=\"item\">\n <span className=\"icon\"><CalendarIcon /></span>\n { you_have_contextual } worked {this.props.project.amount_worked} so far.\n </div>\n <div className=\"item\">\n <span className=\"icon\"><PriceIcon /></span>\n { you_have_contextual } earned {this.props.project.amount_revenue_string} so far.\n </div>\n </>\n )}\n </div>\n </div>\n )}\n\n {(this.state.tab === 'schedule') && (\n <div className=\"schedule\">\n {this.props.project.work_days.length === 0 ? (\n <div className=\"block\">\n <header>\n <h3>You haven't scheduled any work yet for this project.</h3>\n </header>\n </div>\n ) : (\n work\n )}\n </div>\n )}\n\n </div>\n </React.Fragment>);\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Project);\n","import React from 'react';\nimport { Switch, Route } from 'react-router';\nimport { Link } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport Overlay from './Overlay';\nimport Filter from './Filter';\nimport agent from '../../agent';\nimport { Landing } from './Landing';\nimport Project from './Project';\nimport Tooltip from '../Tooltip';\n\nimport {\n PROJECT_UPDATE,\n PROJECT_UNLOADED,\n SCHEDULE_INVOICE,\n SCHEDULE_UNDO_INVOICE,\n OPEN_PROJECTS_OVERLAY,\n CLOSE_PROJECTS_OVERLAY,\n PROJECTS_PAGE_LOADED\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.projects,\n token: state.common.token,\n overlay: state.projects.overlay,\n clients: state.clients.clients\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n\n transitionState: (project, state) => {\n dispatch({ type: PROJECT_UPDATE, payload: agent.Projects.transition_state(project, state) })\n },\n\n invoiceWork: (project, day) => {\n\n dispatch({\n type: SCHEDULE_INVOICE,\n payload: agent.Schedule.transition_state(day, 'invoiced' )\n .then((res) => {\n if(!res.body.errors) {\n dispatch({\n type: PROJECT_UPDATE, payload: agent.Projects.update(project)\n });\n }\n return res;\n })\n })\n\n },\n\n rollbackInvoiceWork: (project, day) => {\n\n dispatch({\n type: SCHEDULE_UNDO_INVOICE,\n payload: agent.Schedule.rollback_transition_state(day)\n .then((res) => {\n if(!res.body.errors) {\n dispatch({\n type: PROJECT_UPDATE, payload: agent.Projects.update(project)\n });\n }\n return res;\n })\n })\n\n },\n\n openOverlay: () => {\n dispatch({ type: OPEN_PROJECTS_OVERLAY });\n },\n\n closeOverlay: () => {\n dispatch({ type: CLOSE_PROJECTS_OVERLAY });\n },\n\n unsetProject: () => {\n dispatch({ type: PROJECT_UNLOADED });\n },\n\n loadProjects: () => {\n dispatch({ type: PROJECTS_PAGE_LOADED, payload: agent.Projects.all() })\n }\n\n});\n\nclass Projects extends React.Component {\n\n constructor(props){\n super(props);\n\n this.state = {\n client: false,\n overlay: false,\n project: false,\n project_state: 'All',\n initialLoad: true\n }\n\n this.projectKeyPress = this.projectKeyPress.bind(this);\n this.newProjectButtonRef = React.createRef();\n\n }\n\n componentDidMount(){\n document.addEventListener(\"keydown\", this.projectKeyPress);\n\n this.props.loadProjects();\n\n if (this.state.initialLoad && this.props.clients && this.props.projects && this.props.projects.length === 0) {\n this.newProjectButtonRef.current.click()\n this.setState({\n initialLoad: false\n });\n }\n\n }\n\n componentWillUnmount() {\n this.props.unsetProject();\n document.removeEventListener(\"keydown\", this.projectKeyPress);\n }\n\n projectKeyPress(e){\n\n // new project shortcut\n if ( e.keyCode === 78 && !this.state.overlay ) {\n this.openOverlay(e, 'client')\n }\n\n }\n\n openOverlay(e, overlay, project=false) {\n\n e.preventDefault();\n e.stopPropagation();\n\n this.setState({\n overlay: overlay,\n project: project\n });\n\n this.props.openOverlay()\n\n }\n\n closeOverlay(e=false) {\n\n this.setState({\n overlay: false,\n project: false\n });\n\n this.props.closeOverlay()\n\n }\n\n updateFilter(filter, value) {\n\n this.setState({\n [filter]: value\n });\n\n }\n\n render() {\n\n if (typeof this.props.projects === 'undefined') {\n\n return (\n <div className=\"loading\"><div className=\"loader\"></div></div>\n )\n\n } else {\n\n let filtered_projects;\n\n const grouped_projects = _(this.props.projects)\n .groupBy(x => x.state)\n .map((value, key) => ({\n state: key,\n projects: _.orderBy(value, ['id'],['desc'])\n }))\n .sortBy(this.props.projects, function(element){\n var rank = {\n \"active\": 1,\n \"pending\": 2,\n \"finished\": 3,\n \"cancelled\": 4\n };\n return rank[element.state];\n })\n .value();\n\n if(this.state.project_state === 'All') {\n\n filtered_projects = grouped_projects;\n\n } else {\n\n filtered_projects = _.orderBy(this.props.projects.filter((el) => {\n return el.state === this.state.project_state.toLowerCase()\n }), ['id'],['desc']);\n\n }\n\n const plus =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\">\n <g fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 1v10M1 6h10\"/>\n </g>\n </svg>\n\n return (\n <React.Fragment>\n <section className=\"component__projects\">\n <header className=\"filter\">\n <h2>Projects</h2>\n <Filter\n border\n disabled={this.props.projects.length === 0 && true}\n filter={this.state.project_state}\n filters={['All','Active','Pending','Finished','Cancelled']}\n onChange={this.updateFilter.bind(this)} />\n </header>\n <ul>\n <li className=\"new\">\n <a\n ref={this.newProjectButtonRef}\n className=\"option\"\n onClick={(e) => this.openOverlay(e, 'client')}>\n <span>New Project</span>\n { plus }\n </a>\n </li>\n <li className=\"divider\"></li>\n {this.props.projects.length === 0 && (\n <li className=\"note\">Create your first project above.</li>\n )}\n </ul>\n\n {this.state.project_state === 'All' ? (\n\n grouped_projects.map(group => {\n return (\n <React.Fragment key={group.state}>\n <h3 className=\"title\">{ group.state }</h3>\n <ul>\n {group.projects.map(project => {\n return (\n <li\n key={project.id}\n className={project.slug === this.props.match.params.slug ? 'selected' : ''}>\n <Link to={`/projects/${project.slug}`} className=\"option\">\n <div className=\"title\">\n { project.title }\n { project.issues.length > 0 && (<span className=\"issue\"></span>) }\n </div>\n <span className=\"acronym\">\n <Tooltip message={project.client_name} position={'top'} size={'large'}>\n {project.client_name.substring(0, 2)}\n </Tooltip>\n </span>\n </Link>\n </li>\n )\n })}\n </ul>\n </React.Fragment>\n )\n })\n\n ) : (\n\n <React.Fragment>\n\n <h3 className=\"title\">{ this.state.project_state }</h3>\n\n <ul>\n {filtered_projects.length === 0 ? (\n <li className=\"empty\">Not projects found...</li>\n ) : (\n filtered_projects.map(project => {\n return (\n <li\n key={project.id}\n className={project.slug === this.props.match.params.slug ? 'selected' : ''}>\n <Link to={`/projects/${project.slug}`} className=\"option\">\n <div className=\"title\">\n { project.title }\n { project.issues.length > 0 && (<span className=\"issue\"></span>) }\n </div>\n <span className=\"acronym\">\n <Tooltip message={project.client_name} position={'top'} size={'large'}>\n {project.client_name.substring(0, 2)}\n </Tooltip>\n </span>\n </Link>\n </li>\n )\n })\n )}\n </ul>\n\n </React.Fragment>\n\n )}\n\n {this.props.overlay && (\n <Overlay\n overlay={this.state.overlay}\n project={this.state.project}\n closeOverlay={(e) => this.closeOverlay(e)}></Overlay>\n )}\n </section>\n <section className=\"component__project\">\n <Switch>\n <Route\n exact\n path={`/projects/`}\n render={(props) => <Landing {...this.props} />} />\n <Route\n exact\n path={`/projects/:slug`}\n render={(props) => <Project {...this.props} openOverlay={this.openOverlay.bind(this)} />} />\n </Switch>\n </section>\n </React.Fragment>\n )\n\n }\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Projects);\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { useDispatch, useSelector } from 'react-redux'\nimport agent from '../../agent';\nimport { Link } from 'react-router-dom';\nimport { showNotificationWithTimeout } from '../../components/Notifications';\nimport { get, isEmpty } from 'lodash';\nimport Tooltip from '../../components/Tooltip';\n\nconst Filter = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n let loading = useSelector(state => get(state.common, 'loading', false));\n let notification = useSelector(state => get(state.common, 'notification', false));\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (filter, value, persist) => {\n props.onChange(filter,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n const onStateTransition = (type, invoice, state, message) => {\n props.dispatch({\n type: type,\n payload: agent.Invoices.transition_state(invoice.id, state).then((res) => {\n if(!res.body.errors) {\n showNotificationWithTimeout(props.dispatch, message);\n setOpen(false);\n if(state === 'submitted') {\n props.openOverlay('email_invoice', invoice)\n }\n if(state === 'deleted') {\n props.updateSummary()\n }\n }\n return res;\n })\n })\n }\n\n useEffect(() => {\n\n var element = node.current;\n\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.addEventListener(\"scroll\", handleScroll);\n\n const dropdown_menu = document.querySelector('#dropdown__menu');\n const position_top = (element.offsetHeight + 8);\n\n // set default position\n dropdown_menu.style.top = position_top + 'px';\n\n // get bounds now dropdown has default position\n const dropdown_menu_bounds = dropdown_menu.getBoundingClientRect();\n\n // dropdown outside window, recalculate position\n if ( dropdown_menu_bounds.bottom > window.innerHeight ) {\n const position_recalc = dropdown_menu.offsetHeight + 8;\n dropdown_menu.style.top = -Math.abs(position_recalc) + 'px';\n }\n\n // finally, show dropdown (to stop position popping effect)\n dropdown_menu.style.visibility = 'visible';\n\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n element.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n const pdfLink = (\n <a href={`/api/invoices/${props.invoice.id}/pdf`} download className=\"item\">\n <span>Download PDF</span>\n </a>\n )\n\n const renderSwitch = e => {\n switch(props.invoice.state){\n case 'draft':\n return (\n <>\n <Link to={`/invoices/${props.invoice.id}/edit`} className=\"item\">\n Edit Invoice\n </Link>\n { isEmpty(props.invoice.errors_preventing_submission) ? (\n <div onClick={() => {\n onStateTransition('INVOICE_UPDATE', props.invoice, 'submitted', false)\n }} className=\"item\">Issue Invoice</div>\n ) : (\n <Tooltip message={`This invoice needs a few more things before you can mark it as sent.`} position={'top'} size={'large'}>\n <div className=\"item disabled\">\n Issue Invoice\n </div>\n </Tooltip>\n ) }\n {pdfLink}\n <hr />\n <div onClick={() => {\n if (window.confirm(\"Are you sure you want to delete this invoice? It cannot be undone.\")) {\n onStateTransition('INVOICE_REMOVE', props.invoice,'deleted', 'Invoice deleted')\n }\n }} className=\"item\">Delete</div>\n </>\n )\n case 'submitted':\n return (\n <>\n <div onClick={() => {\n props.openOverlay('email_invoice', props.invoice)\n }} className=\"item\">Email Invoice</div>\n <div onClick={() => {\n props.openOverlay('mark_as_paid', props.invoice)\n }} className=\"item\">Mark as paid</div>\n {pdfLink}\n <hr />\n <div onClick={() => {\n if (window.confirm(\"Are you sure you want to void this invoice? It cannot be undone.\")) {\n onStateTransition('INVOICE_UPDATE', props.invoice,'voided', 'Invoice marked as void')\n }\n }} className=\"item\">Void Invoice</div>\n </>\n )\n case 'paid':\n case 'voided':\n return (\n <>\n {pdfLink}\n </>\n )\n default:\n return (\n <div>No Options</div>\n )\n }\n }\n\n return (\n <div ref={node} className={props.disabled ? 'dropdown disabled' : 'dropdown'}>\n <button className=\"dropdown-toggler\" onClick={e => setOpen(!open)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" strokeWidth=\"1.5\" stroke=\"currentColor\" fill=\"none\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M0 0h24v24H0z\" stroke=\"none\"/>\n <circle cx=\"12\" cy=\"12\" r=\"1\"/>\n <circle cx=\"12\" cy=\"19\" r=\"1\"/>\n <circle cx=\"12\" cy=\"5\" r=\"1\"/>\n </svg>\n </button>\n {open && (\n ReactDOM.createPortal(\n <div\n style={{position: 'absolute', visibility: 'hidden', right: '1px' }}\n id=\"dropdown__menu\" className={`dropdown__menu ` + props.content}>\n {loading && (\n <div className=\"loading\"><div className=\"loader loader__small\"></div></div>\n )}\n <div className=\"list\">\n {renderSwitch(props.invoice.state)}\n </div>\n </div>, node.current\n )\n )}\n { notification && <div className=\"success\">{notification}</div>}\n </div>\n );\n};\n\nexport default Filter;\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport ListErrors from '../ListErrors';\nimport FocusTrap from 'focus-trap-react';\nimport { connect } from 'react-redux';\nimport { _, get } from 'lodash';\nimport update from 'immutability-helper';\nimport agent from '../../agent';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport { components } from 'react-select';\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\nimport { formatDate, parseDate } from \"react-day-picker/moment\";\nimport { showNotificationWithTimeout } from '../../components/Notifications';\nimport { validateEmail } from '../../components/Validate';\nimport dateFns from 'date-fns';\n\nimport {\n CLOSE_OVERLAY,\n SETTINGS_SAVED,\n SETTINGS_UPDATE,\n CLIENT_UPDATE,\n INVOICE_PAYMENT_CREATE,\n INVOICE_EMAIL\n} from '../../constants/actionTypes';\n\nconst Input = ({ autoComplete, ...props }) => <components.Input {...props} autoComplete=\"new-password\" />;\nconst FORMAT = 'DD/MM/YYYY';\n\nconst mapStateToProps = (state, ownProps) => ({\n ...state,\n errors: state.clients.errors\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n updateBusiness: user => {\n dispatch({\n type: SETTINGS_SAVED,\n payload: agent.Auth.save(user).then((res) => {\n if(!res.body.errors) {\n showNotificationWithTimeout(dispatch, 'Details updated')\n dispatch({ type: CLOSE_OVERLAY })\n }\n return res;\n })\n })\n dispatch({ type: SETTINGS_UPDATE })\n },\n\n updateClient: (client, updateSelectedClient) => {\n dispatch({\n type: CLIENT_UPDATE,\n payload: agent.Clients.update(client).then((res) => {\n if(!res.body.errors) {\n // update client in InvoicesForm.js\n updateSelectedClient(res.body)\n showNotificationWithTimeout(dispatch, 'Client updated')\n dispatch({ type: CLOSE_OVERLAY })\n }\n return res;\n })\n })\n },\n\n createInvoicePayment: (invoiceId, invoicePayment) => {\n dispatch({\n type: INVOICE_PAYMENT_CREATE,\n payload: agent.InvoicePayments.create(invoiceId, invoicePayment).then((res) => {\n if(!res.body.errors) {\n showNotificationWithTimeout(dispatch, 'Invoice paid')\n dispatch({ type: CLOSE_OVERLAY })\n }\n return res;\n })\n })\n },\n\n emailInvoice: (invoiceId, emailInvoice) => {\n dispatch({\n type: INVOICE_EMAIL,\n payload: agent.Invoices.email(invoiceId, emailInvoice).then((res) => {\n if(!res.body.errors) {\n showNotificationWithTimeout(dispatch, 'Invoice emailed')\n dispatch({ type: CLOSE_OVERLAY })\n }\n return res;\n })\n })\n },\n\n})\n\nexport let scrollPosition = 0;\n\nclass Overlay extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.clientButtonRef = React.createRef();\n this.amountReceived = React.createRef();\n\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: this.props.common.overlay,\n overlay_history: [this.props.overlayName],\n new: false,\n loading: false,\n client: this.props.client,\n invoice: this.props.invoice,\n amount_received: '',\n invoicePayment: {\n invoice_id: get(this.props.invoice, 'id', null)\n },\n emailInvoice: {\n invoice_id: get(this.props.invoice, 'id', null),\n recipients: get(this.props.invoice, 'contact_email', null),\n message: 'Hi, please find attached my most recent invoice.'\n },\n currentUser: this.props.currentUser,\n business_attributes: get(this.props.currentUser, 'business', null)\n }\n\n }\n\n componentDidMount(){\n document.addEventListener(\"keydown\", this.keyPress.bind(this), false);\n }\n\n componentWillUnmount(){\n document.removeEventListener(\"keydown\", this.keyPress.bind(this), false);\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if(prevState.loading && this.props.clients.errors) {\n\n this.setState({\n loading: false\n })\n\n }\n\n }\n\n keyPress(e, field=false){\n\n // up/down arrow\n if ( field && [38,40].includes( e.keyCode ) ) {\n\n let value = parseInt(e.target.innerText)\n\n // down\n if( e.keyCode === 40 ) {\n\n if (value === 0) {\n return false\n }\n\n --value\n\n }\n\n // up\n if( e.keyCode === 38 ) {\n ++value\n }\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n // enter\n if(e.keyCode === 13) {\n\n if (e.target.nodeName === 'TEXTAREA') {\n return false;\n }\n\n if (this.clientButtonRef.current) {\n this.clientButtonRef.current.click()\n }\n\n }\n\n }\n\n updateAmountReceived(value) {\n\n let amount = parseFloat(value).toFixed(2);\n\n this.updateField('invoicePayment.gross_total_in_base_currency', amount)\n this.setState({\n amount_received: amount\n })\n }\n\n updateField(field, value) {\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n updateBusiness(e, business) {\n\n let newData = update(this.state.currentUser, {\n business_attributes: { $set: business }\n });\n\n this.setState(newData);\n this.props.updateBusiness( newData );\n\n // cleanup\n newData = null;\n\n }\n\n updateClient(e, client) {\n\n if( validateEmail(client.email) ) {\n this.props.updateClient( client, this.props.updateSelectedClient );\n }\n\n }\n\n createInvoicePayment(e, invoicePayment) {\n\n this.props.createInvoicePayment( invoicePayment.invoice_id, invoicePayment );\n\n }\n\n emailInvoice(e, emailInvoice) {\n\n this.props.emailInvoice( emailInvoice.invoice_id, emailInvoice );\n\n }\n\n render() {\n\n const close =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M19 5L5 19M19 19L5 5\"/>\n </g>\n </svg>\n\n return (\n ReactDOM.createPortal(\n\n <FocusTrap>\n <div className=\"focus\">\n <div className={`overlay__blocks counter__${this.state.counter} ${this.state.initialLoad && 'initialLoad'}`}>\n\n {this.state.overlay_history.includes('missing_business') && (\n <div className=\"overlay__block overflow\">\n <div className=\"header\">\n <h2>Before you get started...</h2>\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\" tabIndex=\"1\">\n <div className=\"padding\">\n <div className=\"field\">\n <p>Before you can setup and send invoices, we need you to provide the name and legal address for your business to include on invoices.</p>\n <hr />\n </div>\n <div className=\"field field__helper\">\n <label className=\"padding border\">\n <span>Business Name</span>\n <div>\n <input\n type=\"text\"\n className=\"form-control\"\n defaultValue={get(this.state.business_attributes, 'name', '')}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('business_attributes.name', e.target.value)} />\n </div>\n </label>\n </div>\n <div className=\"field\">\n <label className=\"padding border\">\n <span>Business Address</span>\n <div>\n <textarea\n className=\"form-control\"\n defaultValue={get(this.state.business_attributes, 'address', '')}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('business_attributes.address', e.target.value)} />\n </div>\n </label>\n </div>\n </div>\n </div>\n <div className=\"actions\">\n <button\n ref={this.clientButtonRef}\n disabled={this.props.common.loading || (!this.state.business_attributes.name || !this.state.business_attributes.address)}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.updateBusiness(e, this.state.business_attributes)}>\n <div className=\"loader loader__button\"></div>\n <span>Save Details</span>\n </button>\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('email_invoice') && (\n <div className=\"overlay__block overflow\">\n <div className=\"header\">\n <h2>Email Invoice</h2>\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\" tabIndex=\"1\">\n <div className=\"padding\">\n <div className=\"field\">\n <p>Now you've issued this invoice, you can either email it directly to your client using this form or\n dowload it and send it to them separately.</p>\n <hr />\n </div>\n <div className=\"field\">\n <label className=\"padding border\">\n <span>Send To</span>\n <div>\n <input\n type=\"text\"\n className=\"form-control\"\n defaultValue={get(this.state.emailInvoice, 'recipients', '')}\n onChange={(e) => this.updateField('emailInvoice.recipients', e.target.value)} />\n </div>\n </label>\n <small>Tip: Seperate email addresses using a comma</small>\n </div>\n <div className=\"field\">\n <label className=\"padding border\">\n <span>Message</span>\n <div>\n <textarea\n className=\"form-control tall\"\n defaultValue={get(this.state.emailInvoice, 'message', '')}\n onChange={(e) => this.updateField('emailInvoice.message', e.target.value)} />\n </div>\n </label>\n </div>\n </div>\n </div>\n <div className=\"actions\">\n <div className=\"buttons tight\">\n <a href={`/api/invoices/${this.state.invoice.id}/pdf`} download className=\"btn btn__outline\">\n <span>Download PDF</span>\n </a>\n </div>\n <button\n ref={this.clientButtonRef}\n disabled={this.props.common.loading}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.emailInvoice(e, this.state.emailInvoice)}>\n <div className=\"loader loader__button\"></div>\n <span>Email Invoice</span>\n </button>\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('mark_as_paid') && (\n <div className=\"overlay__block overflow\">\n <div className=\"header\">\n <h2>Mark as Paid</h2>\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\" tabIndex=\"1\">\n <div className=\"padding\">\n <div className=\"field\">\n <p>The total for invoice { this.state.invoice.invoice_number } was {this.state.invoice.total_formatted} </p>\n <hr />\n </div>\n <div className=\"field field__helper\">\n <label className=\"padding border\">\n <span\n className=\"justify\">\n <span>Amount Received</span>\n <span\n className=\"btn btn__tight btn__link\"\n onClick={(e) => this.updateAmountReceived(this.state.invoice.total)}\n >\n Set full amount of { this.state.invoice.total_formatted }\n </span>\n </span>\n <div className=\"helper\">\n <span>{getSymbolFromCurrency(this.props.currency)}</span>\n <input\n ref={this.amountReceived}\n defaultValue={ this.state.amount_received }\n type=\"number\"\n className=\"form-control\"\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('invoicePayment.gross_total_in_base_currency', e.target.value)} />\n </div>\n </label>\n <small>This is the amount you received in your local currency {this.props.currency} ({getSymbolFromCurrency(this.props.currency)})</small>\n </div>\n <div className=\"field\">\n <label className=\"padding border\">\n <span>Date Received</span>\n <div>\n <DayPickerInput\n format={FORMAT}\n formatDate={formatDate}\n parseDate={parseDate}\n placeholder={FORMAT}\n onDayChange={(e) => this.updateField('invoicePayment.date_received', e)}\n dayPickerProps={{\n disabledDays: {\n before: dateFns.parse(this.state.invoice.date),\n after: new Date()\n }\n }}\n />\n </div>\n </label>\n </div>\n </div>\n </div>\n <div className=\"actions\">\n <button\n ref={this.clientButtonRef}\n disabled={this.props.common.loading}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.createInvoicePayment(e, this.state.invoicePayment)}>\n <div className=\"loader loader__button\"></div>\n <span>Save Payment</span>\n </button>\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('client') && (\n <div className=\"overlay__block\">\n <div className=\"header\">\n <h2>We're missing some information</h2>\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n\n <div className=\"content\" tabIndex=\"1\">\n\n <div className=\"padding\">\n\n <div className=\"field\">\n <p>Before we can send your invoice we need you to provide some extra information for {this.state.client.name}.</p>\n <hr />\n </div>\n\n <div className=\"field\">\n <label className=\"padding border\">\n <span>Email Address</span>\n { this.state.errors }\n <div\n className=\"\">\n <input\n type=\"email\"\n className=\"form-control\"\n value={this.state.client.email}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.email', e.target.value)} />\n </div>\n </label>\n <small>Where should we send your invoice to?</small>\n </div>\n\n <div className=\"field\">\n <label className=\"padding\">\n <span>Contact Name</span>\n <div\n className=\"\">\n <input\n type=\"text\"\n className=\"form-control\"\n value={this.state.client.contact_name}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.contact_name', e.target.value)} />\n </div>\n </label>\n </div>\n\n <div className=\"field\">\n <label className=\"padding\">\n <span>Client Address</span>\n <textarea\n type=\"text\"\n className=\"form-control\"\n value={this.state.client.address}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.address', e.target.value)} />\n </label>\n </div>\n\n </div>\n\n </div>\n <div className=\"actions\">\n <button\n ref={this.clientButtonRef}\n disabled={this.props.common.loading || (!this.state.client.email || !this.state.client.contact_name || !this.state.client.address)}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.updateClient(e, this.state.client)}>\n <div className=\"loader loader__button\"></div>\n <span>Update Client</span>\n </button>\n </div>\n </div>\n\n )}\n\n </div>\n\n <div\n className=\"overlay__bg\"\n onClick={(e) => this.props.closeOverlay(e) }\n ></div>\n\n <ListErrors errors={this.props.errors} />\n\n </div>\n </FocusTrap>,\n document.querySelector('.overlay')\n )\n )\n\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Overlay);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ReactDOM from 'react-dom';\nimport dateFns from 'date-fns';\n\nimport agent from '../../agent';\nimport {\n TIME_SUMMARY,\n DESTROY_TIME_SUMMARY\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state,\n summary: state.invoices.summary\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n getSummary: (client_id,project_id,currency) => {\n dispatch({\n type: TIME_SUMMARY,\n payload: agent.Invoices.time(client_id,project_id,currency)\n })\n },\n destroySummary: () => {\n dispatch({ type: DESTROY_TIME_SUMMARY })\n }\n});\n\nclass InvoiceTime extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n displayTooltip: false\n }\n this.hideTooltip = this.hideTooltip.bind(this)\n this.showTooltip = this.showTooltip.bind(this)\n }\n\n hideTooltip (event) {\n\n this.props.destroySummary();\n\n this.setState({\n displayTooltip: false,\n top: null,\n left: null\n })\n\n }\n\n showTooltip (event) {\n\n this.props.getSummary(\n this.props.client_id,\n this.props.project_id,\n this.props.currency\n );\n\n var bounds = event.currentTarget.getBoundingClientRect();\n var y = bounds.top + bounds.height + 8;\n var x = bounds.left;\n\n this.setState({\n displayTooltip: true,\n top: y,\n left: x\n })\n\n }\n\n render() {\n let message = this.props.message\n let position = this.props.position\n let size = this.props.size\n\n return (\n <>\n {this.state.displayTooltip &&\n (\n ReactDOM.createPortal(\n <div \n className={`invoice_summary`}\n style={{top: this.state.top, left: this.state.left}}>\n {this.props.summary ? (\n <>\n {this.props.summary.slice(0, 6).map((date) => {\n return(\n <div className=\"invoice_summary__item\">\n {date.description}\n </div>\n )\n })}\n {this.props.summary.length > 6 && (\n <div className=\"schedule_summary__footer\">\n <div className=\"empty\">{`+ ${this.props.summary.length - 6} more`}</div>\n </div>\n )}\n {this.props.summary.length === 0 && (\n <div className=\"invoice_summary__item\">\n <div className=\"empty\">No work added</div>\n </div>\n )}\n </>\n ) : (\n <div className=\"loader loader__small\"></div>\n )}\n </div>,\n document.querySelector('main')\n )\n )\n }\n <span\n className=\"cursor-default\"\n onMouseOver={this.showTooltip}\n onMouseLeave={this.hideTooltip}>\n { this.props.time_formatted }\n </span>\n </>\n )\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InvoiceTime);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ReactDOM from 'react-dom';\nimport dateFns from 'date-fns';\n\nimport agent from '../../agent';\nimport {\n PAYMENT_SUMMARY,\n DESTROY_PAYMENT_SUMMARY\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state,\n summary: state.invoices.summary\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n getSummary: (invoice_id) => {\n dispatch({\n type: PAYMENT_SUMMARY,\n payload: agent.Invoices.payment(invoice_id)\n })\n },\n destroySummary: () => {\n dispatch({ type: DESTROY_PAYMENT_SUMMARY })\n }\n});\n\nclass InvoiceTime extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n displayTooltip: false\n }\n this.hideTooltip = this.hideTooltip.bind(this)\n this.showTooltip = this.showTooltip.bind(this)\n }\n\n hideTooltip (event) {\n\n this.props.destroySummary();\n\n this.setState({\n displayTooltip: false,\n top: null,\n left: null\n })\n\n }\n\n showTooltip (event) {\n\n this.props.getSummary(\n this.props.invoice_id\n );\n\n var bounds = event.currentTarget.getBoundingClientRect();\n var y = bounds.top + bounds.height + 8;\n var x = bounds.left;\n\n this.setState({\n displayTooltip: true,\n top: y,\n left: x\n })\n\n }\n\n formatPrice(price, currency) {\n\n return new Intl.NumberFormat(this.props.common.locale, {\n style: 'currency',\n currency: currency ? currency : this.props.common.currentUser.currency\n }).format(price)\n\n }\n\n render() {\n let message = this.props.message\n let position = this.props.position\n let size = this.props.size\n\n return (\n <>\n {this.state.displayTooltip &&\n (\n ReactDOM.createPortal(\n <div\n className=\"invoice_summary small\"\n style={{top: this.state.top, left: this.state.left}}>\n {this.props.summary ? (\n <div className=\"invoice_summary__item\">\n { this.formatPrice(this.props.summary.gross_total_in_base_currency, this.props.summary.currency) } paid on {dateFns.format(this.props.summary.date_received, 'DD MMM, YYYY')}\n </div>\n ) : (\n <div className=\"loader loader__small\"></div>\n )}\n </div>,\n document.querySelector('main')\n )\n )\n }\n <span\n className=\"cursor-default\"\n onMouseOver={this.showTooltip}\n onMouseLeave={this.hideTooltip}>\n Paid\n </span>\n </>\n )\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InvoiceTime);\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link } from 'react-router-dom';\nimport { get, isNil } from 'lodash'\nimport dateFns from 'date-fns'\nimport agent from '../agent';\nimport Filter from '../components/Invoices/Filter';\nimport Tooltip from '../components/Tooltip';\nimport { Info } from '../components/Info';\nimport Select from 'react-select';\nimport { components } from 'react-select';\nimport classNames from 'classnames/bind';\nimport Overlay from '../components/Invoices/Overlay';\nimport InvoiceTime from '../components/Invoices/InvoiceTime';\nimport InvoicePayment from '../components/Invoices/InvoicePayment';\nimport * as QueryString from \"query-string\";\n\nimport {\n SETTINGS_SAVED\n} from '../constants/actionTypes';\n\nconst Input = ({ autoComplete, ...props }) => <components.Input {...props} autoComplete=\"new-password\" />;\n\nconst Invoices = (props) => {\n\n const dispatch = useDispatch()\n\n const params = QueryString.parse(props.location.search);\n\n const currentUser = useSelector(state => get(state.common, 'currentUser', {}));\n const clients = useSelector(state => get(state.clients, 'clients', []));\n const invoices = useSelector(state => get(state.invoices, 'invoices', []));\n const overlay = useSelector(state => get(state.common, 'overlay', false));\n const loading = useSelector(state => get(state.common, 'loading', true));\n\n const [summary, setSummary] = useState({});\n const [filterState, setFilterState] = useState();\n const [filterClient, setFilterClient] = useState();\n const [filterInvoice, setFilterInvoice] = useState();\n const [overlayName, setOverlayName] = useState();\n\n const [invoicesEnabled, enableInvoices] = useState(get(currentUser.business, 'invoices_enabled', false));\n const [datePickerEnabled, showDatepicker] = useState(false);\n const [unbilledWorkEnabled, enableUnbilledWork] = useState(true); \n\n const mountedRef = useMountedRef();\n\n // check if we need to ask the user to choose a start date\n useEffect(() => {\n\n if (mountedRef.current) {\n\n if (!dateFns.isSameDay(currentUser.created_at, new Date())) {\n showDatepicker(true);\n }\n\n }\n\n },[invoicesEnabled]);\n\n // run on mount\n useEffect(() => {\n agent.Invoices.summary().then((res) => setSummary(res.body))\n if(currentUser && (!currentUser.business.name || !currentUser.business.address)) {\n openOverlay('missing_business');\n }\n },[]);\n\n // filter invoices when state or client change\n useEffect(() => {\n\n let filters = `?state=${filterState ? filterState : ''}`;\n\n filterClient && (\n filters += `&client_id=${filterClient}`\n )\n\n dispatch({\n type: 'INVOICES_PAGE_LOADED',\n payload: agent.Invoices.filter(filters)\n })\n\n },[filterState, filterClient]);\n\n useEffect(() => {\n if(params.invoice) {\n let invoice = invoices.find(inv => inv.id.toString() === params.invoice);\n if(invoice) {\n openOverlay('email_invoice', invoice);\n }\n }\n //openOverlay('email_invoice', false);\n },[invoices]);\n\n // update state filter\n const updateStateFilter = state => {\n setFilterState(state);\n }\n\n // update client filter\n const updateClientFilter = value => {\n let client = value ? value.value : null;\n setFilterClient(client);\n }\n\n const updateSummary = () => {\n agent.Invoices.summary().then((res) => setSummary(res.body))\n }\n\n const openOverlay = (overlay, invoice) => {\n if (invoice) {\n setFilterInvoice(invoice);\n }\n if (overlay) {\n setOverlayName(overlay);\n }\n dispatch({ type: 'OPEN_OVERLAY' });\n }\n\n const closeOverlay = () => {\n setFilterInvoice(null);\n setOverlayName(null)\n dispatch({ type: 'CLOSE_OVERLAY' });\n }\n\n const enableInvoicesFeature = () => {\n\n if (!dateFns.isSameDay(currentUser.created_at, new Date())) {\n enableInvoices(true);\n showDatepicker(true);\n }\n\n }\n\n const confirmStartDate = ( date ) => {\n\n dispatch({\n type: SETTINGS_SAVED,\n payload: agent.Auth.save({\n business_attributes: {\n id: currentUser.business.id,\n invoices_enabled: true,\n invoiceable_from: date\n }\n }).then((res) => {\n if(!res.body.errors) {\n agent.Invoices.summary().then((res) => setSummary(res.body))\n showDatepicker(false);\n }\n return res;\n })\n })\n\n }\n\n const clientList = Object.values(clients).map((client) => ({\n value: client.id,\n label: client.name\n }))\n\n return (\n <section className=\"component__route component__route__invoices\">\n <header>\n <h2>Invoices</h2>\n <div>\n <Link to=\"/invoices/new\"\n className=\"btn btn__primary\">\n <span>New Invoice</span>\n </Link>\n </div>\n </header>\n <section>\n\n <div className=\"stats\">\n <section>\n <h3>Unbilled</h3>\n <div className=\"list\">\n <div>{ get(summary, 'unbilled.sub_total_formatted',[]) }</div>\n </div>\n </section>\n <section>\n <h3>Draft</h3>\n <div className=\"list\">\n { get(summary, 'draft',[]).sort(function(a,b){\n return (a.currency === currentUser.currency ? -1 : 0);\n }).map((currency)=>{\n return (<div key={currency.currency}>{currency.sub_total_formatted}</div>)\n })}\n </div>\n </section>\n <section>\n <h3>Outstanding</h3>\n <div className=\"list\">\n { get(summary, 'submitted',[]).sort(function(a,b){\n return (a.currency === currentUser.currency ? -1 : 0);\n }).map((currency)=>{\n return (<div key={currency.currency}>{currency.sub_total_formatted}</div>)\n })}\n </div>\n </section>\n <section>\n <h3>Paid</h3>\n <div className=\"list\">\n <div key={currentUser.currency}>{get(summary, 'paid', '')}</div>\n </div>\n </section>\n <section>\n <h3>Overdue</h3>\n <div className=\"list\">\n { get(summary, 'overdue',[]).sort(function(a,b){\n return (a.currency === currentUser.currency ? -1 : 0);\n }).map((currency)=>{\n return (<div key={currency.currency}>{currency.sub_total_formatted}</div>)\n })}\n </div>\n </section>\n </div>\n\n { (get(summary, 'unbilled.sub_total',[]) > 0) && (\n\n <section className=\"component__invoice\">\n <div\n className={`options inset switch ${unbilledWorkEnabled ? 'switch__on' : 'switch__off'}`}>\n <div className=\"list\">\n <h3>\n <span>Unbilled Work</span>\n <Tooltip message={'This is a list of all the work in your schedule that you\\'ve worked, but haven\\'t invoiced.'} position={'top'} size={'large'}><Info /></Tooltip>\n </h3>\n </div>\n <div className=\"field field__switch field__switch__on_off\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={unbilledWorkEnabled}\n onChange={() => enableUnbilledWork(!unbilledWorkEnabled)} />\n <span />\n </label>\n </div>\n </div>\n {unbilledWorkEnabled && (\n <table className=\"table\">\n <thead>\n <tr>\n <th className=\"fill\">\n <div>\n Client (Project)\n </div>\n </th>\n <th>\n <div>\n Time\n </div>\n </th>\n <th>\n <div>\n Subtotal\n </div>\n </th>\n <th>\n <div>\n Status\n </div>\n </th>\n <th className=\"right\">\n </th>\n </tr>\n </thead>\n <tbody>\n { get(summary, 'unbilled.clients',[]).map((client)=>{\n\n return (\n <>\n { get(client, 'projects',[]).filter(el => el.title === null).map((bodyOfWork)=>{\n return (\n <tr key={bodyOfWork}>\n <td className=\"fill\">\n <div>\n <Link\n to={`/clients/${bodyOfWork.client_slug}`}>\n <span>{bodyOfWork.client_name}</span>\n </Link>\n </div>\n </td>\n <td>\n <div>\n <InvoiceTime\n client_id={bodyOfWork.client_id}\n currency={bodyOfWork.currency}\n time_formatted={bodyOfWork.time_formatted} />\n </div>\n </td>\n <td>\n <div>\n <span>{bodyOfWork.price}</span>\n </div>\n </td>\n <td>\n <div>\n <span className=\"pill\">Unbilled</span>\n </div>\n </td>\n <td className=\"right\">\n <div className=\"actions\">\n <Link\n className=\"btn btn__link\"\n to={`/invoices/new?client_id=${bodyOfWork.client_id}¤cy=${bodyOfWork.currency}`}>\n <span>New Invoice</span>\n </Link>\n </div>\n </td>\n </tr>\n )\n }) }\n { get(client, 'projects',[]).filter(el => el.title != null).map((project)=>{\n return (\n <tr key={project}>\n <td className=\"fill\">\n <div>\n {project.client_name} ({project.title})\n </div>\n </td>\n <td>\n <div>\n <InvoiceTime\n client_id={project.client_id}\n project_id={project.id}\n currency={project.currency}\n time_formatted={project.time_formatted} />\n </div>\n </td>\n <td>\n <div>\n <span>{project.price}</span>\n </div>\n </td>\n <td>\n <div>\n <span className=\"pill\">Unbilled</span>\n </div>\n </td>\n <td className=\"right\">\n <div className=\"actions\">\n <Link\n className=\"btn btn__link\"\n to={`/invoices/new?project_id=${project.id}&client_id=${project.client_id}¤cy=${project.currency}`}>\n <span>New Invoice</span>\n </Link>\n </div>\n </td>\n </tr>\n )\n }) }\n </>\n )\n }) }\n </tbody>\n </table>\n )}\n </section>\n\n )}\n\n <section className=\"component__invoice\">\n <div className=\"options inset\">\n <div className=\"list\">\n <button\n onClick={() => {updateStateFilter()}}\n className={!filterState ? 'selected' : null}>All</button>\n <button\n onClick={() => {updateStateFilter('draft')}}\n className={filterState === 'draft' ? 'selected' : null}>Draft</button>\n <button\n onClick={() => {updateStateFilter('submitted')}}\n className={filterState === 'submitted' ? 'selected' : null}>Issued</button>\n <button\n onClick={() => {updateStateFilter('paid')}}\n className={filterState === 'paid' ? 'selected' : null}>Paid</button>\n <button\n onClick={() => {updateStateFilter('voided')}}\n className={filterState === 'voided' ? 'selected' : null}>Voided</button>\n </div>\n\n <Select\n isClearable={true}\n menuPlacement=\"auto\"\n className=\"react-select-container\"\n classNamePrefix=\"react-select\"\n placeholder=\"Filter by Client\"\n options={clientList}\n value={clientList.filter((el) => {\n return el.value === filterClient\n })}\n onChange={updateClientFilter}\n components={{\n Input\n }} />\n\n </div>\n { (invoices.length === 0) ? (\n <table className=\"table\">\n <thead>\n <tr>\n <th>\n <div className=\"note\">\n No invoices matching these filters.\n </div>\n </th>\n </tr>\n </thead>\n </table>\n ) : (\n <table className=\"table\">\n <thead>\n <tr>\n <th>\n <div>\n Invoice #\n </div>\n </th>\n <th className=\"fill\">\n <div>\n Client\n </div>\n </th>\n <th>\n <div>\n Total\n </div>\n </th>\n <th>\n <div>\n Subtotal\n </div>\n </th>\n <th>\n <div>\n Issued\n </div>\n </th>\n <th>\n <div>\n Due\n </div>\n </th>\n <th>\n <div>\n Status\n </div>\n </th>\n <th className=\"right\">\n </th>\n </tr>\n </thead>\n <tbody>\n {invoices.map((invoice) => {\n let overdue = invoice.state === 'submitted' && dateFns.isPast(invoice.due_date);\n let days_overdue = dateFns.differenceInDays(new Date(), invoice.due_date);\n return (\n <tr key={invoice.id} className={invoice.state}>\n <td>\n <div>\n <span>\n {invoice.invoice_number ? invoice.invoice_number : '–'}\n </span>\n </div>\n </td>\n <td className=\"fill\">\n <div>\n <span>\n {invoice.client_name}\n </span>\n </div>\n </td>\n <td>\n <div>\n {invoice.sub_total_in_base_currency !== invoice.sub_total ? (\n <Tooltip message={`This converts to ${ invoice.total_in_base_currency_formatted } based on our last conversion on ${ dateFns.format(invoice.currency_conversion_at, 'MMMM D, YYYY') }`} position={'top'} size={'large'}>\n <span>{invoice.total_formatted}</span>\n </Tooltip>\n ) : (\n <span>{invoice.total_formatted}</span>\n )}\n </div>\n </td>\n <td>\n <div>\n {invoice.sub_total_in_base_currency !== invoice.sub_total ? (\n <Tooltip message={`This converts to ${ invoice.sub_total_in_base_currency_formatted } based on our last conversion on ${ dateFns.format(invoice.currency_conversion_at, 'MMMM D, YYYY') }`} position={'top'} size={'large'}>\n <span>{invoice.sub_total_formatted}</span>\n </Tooltip>\n ) : (\n <span>{invoice.sub_total_formatted}</span>\n )}\n </div>\n </td>\n <td>\n <div>\n <span>\n {\n (invoice.state !== 'draft') ?\n (isNil(invoice.date)) ? '' : dateFns.format(invoice.date, 'DD MMM, YYYY')\n :\n '–'\n }\n </span>\n </div>\n </td>\n <td>\n <div>\n <span>\n {\n (invoice.state !== 'draft') ?\n (isNil(invoice.due_date)) ? '' : dateFns.format(invoice.due_date, 'DD MMM, YYYY')\n :\n '–'\n }\n </span>\n </div>\n </td>\n <td>\n <div>\n <span className={\n classNames({\n 'pill': invoice.state === 'draft',\n 'pill ok': invoice.state === 'paid',\n 'pill pending': invoice.state === 'submitted' || invoice.state === 'voided',\n 'pill issue': invoice.state === 'overdue' || (invoice.state === 'submitted' && dateFns.isPast(invoice.due_date)),\n })\n }>\n {invoice.state === 'submitted' ? (\n overdue ? `${days_overdue} day${days_overdue > 1 && 's'} overdue` : 'Issued'\n ) : (\n invoice.state === 'paid' ? (\n <InvoicePayment\n invoice_id={invoice.id} />\n ) : (\n invoice.state\n )\n )}\n </span>\n </div>\n </td>\n <td className=\"right\">\n <div className=\"actions\">\n <Filter\n invoice={invoice}\n dispatch={dispatch}\n openOverlay={openOverlay}\n updateSummary={updateSummary}\n filter=\"Options\" />\n </div>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n )}\n </section>\n { overlay && (\n <Overlay\n overlayName={overlayName}\n invoice={filterInvoice}\n currency={currentUser.currency}\n currentUser={currentUser}\n closeOverlay={(e) => closeOverlay()}></Overlay>\n )}\n </section>\n {(!invoicesEnabled || datePickerEnabled) && (\n <div className=\"feature\">\n <div className=\"feature__block\">\n\n { loading && (\n <div className=\"loading loading__text\"><div className=\"loader\"></div><span>We're turning invoices on for you...</span></div>\n )}\n\n {!invoicesEnabled && (\n <div className={ loading ? 'content content__loading' : 'content'}>\n <span className=\"pill highlight\">New</span>\n <h2>Send invoices directly from Slate</h2>\n <p>We've all forgotten to invoice a client. If you turn invoices on we'll make sure you don't forget what work you still need to invoice.\n If you're already using something else to invoice your clients that's ok, Slate works just fine without invoices turned on.</p>\n <button\n onClick={() => enableInvoicesFeature()}\n className=\"btn\">Turn on Invoices</button>\n <div className=\"video\">\n <img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NjUiIGhlaWdodD0iMjA4IiB2aWV3Qm94PSIwIDAgNDY1IDIwOCI+CiAgPGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgIDxwYXRoIGZpbGw9IiNEOEQ4RDgiIGQ9Ik0xNiwwIEw0NDksMCBDNDU3LjgzNjU1NiwtMS42MjMyNDllLTE1IDQ2NSw3LjE2MzQ0NCA0NjUsMTYgTDQ2NSwyMDggTDQ2NSwyMDggTDAsMjA4IEwwLDE2IEMtMS4wODIxNjZlLTE1LDcuMTYzNDQ0IDcuMTYzNDQ0LDEuNjIzMjQ5ZS0xNSAxNiwwIFoiIG9wYWNpdHk9Ii4wNSIvPgogICAgPHJlY3Qgd2lkdGg9IjEzOSIgaGVpZ2h0PSI0IiB4PSIzMiIgeT0iNzAiIGZpbGw9IiNEOEQ4RDgiIG9wYWNpdHk9Ii40IiByeD0iMiIvPgogICAgPHJlY3Qgd2lkdGg9IjgzIiBoZWlnaHQ9IjQiIHg9IjMyIiB5PSIzOCIgZmlsbD0iI0Q4RDhEOCIgb3BhY2l0eT0iLjQiIHJ4PSIyIi8+CiAgICA8cmVjdCB3aWR0aD0iMjAzIiBoZWlnaHQ9IjQiIHg9IjMyIiB5PSIxMDIiIGZpbGw9IiNEOEQ4RDgiIG9wYWNpdHk9Ii40IiByeD0iMiIvPgogICAgPHJlY3Qgd2lkdGg9IjQzIiBoZWlnaHQ9IjQiIHg9IjMyIiB5PSIxMzQiIGZpbGw9IiNEOEQ4RDgiIG9wYWNpdHk9Ii40IiByeD0iMiIvPgogICAgPHJlY3Qgd2lkdGg9IjExNSIgaGVpZ2h0PSI0IiB4PSIzMiIgeT0iMTY2IiBmaWxsPSIjRDhEOEQ4IiBvcGFjaXR5PSIuNCIgcng9IjIiLz4KICAgIDx0ZXh0IGZpbGw9IiNGRkYiIGZvbnQtZmFtaWx5PSJTcGFjZUdyb3Rlc2stU2VtaUJvbGQsIFNwYWNlIEdyb3Rlc2siIGZvbnQtc2l6ZT0iMTMiIGZvbnQtd2VpZ2h0PSI1MDAiIGxldHRlci1zcGFjaW5nPSIxLjk1IiBvcGFjaXR5PSIuMiI+CiAgICAgIDx0c3BhbiB4PSIzNTcuMTMzIiB5PSI0NSI+JDwvdHNwYW4+CiAgICA8L3RleHQ+CiAgICA8cmVjdCB3aWR0aD0iMjciIGhlaWdodD0iNCIgeD0iMzczIiB5PSIzOCIgZmlsbD0iI0Q4RDhEOCIgb3BhY2l0eT0iLjIiIHJ4PSIyIi8+CiAgICA8dGV4dCBmaWxsPSIjRkZGIiBmb250LWZhbWlseT0iU3BhY2VHcm90ZXNrLVNlbWlCb2xkLCBTcGFjZSBHcm90ZXNrIiBmb250LXNpemU9IjEzIiBmb250LXdlaWdodD0iNTAwIiBsZXR0ZXItc3BhY2luZz0iMS45NSIgb3BhY2l0eT0iLjIiPgogICAgICA8dHNwYW4geD0iMzU3LjEzMyIgeT0iNzciPiQ8L3RzcGFuPgogICAgPC90ZXh0PgogICAgPHJlY3Qgd2lkdGg9IjI3IiBoZWlnaHQ9IjQiIHg9IjM3MyIgeT0iNzAiIGZpbGw9IiNEOEQ4RDgiIG9wYWNpdHk9Ii4yIiByeD0iMiIvPgogICAgPHRleHQgZmlsbD0iI0ZGRiIgZm9udC1mYW1pbHk9IlNwYWNlR3JvdGVzay1TZW1pQm9sZCwgU3BhY2UgR3JvdGVzayIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9IjUwMCIgbGV0dGVyLXNwYWNpbmc9IjEuOTUiIG9wYWNpdHk9Ii4yIj4KICAgICAgPHRzcGFuIHg9IjM1Ny4xMzMiIHk9IjEwOSI+JDwvdHNwYW4+CiAgICA8L3RleHQ+CiAgICA8cmVjdCB3aWR0aD0iMjciIGhlaWdodD0iNCIgeD0iMzczIiB5PSIxMDIiIGZpbGw9IiNEOEQ4RDgiIG9wYWNpdHk9Ii4yIiByeD0iMiIvPgogICAgPHRleHQgZmlsbD0iI0ZGRiIgZm9udC1mYW1pbHk9IlNwYWNlR3JvdGVzay1TZW1pQm9sZCwgU3BhY2UgR3JvdGVzayIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9IjUwMCIgbGV0dGVyLXNwYWNpbmc9IjEuOTUiIG9wYWNpdHk9Ii4yIj4KICAgICAgPHRzcGFuIHg9IjM1Ny4xMzMiIHk9IjE0MSI+JDwvdHNwYW4+CiAgICA8L3RleHQ+CiAgICA8cmVjdCB3aWR0aD0iMjciIGhlaWdodD0iNCIgeD0iMzczIiB5PSIxMzQiIGZpbGw9IiNEOEQ4RDgiIG9wYWNpdHk9Ii4yIiByeD0iMiIvPgogICAgPHRleHQgZmlsbD0iI0ZGRiIgZm9udC1mYW1pbHk9IlNwYWNlR3JvdGVzay1TZW1pQm9sZCwgU3BhY2UgR3JvdGVzayIgZm9udC1zaXplPSIxMyIgZm9udC13ZWlnaHQ9IjUwMCIgbGV0dGVyLXNwYWNpbmc9IjEuOTUiIG9wYWNpdHk9Ii4yIj4KICAgICAgPHRzcGFuIHg9IjM1Ny4xMzMiIHk9IjE3MyI+JDwvdHNwYW4+CiAgICA8L3RleHQ+CiAgICA8cmVjdCB3aWR0aD0iMjciIGhlaWdodD0iNCIgeD0iMzczIiB5PSIxNjYiIGZpbGw9IiNEOEQ4RDgiIG9wYWNpdHk9Ii4yIiByeD0iMiIvPgogICAgPHBhdGggZmlsbD0iI0MzMTc0MSIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNNDI0IDY0QzQxOS42IDY0IDQxNiA2Ny42IDQxNiA3MiA0MTYgNzYuNCA0MTkuNiA4MCA0MjQgODAgNDI4LjQgODAgNDMyIDc2LjQgNDMyIDcyIDQzMiA2Ny42IDQyOC40IDY0IDQyNCA2NHpNNDI0IDc2QzQyMy40IDc2IDQyMyA3NS42IDQyMyA3NSA0MjMgNzQuNCA0MjMuNCA3NCA0MjQgNzQgNDI0LjYgNzQgNDI1IDc0LjQgNDI1IDc1IDQyNSA3NS42IDQyNC42IDc2IDQyNCA3NnpNNDI1IDczTDQyMyA3MyA0MjMgNjggNDI1IDY4IDQyNSA3M3pNNDI0IDMyQzQxOS42IDMyIDQxNiAzNS42IDQxNiA0MCA0MTYgNDQuNCA0MTkuNiA0OCA0MjQgNDggNDI4LjQgNDggNDMyIDQ0LjQgNDMyIDQwIDQzMiAzNS42IDQyOC40IDMyIDQyNCAzMnpNNDI0IDQ0QzQyMy40IDQ0IDQyMyA0My42IDQyMyA0MyA0MjMgNDIuNCA0MjMuNCA0MiA0MjQgNDIgNDI0LjYgNDIgNDI1IDQyLjQgNDI1IDQzIDQyNSA0My42IDQyNC42IDQ0IDQyNCA0NHpNNDI1IDQxTDQyMyA0MSA0MjMgMzYgNDI1IDM2IDQyNSA0MXpNNDI0IDk2QzQxOS42IDk2IDQxNiA5OS42IDQxNiAxMDQgNDE2IDEwOC40IDQxOS42IDExMiA0MjQgMTEyIDQyOC40IDExMiA0MzIgMTA4LjQgNDMyIDEwNCA0MzIgOTkuNiA0MjguNCA5NiA0MjQgOTZ6TTQyNCAxMDhDNDIzLjQgMTA4IDQyMyAxMDcuNiA0MjMgMTA3IDQyMyAxMDYuNCA0MjMuNCAxMDYgNDI0IDEwNiA0MjQuNiAxMDYgNDI1IDEwNi40IDQyNSAxMDcgNDI1IDEwNy42IDQyNC42IDEwOCA0MjQgMTA4ek00MjUgMTA1TDQyMyAxMDUgNDIzIDEwMCA0MjUgMTAwIDQyNSAxMDV6Ii8+CiAgICA8cGF0aCBmaWxsPSIjMTJDMzU3IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik00MjQgMTI4QzQxOS42IDEyOCA0MTYgMTMxLjYgNDE2IDEzNiA0MTYgMTQwLjQgNDE5LjYgMTQ0IDQyNCAxNDQgNDI4LjQgMTQ0IDQzMiAxNDAuNCA0MzIgMTM2IDQzMiAxMzEuNiA0MjguNCAxMjggNDI0IDEyOHpNNDIzIDEzOS40TDQxOS42IDEzNiA0MjEgMTM0LjYgNDIzIDEzNi42IDQyNyAxMzIuNiA0MjguNCAxMzQgNDIzIDEzOS40ek00MjQgMTYwQzQxOS42IDE2MCA0MTYgMTYzLjYgNDE2IDE2OCA0MTYgMTcyLjQgNDE5LjYgMTc2IDQyNCAxNzYgNDI4LjQgMTc2IDQzMiAxNzIuNCA0MzIgMTY4IDQzMiAxNjMuNiA0MjguNCAxNjAgNDI0IDE2MHpNNDIzIDE3MS40TDQxOS42IDE2OCA0MjEgMTY2LjYgNDIzIDE2OC42IDQyNyAxNjQuNiA0MjguNCAxNjYgNDIzIDE3MS40eiIvPgogIDwvZz4KPC9zdmc+Cg==\" />\n </div>\n </div>\n )}\n\n {datePickerEnabled && (\n <div className={ loading ? 'content content__loading' : 'content'}>\n <h2>One last thing.</h2>\n <p>Our invoice system keeps track of what work you've invoiced. To help tailor this for you,\n please choose how far back you'd like us to look for any work you'd like to invoice using Slate.\n Any new work you add to Slate will be tracked automatically so you never forget.</p>\n <div className=\"choice\">\n { (dateFns.differenceInMonths(new Date(), currentUser.created_at) >= 3) && (\n <button onClick={() => confirmStartDate( dateFns.subMonths( new Date(), 3) )}>\n Last 3 Months\n </button>\n ) }\n { (dateFns.differenceInDays(new Date(), currentUser.created_at) >= 30) && (\n <button onClick={() => confirmStartDate( dateFns.subDays( new Date(), 30) )}>\n Last 30 Days\n </button>\n ) }\n <button onClick={() => confirmStartDate( new Date() )}>\n From Today\n </button>\n <button onClick={() => confirmStartDate( dateFns.parse(currentUser.created_at) )}>\n From {dateFns.format(currentUser.created_at, 'MMMM YYYY')}\n <span>When you joined Slate</span>\n </button>\n </div>\n </div>\n )}\n\n </div>\n <div className=\"feature__bg\"></div>\n </div>\n )}\n </section>\n );\n}\n\nconst useMountedRef = () => {\n const mountedRef = React.useRef(false);\n\n React.useEffect(() => {\n setTimeout(() => {\n mountedRef.current = true;\n });\n }, []);\n\n return mountedRef;\n};\n\nexport default Invoices;\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M6 18L18 6M6 6l12 12\"\n});\n\nvar SvgRemove = function SvgRemove(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgRemove, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/remove.f7769dfa.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M12 6v6m0 0v6m0-6h6m-6 0H6\"\n});\n\nvar SvgAdd = function SvgAdd(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n fill: \"none\",\n viewBox: \"0 0 24 24\",\n stroke: \"currentColor\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgAdd, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/add.f4e481ab.svg\";\nexport { ForwardRef as ReactComponent };","/* eslint-disable jsx-a11y/accessible-emoji */\nimport React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux'\nimport { Form, Field, FormSpy } from 'react-final-form'\nimport { OnChange } from 'react-final-form-listeners'\nimport agent from '../../agent';\nimport { _, get, has, remove, isEmpty, isNil, values } from 'lodash'\nimport arrayMutators from 'final-form-arrays'\nimport { FieldArray } from 'react-final-form-arrays'\nimport Select from 'react-select';\nimport { history } from '../../configureStore';\nimport { showNotificationWithTimeout } from '../../components/Notifications';\nimport {ReactComponent as DeleteIcon} from '../../images/remove.svg';\nimport {ReactComponent as AddIcon} from '../../images/add.svg';\nimport DayPickerInput from 'react-day-picker/DayPickerInput';\nimport { formatDate, parseDate } from \"react-day-picker/moment\";\nimport dateFns from 'date-fns';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport { currencies } from '../../currencies';\nimport Tooltip from '../Tooltip';\nimport { Info } from '../Info';\nimport Overlay from './Overlay';\nimport { Redirect } from 'react-router';\nimport {ReactComponent as ErrorIcon} from '../../images/error.svg';\n\nexport const InvoicesForm = (props) => {\n const {invoice={}, dispatch, params} = props;\n\n const overlay = useSelector(state => get(state.common, 'overlay', false));\n const currentUser = useSelector(state => get(state.common, 'currentUser', {}));\n\n let notification = useSelector(state => get(state.common, 'notification', false));\n let loading = useSelector(state => get(state.common, 'loading', false));\n const clients = useSelector(state => get(state.clients, 'clients', []));\n\n const [works, setWorks] = useState([])\n const [filteredWorks, setFilteredWorks] = useState([])\n\n const [projects, setProjects] = useState([])\n const [filteredProjects, setFilteredProjects] = useState([])\n const [selectedClient, changeSelectedClient] = useState(null);\n\n const [missingInvoiceData, setMissingInvoiceData] = useState(false);\n const [missingClientData, setMissingClientData] = useState(false);\n\n const [sending, setSending] = useState(false);\n const [overlayName, setOverlayName] = useState();\n\n const FORMAT = 'DD/MM/YYYY';\n\n useEffect(() => {\n let client = clients.find(cl => params.client_id == cl.id) || null;\n changeSelectedClient(client)\n\n if(currentUser && (!currentUser.business.name || !currentUser.business.address)) {\n openOverlay('missing_business');\n }\n }, []);\n\n useEffect(() => {\n if(invoice.client_id) {\n let client = clients.find(cl => invoice.client_id == cl.id) || null;\n changeSelectedClient(client)\n }\n }, [invoice.client_id]);\n\n useEffect(() => {\n if(selectedClient) {\n\n // check invoice details have been provided\n if( props.invoice.errors_preventing_submission && !isEmpty(props.invoice.errors_preventing_submission) ) {\n setMissingInvoiceData(true);\n } else {\n setMissingInvoiceData(false);\n }\n\n // check client details have been provided\n if( !selectedClient.contact_name || !selectedClient.email || !selectedClient.address ) {\n openOverlay('client');\n setMissingClientData(true);\n } else {\n setMissingClientData(false);\n }\n\n if( isEmpty(params) ) {\n agent.Clients.invoiceable_works(selectedClient.id).then((res) => setWorks(res.body))\n agent.Clients.invoiceable_projects(selectedClient.id).then((res) => setProjects(res.body))\n }\n\n }\n },[selectedClient])\n\n useEffect(() => {\n\n if(selectedClient) {\n filterWorkByCurrency(selectedClient.currency)\n }\n\n }, [works, projects]);\n\n const filterWorkByCurrency = (currency, values=undefined) => {\n setFilteredWorks(\n Object.values(works).filter((work) => {\n return work.currency === currency\n })\n );\n setFilteredProjects(\n Object.values(projects).filter((project) => {\n return project.currency === currency\n })\n );\n if(!isEmpty(values)){\n values.invoice_line_items = values.invoice_line_items.map((line_item)=>{\n if(isNil(line_item.invoiceable_id)){\n return line_item\n }else{\n return {...line_item, ...{'_destroy': true}}\n }\n })\n }\n }\n\n useEffect(() => {\n //filterWorkByCurrency(invoice.currency)\n }, [invoice.currency, works]);\n\n const onClientChange = (client_id, values) => {\n if(client_id) {\n let client = clients.find(cl => client_id == cl.id) || null;\n changeSelectedClient(client);\n }\n }\n\n const WhenFieldChanges = ({ field, set, becomes, to }) => (\n <Field name={set} subscription={{}}>\n {(\n // No subscription. We only use Field to get to the change function\n { input: { onChange } }\n ) => (\n <FormSpy subscription={{}}>\n {({ form }) => (\n <OnChange name={field}>\n {value => {\n onChange(to);\n }}\n </OnChange>\n )}\n </FormSpy>\n )}\n </Field>\n );\n\n const clientList = Object.values(clients).map((client) => ({\n value: client.id,\n label: client.name\n }))\n\n const paymentTerms = Object.values([7,15,30,45,60,90]).map((term) => ({\n value: term,\n label: term + ' Days'\n }))\n\n const onSubmit = (values, send) => {\n values.invoice_line_items_attributes = values.invoice_line_items\n values.client_name = selectedClient.name\n if(values.id){\n dispatch({ type: 'INVOICE_UPDATE',\n payload: agent.Invoices.update(values).then((res) => {\n if(!res.body.errors) {\n if(send === true) {\n\n setSending(true);\n onStateTransition('INVOICE_UPDATE', props.invoice, 'submitted', false)\n\n } else {\n\n if(!isEmpty(res.body.errors_preventing_submission)) {\n setMissingInvoiceData(true)\n } else {\n setMissingInvoiceData(false)\n }\n\n showNotificationWithTimeout(dispatch, 'Invoice updated')\n }\n }\n return res;\n })\n })\n }else{\n dispatch({ type: 'INVOICE_CREATE',\n payload: agent.Invoices.create(values).then((res) => {\n if(!res.body.errors) {\n showNotificationWithTimeout(dispatch, 'Invoice created')\n }\n return res;\n })\n })\n\n }\n\n }\n\n const invoiceLineItemWithoutDeleted = (values) => {\n return values['invoice_line_items'].filter(li => !li._destroy)\n }\n\n const invoiceLineItemTotal = (values, key) => {\n return invoiceLineItemWithoutDeleted(values).map(li => Number(li[key])).reduce((a, b) => a + b, 0).toFixed(2)\n }\n\n const invoiceSubtotal = (values) => {\n return invoiceLineItemTotal(values, 'subtotal')\n }\n\n const invoiceTotal = (values) => {\n return invoiceLineItemTotal(values, 'total')\n }\n\n const invoiceTax = (values) => {\n return (invoiceTotal(values) - invoiceSubtotal(values)).toFixed(2)\n }\n\n const invoiceCurrency = (values) => {\n return getSymbolFromCurrency(\n get(values.currency, 'value', values.currency)\n //values.currency.value ? values.currency.value : values.currency\n );\n }\n\n const getCurrency = (client_id) => {\n let client = clients.find(cl => client_id == cl.id) || null;\n if( client ) {\n return client.currency;\n }\n }\n\n const ReactSelectAdapter = ({ input, selected, isDisabled, ...rest }) => {\n\n const handleChange = (option: ValueType<Option, false>) => {\n input.onChange(option?.value);\n };\n\n return (\n <Select\n {...input}\n {...rest}\n className=\"react-select-container\"\n classNamePrefix=\"react-select\"\n value={selected}\n isDisabled={isDisabled}\n onChange={handleChange}/>\n )\n }\n\n const onStateTransition = (type, invoice, state, message) => {\n props.dispatch({\n type: type,\n payload: agent.Invoices.transition_state(invoice.id, state).then((res) => {\n if(!res.body.errors) {\n if(state === 'submitted') {\n history.push('/invoices?invoice=' + invoice.id);\n }\n if(message) {\n showNotificationWithTimeout(props.dispatch, message);\n }\n }\n return res;\n })\n })\n }\n\n const saveSend = (values) => {\n onSubmit(values, true)\n }\n\n const updateSelectedClient = (client) => {\n changeSelectedClient(client)\n }\n\n const openOverlay = (overlay) => {\n if (overlay) {\n setOverlayName(overlay);\n }\n dispatch({ type: 'OPEN_OVERLAY' });\n }\n\n const closeOverlay = () => {\n dispatch({ type: 'CLOSE_OVERLAY' });\n }\n\n if(isEmpty(clientList)){\n return 'Loading'\n }\n\n return (\n <>\n <Form\n onSubmit={onSubmit}\n initialValues={invoice}\n mutators={{\n ...arrayMutators\n }}\n render={({ handleSubmit, form: {\n mutators: { push, pop }\n }, submitting, pristine, values }) => (\n <form onSubmit={handleSubmit}>\n\n <WhenFieldChanges\n field=\"client_id\"\n set=\"currency\"\n to={getCurrency(values.client_id)}\n />\n\n <WhenFieldChanges\n field=\"payment_terms\"\n set=\"due_date\"\n to={dateFns.addDays(values.date, (\n values.payment_terms ? (\n values.payment_terms.value ? values.payment_terms.value : values.payment_terms\n ) : 0\n ) )}\n />\n\n <WhenFieldChanges\n field=\"date\"\n set=\"due_date\"\n to={dateFns.addDays(values.date, (\n values.payment_terms ? (\n values.payment_terms.value ? values.payment_terms.value : values.payment_terms\n ) : 0\n ) )}\n />\n\n <div className=\"group\">\n\n <div className=\"field\">\n <label>\n <span>Client</span>\n <Field\n name=\"client_id\"\n render={ReactSelectAdapter}\n options={clientList}\n isDisabled={(params.client_id || invoice.client_id) ? true : false}\n selected={clientList.find(client => client.value.toString() == values.client_id)} />\n </label>\n {selectedClient && (\n <>\n { missingClientData && (\n <small>You need to provide some details for this client</small>\n ) }\n </>\n )}\n\n {!selectedClient && (\n <div className=\"message message__issue message__tiny\">\n <ErrorIcon />\n <div>Select a client to raise a new invoice.</div>\n </div>\n )}\n\n </div>\n\n <OnChange name=\"client_id\">\n {(value, previous) => {\n onClientChange(value)\n }}\n </OnChange>\n\n <hr />\n\n <div className=\"inline\">\n\n <div className=\"field field__grow\">\n <label>\n <span>Currency</span>\n <Field\n name=\"currency\"\n render={ReactSelectAdapter}\n options={currencies}\n isDisabled={(invoice.id) ? true : false}\n selected={currencies.find(currency => currency.value.toString() === values.currency)} />\n </label>\n </div>\n\n <OnChange name=\"currency\">\n {(value, previous) => {\n filterWorkByCurrency(value, values)\n }}\n </OnChange>\n\n <div className=\"field field__grow\">\n <label>\n <span>Payment Terms</span>\n <Field\n name=\"payment_terms\"\n render={ReactSelectAdapter}\n options={paymentTerms}\n selected={paymentTerms.find(client => client.value === values.payment_terms)} />\n </label>\n </div>\n\n <div className=\"field field__grow\">\n <label>\n <span>Issued On</span>\n <Field name=\"date\">\n {props => (\n <div>\n <DayPickerInput\n value={props.input.value}\n format={FORMAT}\n formatDate={formatDate}\n parseDate={parseDate}\n placeholder={FORMAT}\n onDayChange={props.input.onChange}\n dayPickerProps={{\n disabledDays: {\n after: new Date()\n }\n }}\n />\n </div>\n )}\n </Field>\n </label>\n </div>\n\n <div className=\"field field__grow\">\n <label>\n <span>Due On</span>\n <Field name=\"due_date\">\n {props => (\n <div>\n <DayPickerInput\n inputProps={{ disabled: true }}\n value={props.input.value}\n format={FORMAT}\n formatDate={formatDate}\n parseDate={parseDate}\n placeholder={FORMAT}\n onDayChange={props.input.onChange}\n dayPickerProps={{\n disabledDays: {\n before: new Date(values.date)\n }\n }}\n />\n </div>\n )}\n </Field>\n </label>\n </div>\n\n </div>\n\n <div className=\"inline\">\n\n <div className=\"field field__grow\">\n\n <label>\n <span>\n <span>Invoice Note</span>\n <Tooltip message={'Add any additional details to your invoice such as tax ID, company registration number or purchase order number'} position={'top'} size={'large'}><Info /></Tooltip>\n </span>\n <Field\n name=\"invoice_note\"\n component=\"textarea\"\n className=\"noResize\"\n />\n </label>\n\n </div>\n\n <div className=\"field field__grow\">\n\n <label>\n <span>\n <span>Payment Details</span>\n <Tooltip message={'Add your payment details here so your clients know how to pay you'} position={'top'} size={'large'}><Info /></Tooltip>\n </span>\n <Field\n name=\"payment_details\"\n component=\"textarea\"\n className=\"noResize\"\n />\n </label>\n\n </div>\n\n </div>\n\n </div>\n\n {selectedClient && (\n <>\n\n <div className=\"group\">\n\n <div className=\"field__group\">\n <div className=\"field field__grow\">Description</div>\n <div className=\"field field__price\">Subtotal</div>\n <div className=\"field field__tax\">Tax</div>\n <div className=\"field field__price\">Total</div>\n <div className=\"field field__button\"></div>\n </div>\n\n <FieldArray name=\"invoice_line_items\">\n {({ fields }) =>\n fields.map((name, index) => {\n if(fields.value[index]['_destroy']){\n return ''\n }\n return (\n <div className=\"field__group\" key={name}>\n <div className=\"field field__grow\">\n <label>\n <Field\n name={`${name}.description`}\n component=\"input\"\n placeholder=\"Description\"\n />\n </label>\n </div>\n <div className={`field field__price field__helper field__helper-${ values.currency ? values.currency : 'gbp' }`}>\n <label>\n {fields.value[index]['invoiceable_type'] === 'WorkDay' ? (\n <Tooltip message={\"You cannot change the amount for days in your schedule.\"} position={'top'} size={'large'}>\n <div className=\"helper\">\n <span>{invoiceCurrency(values)}</span>\n <Field\n disabled={\n fields.value[index]['invoiceable_type'] === 'WorkDay' ? true : false\n }\n name={`${name}.subtotal`}\n component=\"input\"\n placeholder=\"0\"\n />\n </div>\n </Tooltip>\n ) : (\n <div className=\"helper\">\n <span>{invoiceCurrency(values)}</span>\n <Field\n name={`${name}.subtotal`}\n component=\"input\"\n placeholder=\"0\"\n />\n </div>\n )}\n <WhenFieldChanges\n field={`${name}.subtotal`}\n set={`${name}.total`}\n to={\n !fields.value[index]['tax_rate'] || !fields.value[index]['subtotal']\n ?\n fields.value[index]['subtotal'] ? fields.value[index]['subtotal'] : 0\n :\n (fields.value[index]['subtotal'] * (1+(fields.value[index]['tax_rate'] / 100))).toFixed(2)\n }\n />\n <WhenFieldChanges\n field={`${name}.subtotal`}\n set={`${name}.unit_amount`}\n to={fields.value[index]['subtotal']}\n />\n </label>\n </div>\n <div className=\"field field__tax field__helper field__helper-percentage\">\n <label>\n <div className=\"helper\">\n <span>%</span>\n <Field\n name={`${name}.tax_rate`}\n component=\"input\"\n placeholder=\"0\"\n />\n </div>\n <WhenFieldChanges\n field={`${name}.tax_rate`}\n set={`${name}.total`}\n to={\n !fields.value[index]['tax_rate'] || !fields.value[index]['subtotal']\n ?\n fields.value[index]['subtotal'] ? fields.value[index]['subtotal'] : 0\n :\n (fields.value[index]['subtotal'] * (1+(fields.value[index]['tax_rate'] / 100))).toFixed(2)\n }\n />\n </label>\n </div>\n <div className={`field field__price field__helper field__helper-${ values.currency ? values.currency : 'gbp' }`}>\n <label>\n <div className=\"helper\">\n <span>{invoiceCurrency(values)}</span>\n <Field\n disabled\n name={`${name}.total`}\n component=\"input\"\n placeholder=\"0\"\n />\n </div>\n </label>\n </div>\n <div className=\"field field__button\">\n <Tooltip message={\"Remove\"} position={'top'} size={'large'}>\n <div\n className=\"btn btn__muted btn__square\"\n onClick={() => {\n if(fields.value[index].id === undefined) {\n let field = fields.value[index]\n let item;\n if(get(field, 'invoiceable_id')) {\n // work day\n if(get(field, 'invoiceable_type') === 'WorkDay') {\n item = Object.values(filteredWorks).filter((work) => {\n return work.id === field.invoiceable_id\n })\n if(!isEmpty(item)) {\n works.push(item[0])\n }\n }\n // project\n if(get(field, 'invoiceable_type') === 'Project') {\n item = Object.values(filteredProjects).filter((project) => {\n return project.id === field.invoiceable_id\n })\n if(!isEmpty(item)) {\n projects.push(item[0])\n }\n }\n }\n fields.remove(index)\n }else{\n fields.update(index, {id: fields.value[index].id, '_destroy': true})\n }\n }}\n >\n <DeleteIcon />\n </div>\n </Tooltip>\n </div>\n </div>\n )\n })\n }\n </FieldArray>\n\n <Tooltip message={\"Custom line items don't count towards your monthly and annual revenue targets.\"} position={'top'} size={'large'}>\n <div\n className=\"btn btn__auto btn__outline\"\n onClick={() => push('invoice_line_items', {quantity: 1, subtotal: 0.0, total: 0.00, tax_rate: 20})}\n >\n <span>Add a custom line item</span>\n </div>\n </Tooltip>\n\n {( !props.invoice.state && isEmpty(params) && ((!isEmpty(works)) || !isEmpty(projects)) ) && (\n <>\n <hr />\n <div className=\"message message__issue message__tiny\">\n <ErrorIcon />\n <div>You have some unbilled work you still need to invoice for this client</div>\n </div>\n </>\n )}\n\n { filteredWorks.filter((el)=> {\n return !values.invoice_line_items.map(li => `${li.invoiceable_type}:${li.invoiceable_id}`).includes(`WorkDay:${el.id}`)\n }).map((work) => (\n <div className=\"field__group\" key={work}>\n <div className=\"field field__grow\">\n <label>\n <input type=\"text\" value={work.description} disabled />\n </label>\n </div>\n <div class=\"field field__price field__helper\">\n <label>\n <div class=\"helper\">\n <span>{getSymbolFromCurrency(work.currency)}</span>\n <input value={work.price} disabled />\n </div>\n </label>\n </div>\n <Tooltip message={\"Add\"} position={'top'} size={'large'}>\n <div\n onClick={() => {\n push('invoice_line_items', {description: work.description, subtotal: work.price, total: (work.price * 1.2).toFixed(2), unit_amount: work.unit_amount, quantity: work.quantity, tax_rate: 20, invoiceable_type: 'WorkDay', invoiceable_id: work.id})\n remove(works, (w) => { return w.id === work.id})\n }}\n className=\"btn btn__muted btn__square\">\n <AddIcon />\n </div>\n </Tooltip>\n </div>\n ))}\n\n { filteredProjects.filter((el)=> {\n return !values.invoice_line_items.map(li => `${li.invoiceable_type}:${li.invoiceable_id}`).includes(`Project:${el.id}`)\n }).map((project) => (\n <div className=\"field__group\" key={project}>\n <div className=\"field field__grow\">\n <label>\n <input type=\"text\" value={project.title} disabled />\n </label>\n </div>\n <div class=\"field field__price field__helper\">\n <label>\n <div class=\"helper\">\n <span>{getSymbolFromCurrency(project.currency)}</span>\n <input value={project.amount_uninvoiced} disabled />\n </div>\n </label>\n </div>\n <Tooltip message={\"Add\"} position={'top'} size={'large'}>\n <div\n onClick={() => {\n push('invoice_line_items', {description: project.title, subtotal: project.amount_uninvoiced, total: (project.amount_uninvoiced * 1.2).toFixed(2), quantity: 1, tax_rate: 20, invoiceable_type: 'Project', invoiceable_id: project.id})\n remove(projects, (w) => { return w.id === project.id})\n }}\n className=\"btn btn__muted btn__square\">\n <AddIcon />\n </div>\n </Tooltip>\n </div>\n ))}\n\n <hr />\n\n <div className=\"field__group field__group__summary\">\n <div className=\"field field__summary\">\n <span>Subtotal</span>\n <h3>{invoiceCurrency(values)}{invoiceSubtotal(values)}</h3>\n </div>\n <div className=\"field field__summary\">\n <span>Tax</span>\n <h3>{invoiceCurrency(values)}{invoiceTax(values)}</h3>\n </div>\n <div className=\"field field__summary\">\n <span>Total</span>\n <h3>{invoiceCurrency(values)}{invoiceTotal(values)}</h3>\n </div>\n </div>\n\n </div>\n\n <div className=\"field field__fixed\">\n\n { props.invoice.state === 'draft' && (\n <a href={`/api/invoices/${props.invoice.id}/pdf`} download className=\"btn btn__outline btn__tight\">\n <span>Download PDF</span>\n </a>\n )}\n\n <div className=\"button__group\">\n <button\n disabled={sending || loading || !(values.client_id) || !(values.date)}\n type=\"Submit\"\n className={\n props.invoice.state === 'draft' ?\n 'btn btn__outline'\n :\n sending || loading ? 'btn btn__loading' : 'btn'\n }>\n <div className=\"loader loader__button\"></div>\n <span>Save Invoice</span>\n </button>\n { props.invoice.state === 'draft' && (\n <>\n {missingClientData ? (\n <div\n onClick={() => { openOverlay('client') }}\n className=\"btn disabled\">\n <span>Issue Invoice</span>\n <Tooltip message={'You need to update this client before you can send this invoice.'} position={'top'} size={'large'}>\n <Info />\n </Tooltip>\n </div>\n ) : (\n <div\n onClick={() => { saveSend(values) }}\n disabled={sending || loading || missingInvoiceData}\n className={sending || loading ? 'btn btn__loading' : 'btn'}>\n <div className=\"loader loader__button\"></div>\n <span>Issue Invoice</span>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </>\n )}\n\n { notification && <div className=\"success\">{notification}</div>}\n\n { overlay && (\n <Overlay\n overlay={overlay}\n overlayName={overlayName}\n client={selectedClient}\n currentUser={currentUser}\n invoice={invoice ? invoice : null}\n updateSelectedClient={updateSelectedClient}\n closeOverlay={(e) => closeOverlay()}></Overlay>\n )}\n\n </form>\n )}\n />\n </>\n )\n}\n\n","import React, { useMemo, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link } from 'react-router-dom';\nimport { get, isEmpty } from 'lodash'\nimport { InvoicesForm } from '../components/Invoices/InvoicesForm'\nimport * as QueryString from \"query-string\"\nimport dateFns from 'date-fns';\nimport agent from '../agent';\nimport Overlay from '../components/Invoices/Overlay';\n\nconst InvoiceNew = (props) => {\n\n const params = QueryString.parse(props.location.search);\n\n const dispatch = useDispatch()\n\n const currentUser = useSelector(state => get(state.common, 'currentUser', {}));\n\n let currency = params.currency || currentUser.currency;\n const projectId = params.project_id || null;\n\n const [clientId, updateClient] = useState(params.client_id);\n const clients = useSelector(state => get(state.clients, 'clients', []));\n let client = clients.find(cl => clientId == cl.id) || null;\n\n const [dataLoaded, setDataLoaded] = useState(false)\n const [works, setWorks] = useState([])\n const [projects, setProjects] = useState([])\n\n const invoiceLineItems = (currency=undefined) => {\n let lineItems = []\n const workInCurrency = works.filter((work) => { return work.currency === currency && work.project_id == projectId })\n\n if(!isEmpty(works)){\n lineItems = lineItems.concat(workInCurrency.map((work) => {\n return {description: work.description, subtotal: work.price, total: work.price * 1.2, unit_amount: work.unit_amount, quantity: work.quantity, tax_rate: 20, invoiceable_type: 'WorkDay', invoiceable_id: work.id}\n }))\n }\n\n const projectsInCurrency = projects.filter((project) => { return project.currency === currency && project.id == projectId })\n\n if(!isEmpty(projects)){\n lineItems = lineItems.concat(\n projectsInCurrency.map((project) => {\n return {description: project.title, subtotal: project.amount_uninvoiced, unit_amount: project.amount_uninvoiced, total: (project.amount_uninvoiced * 1.2).toFixed(2), quantity: 1, tax_rate: 20, invoiceable_type: 'Project', invoiceable_id: project.id}\n })\n )\n }\n\n if(isEmpty(lineItems)){\n lineItems.push({\n subtotal: 0, quantity: 1, tax_rate: 20, total: 0\n })\n }\n return lineItems\n }\n\n const newInvoice = {\n client_id: client ? client.id : null,\n client_name: client ? client.name : null,\n currency: currency,\n invoice_note: get(currentUser.business, 'invoice_note'),\n payment_details: get(currentUser.business, 'payment_details'),\n date: new Date(),\n payment_terms: 30,\n due_date: dateFns.addDays(new Date(), 30),\n invoice_line_items: invoiceLineItems(currency)\n }\n\n useEffect(() => {\n agent.Clients.invoiceable_works(clientId, projectId).then((res) => { setDataLoaded(true); setWorks(res.body) })\n agent.Clients.invoiceable_projects(clientId).then((res) => { setDataLoaded(true); setProjects(res.body) })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n if(dataLoaded){\n return (\n <section className=\"component__route component__route__invoices\">\n <header>\n <h2><Link to={'/invoices'}>Invoices</Link> / New</h2>\n </header>\n <section>\n <InvoicesForm\n dispatch={dispatch}\n invoice={newInvoice}\n params={params} />\n </section>\n </section>\n );\n }else{\n return (<div className=\"loading\"><div className=\"loader\"></div></div>)\n }\n }\n\nexport default InvoiceNew;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link } from 'react-router-dom';\nimport { get, isEmpty } from 'lodash'\nimport { InvoicesForm } from '../components/Invoices/InvoicesForm'\nimport agent from '../agent';\nimport * as QueryString from \"query-string\";\nimport Overlay from '../components/Invoices/Overlay';\nimport { history } from '../configureStore';\n\nconst InvoiceEdit = (props) => {\n\n const dispatch = useDispatch()\n\n const params = QueryString.parse(props.location.search);\n\n const currentUser = useSelector(state => get(state.common, 'currentUser', {}));\n\n const invoiceId = get(props, \"match.params.invoiceId\", null);\n const invoices = useSelector(state => get(state.invoices, 'invoices', []));\n const clients = useSelector(state => get(state.clients, 'clients', []));\n \n const [clientId, updateClient] = useState();\n const [dataLoaded, setDataLoaded] = useState(false)\n const [works, setWorks] = useState([])\n const [projects, setProjects] = useState([])\n const [invoice, setInvoice] = useState({})\n \n let client = clients.find(cl => clientId == cl.id) || null;\n\n const invoiceLineItems = (currency=undefined, lineItems=[]) => {\n currency = currency || currentUser.currency\n const workInCurrency = works.filter((work) => { return work.currency === currency })\n\n if(!isEmpty(works)){\n lineItems = lineItems.concat(workInCurrency.map((work) => {\n return {description: work.description, subtotal: work.price, total: work.price * 1.2, unit_amount: work.unit_amount, quantity: work.quantity, tax_rate: 20, invoiceable_type: 'WorkDay', invoiceable_id: work.id}\n }))\n }\n\n if(!isEmpty(projects)){\n lineItems = lineItems.concat(\n projects.map((project) => {\n return {description: project.title, subtotal: project.amount_uninvoiced, unit_amount: project.amount_uninvoiced, total: (project.amount_uninvoiced * 1.2).toFixed(2), quantity: 1, tax_rate: 20, invoiceable_type: 'Project', invoiceable_id: project.id}\n })\n )\n }\n\n if(isEmpty(lineItems)){\n lineItems.push({\n subtotal: 0, quantity: 1, tax_rate: 20, total: 0\n })\n }\n return lineItems\n }\n\n useEffect(() => {\n dispatch({ type: 'INVOICES_PAGE_LOADED', payload: agent.Invoices.all() })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[]);\n\n useEffect(() => {\n setInvoice(invoices.find(inv => inv.id.toString() === invoiceId) || {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[invoices]);\n\n useEffect(() => {\n if(!isEmpty(invoice) && !isEmpty(clients)) {\n agent.Clients.invoiceable_works(invoice.client_id).then((res) => { setDataLoaded(true); setWorks(res.body); })\n agent.Clients.invoiceable_projects(invoice.client_id).then((res) => { setDataLoaded(true); setProjects(res.body) })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },[invoice, clients]);\n\n useEffect(() => {\n if(!isEmpty(invoice)) {\n updateClient(invoice.client_id)\n if(invoice.state !== 'draft') {\n window.location.href = \"/invoices\";\n }\n }\n },[invoice]);\n\n if(dataLoaded){\n return (\n <section className=\"component__route component__route__invoices\">\n <header>\n <h2><Link to={'/invoices'}>Invoices</Link> / Edit</h2>\n </header>\n <section>\n <InvoicesForm\n dispatch={dispatch}\n invoice={invoice}\n params={params} />\n </section>\n </section>\n );\n }else{\n return (<div className=\"loading\"><div className=\"loader\"></div></div>)\n }\n\n}\n\nexport default InvoiceEdit;\n","import React from 'react';\nimport { CardElement, injectStripe } from 'react-stripe-elements';\nimport ReactDOM from 'react-dom';\nimport dateFns from 'date-fns';\n\nclass Overlay extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.deleteClientButtonRef = React.createRef();\n\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: this.props.overlay,\n overlay_history: ['client'],\n new: false,\n loading: false,\n client: this.props.client\n }\n\n }\n\n componentDidMount(){\n document.addEventListener(\"keydown\", this.keyPress.bind(this), false);\n }\n\n componentWillUnmount(){\n document.removeEventListener(\"keydown\", this.keyPress.bind(this), false);\n }\n\n keyPress(e, field=false){\n\n // escape\n // if(e.keyCode === 27) {\n // this.props.closeOverlay(e)\n // }\n\n // enter\n if(e.keyCode === 13) {\n if (this.deleteClientButtonRef.current) {\n this.deleteClientButtonRef.current.click()\n }\n }\n\n }\n\n confirmPauseSubscription(e) {\n this.props.pause(this.props.subscription.id);\n this.setState({\n pause_loading: true\n })\n }\n\n confirmCancelSubscription(e) {\n this.props.cancel(this.props.subscription.id);\n this.setState({\n cancel_loading: true\n })\n }\n\n render() {\n\n const close =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M19 5L5 19M19 19L5 5\"/>\n </g>\n </svg>\n\n const extend =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\">\n <path d=\"M7.5.5l8 7.5-8 7.5zM5 11.281L.5 15.5V.5L5 4.719\"/>\n </g>\n </svg>\n\n const pause =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\">\n <path d=\"M1.5.5h4v15h-4zM10.5.5h4v15h-4z\"/>\n </g>\n </svg>\n\n const icon_delete =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\">\n <path d=\"M2.5 6.5v7c0 1.105.895 2 2 2h7c1.105 0 2-.895 2-2v-7M.5 3.5h15M5.5 3.5v-3h5v3\"/>\n </g>\n </svg>\n\n return (\n ReactDOM.createPortal(\n\n <div className=\"focus\">\n <div className={`overlay__blocks counter__1 initialLoad`}>\n\n <div className=\"overlay__block delete\">\n <div className=\"header\">\n <h2>What do you want to do?</h2>\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n <div className=\"padding\">\n <div className=\"option\">\n {this.props.subscription.state === 'trialing' ? (\n <>\n <h3>{ extend } Extend trial by 30 days</h3>\n <p>If you need more time to get the most of your Slate trial, we'll <br/> extend your trial by another 30 days.</p>\n <button\n disabled={this.props.loading && this.state.pause_loading}\n className={(this.props.loading && this.state.pause_loading) ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.confirmPauseSubscription(e)}>\n <div className=\"loader loader__button\"></div>\n <span>Extend my trial</span>\n </button>\n </>\n ) : (\n <>\n <h3>{ pause } Pause my subscription for 3 months</h3>\n <p>If you need a break, we'll pause payments for the next 3 months. You will still have access to your Slate account during this time.</p>\n <button\n disabled={this.props.loading && this.state.pause_loading}\n className={(this.props.loading && this.state.pause_loading) ? 'btn btn__loading' : 'btn'}\n onClick={(e) => this.confirmPauseSubscription(e)}>\n <div className=\"loader loader__button\"></div>\n <span>Pause my subscription</span>\n </button>\n </>\n )}\n </div>\n <hr />\n <div className=\"option delete\">\n <h3>{ icon_delete } Cancel my subscription</h3>\n <p><b>You will lose access to Slate as soon as you do this</b>. You can get <br/>access again by resubscribing at any time.</p>\n <button\n disabled={this.props.loading && this.state.cancel_loading}\n className={(this.props.loading && this.state.cancel_loading) ? 'btn btn__delete btn__loading' : 'btn btn__delete'}\n onClick={(e) => this.confirmCancelSubscription(e)}>\n <div className=\"loader loader__button\"></div>\n <span>Cancel my subscription</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n className=\"overlay__bg\"\n onClick={(e) => this.props.closeOverlay(e) }></div>\n\n </div>, document.querySelector('.overlay')\n )\n )\n\n\n }\n\n}\n\nclass CheckoutForm extends React.Component {\n\n constructor(props) {\n super();\n this.state = {\n error: false,\n loading: false,\n duration: false // monthly is false, yearly is true\n };\n }\n\n componentDidUpdate(prevProps,prevState) {\n\n if( prevProps.subscription !== this.props.subscription) {\n \n this.setState({\n loading: false\n })\n\n }\n\n }\n\n handleSubmit = (e) => {\n\n e.preventDefault();\n\n this.props.stripe.createToken({name: this.props.currentUser.name}).then(res => {\n\n if (res.error) {\n\n this.setState({\n error: res.error.message,\n loading: false\n })\n\n } else {\n\n this._element.clear(); // clears card input\n\n this.setState({\n error: false,\n loading: true\n })\n\n this.props.submit(res.token.id, this.state.duration)\n\n }\n\n });\n\n };\n\n switchDuration(value) {\n\n this.setState({duration: value})\n\n }\n\n closeOverlay = (e) => {\n\n e.preventDefault();\n\n this.setState({\n overlay: false,\n loading: false\n })\n\n }\n\n render() {\n\n let color;\n\n if( !this.props.subscription ) {\n\n color = 'inherit';\n\n } else {\n\n color = this.props.currentUser.dark_mode ? 'white' : 'inherit';\n\n }\n\n return (\n <div className=\"field\">\n\n <div className=\"checkout\">\n\n {(!this.props.subscription) &&\n <div>\n <label onClick={() => {this.switchDuration(false)}}>\n <input type=\"radio\" name=\"duration\" value=\"monthly\" checked={!this.state.duration ? true : false} />\n Bill Monthly\n </label>\n\n <label onClick={() => {this.switchDuration(true)}}>\n <input type=\"radio\" name=\"duration\" value=\"annually\" checked={this.state.duration ? true : false} />\n Bill Annually (Save 33%)\n </label>\n </div>\n }\n\n <form onSubmit={this.handleSubmit}>\n\n <div>\n <CardElement onReady={(c) => this._element = c} style={{base: {fontSize: '14px', fontWeight: '300', color: color}}} />\n </div>\n\n {this.state.error &&\n <span className=\"error\">{this.state.error}</span>\n }\n\n {(!this.props.subscription) &&\n <ul>\n {(this.props.currentUser.available_plans.beta) &&\n <li>20% discount for being part of our early access <span role=\"img\" aria-label=\"heart\">❤️</span></li>\n }\n <li>\n You will be charged {this.state.duration ? this.props.currentUser.available_plans.annual : this.props.currentUser.available_plans.monthly }\n </li>\n {(this.props.currentUser.trial_ends_at && this.props.currentUser.state == 'trialing') &&\n <li>\n You will not be charged until your trial ends on {dateFns.format(this.props.currentUser.trial_ends_at, 'DD/MM/YYYY')}.\n </li>\n }\n {!this.props.currentUser.trial_ends_at && this.props.currentUser.available_plans.trialable &&\n <li>\n You will not be charged until your {this.props.currentUser.available_plans.trial_period} trial ends\n </li>\n }\n <li>You can cancel at any time</li>\n </ul>\n }\n\n <div className=\"field field__buttons\">\n {(this.props.logout) &&\n <a href=\"#\" onClick={this.props.logout}>Logout</a>\n }\n {(!this.props.subscription) &&\n <button className={this.state.loading ? 'btn btn__loading' : 'btn'} disabled={this.state.loading}>\n <div className=\"loader loader__button\"></div>\n {(this.props.currentUser.trial_ends_at && this.props.currentUser.state == 'trialing') ? (\n <span>Add payment details</span>\n ) : (this.props.currentUser.available_plans.trialable) ? (\n <span>Start your {this.props.currentUser.available_plans.trial_period} trial</span>\n ) : (\n <span>Start Subscription</span>\n )}\n </button>\n }\n {(this.props.subscription && (this.props.subscription.state === 'active' || this.props.subscription.state === 'trialing')) &&\n <React.Fragment>\n <button\n disabled={this.props.loading}\n className={this.props.loading ? 'btn btn__loading' : 'btn'}>\n <div className=\"loader loader__button\"></div>\n <span>Update Payment Method</span>\n </button>\n <a href=\"#\" className=\"btn btn__cancel\" onClick={this.props.handleCancel}>Cancel Subscription</a>\n </React.Fragment>\n }\n </div>\n\n </form>\n\n {(this.props.subscription && this.props.overlay) && (\n <Overlay\n overlay={this.props.overlay}\n subscription={this.props.subscription}\n currentUser={this.props.currentUser}\n cancel={this.props.cancel}\n pause={this.props.pause}\n loading={this.props.loading}\n closeOverlay={this.props.closeOverlay}></Overlay>\n )}\n\n </div>\n\n </div>\n );\n }\n}\n\nexport default injectStripe(CheckoutForm);\n","import React from 'react';\nimport InputMask from 'react-input-mask';\nimport { Elements, StripeProvider } from 'react-stripe-elements';\nimport CheckoutForm from './CheckoutForm';\nimport dateFns from 'date-fns';\nimport Select from 'react-select';\nimport countryList from 'react-select-country-list';\nimport update from 'immutability-helper';\nimport { components } from 'react-select';\nimport { connect } from 'react-redux';\nimport getSymbolFromCurrency from 'currency-symbol-map';\n\nconst STRIPE_PUBLISHABLE_KEY = process.env.REACT_APP_STRIPE_PUBLISHABLE_KEY;\nconst Input = ({ autoComplete, ...props }) => <components.Input {...props} autoComplete=\"new-password\" />;\n\nconst mapStateToProps = state => (\n {\n ...state,\n loading: state.common.loading\n }\n);\n\nclass SettingsForm extends React.Component {\n constructor(props) {\n super();\n this.countries = countryList().getData();\n this.state = {\n name: props.currentUser ? props.currentUser.name : '',\n email: props.currentUser ? props.currentUser.email : '',\n standard_hourly_rate: props.currentUser ? props.currentUser.standard_hourly_rate : '',\n standard_day_rate: props.currentUser ? props.currentUser.standard_day_rate : '',\n monthly_revenue_target: props.currentUser ? (props.currentUser.monthly_revenue_target === 0 ? '' : props.currentUser.monthly_revenue_target) : '',\n monday: props.currentUser ? props.currentUser.monday : false,\n tuesday: props.currentUser ? props.currentUser.tuesday : false,\n wednesday: props.currentUser ? props.currentUser.wednesday : false,\n thursday: props.currentUser ? props.currentUser.thursday : false,\n friday: props.currentUser ? props.currentUser.friday : false,\n saturday: props.currentUser ? props.currentUser.saturday : false,\n sunday: props.currentUser ? props.currentUser.sunday : false,\n hours_per_day: props.currentUser.hours_per_day ? props.currentUser.hours_per_day : 7,\n work_on_public_holidays: props.currentUser ? props.currentUser.work_on_public_holidays : false,\n dark_mode: props.currentUser ? props.currentUser.dark_mode : false,\n unsubscribe_from_emails: props.currentUser ? props.currentUser.unsubscribe_from_emails : false,\n currency: props.currentUser ? props.currentUser.currency : 'GBP',\n business_attributes: {\n id: props.currentUser ? props.currentUser.business.id : null,\n name: props.currentUser ? props.currentUser.business.name : '',\n year_end: props.currentUser ? dateFns.format(props.currentUser.business.year_end, 'DD/MM') : '',\n address: props.currentUser ? props.currentUser.business.address : '',\n invoice_note: props.currentUser ? props.currentUser.business.invoice_note : '',\n payment_details: props.currentUser ? props.currentUser.business.payment_details : '',\n },\n country: props.currentUser.country ? {\n value: props.currentUser.country,\n label: countryList().getLabel(props.currentUser.country)\n } : false,\n tab: 'schedule'\n };\n }\n errorMessage(field) {\n if (this.props.errors && this.props.errors[field]) {\n return this.props.errors[field];\n }\n }\n ;\n updateState = field => ev => {\n const [split_field, parent_key] = field.split('.').reverse();\n const value = ev.target.type === 'checkbox' ? ev.target.checked : ev.target.value;\n let newData;\n if (parent_key === undefined) {\n newData = update(this.state, {\n [split_field]: { $set: value }\n });\n }\n else {\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: { $set: value }\n }\n });\n }\n this.setState(newData);\n // cleanup\n newData = null;\n };\n updateCurrency = (field, value) => ev => {\n const [split_field, parent_key] = field.split('.').reverse();\n let newData;\n if (parent_key === undefined) {\n newData = update(this.state, {\n [split_field]: { $set: value }\n });\n }\n else {\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: { $set: value }\n }\n });\n }\n this.setState(newData);\n // cleanup\n newData = null;\n };\n updateCountry = value => {\n this.setState({ country: value });\n };\n submitForm(ev) {\n ev.preventDefault();\n let newData = update(this.state, {\n 'country': { $set: this.state.country.value }\n });\n this.props.onSubmitForm(newData);\n // cleanup\n newData = null;\n return false;\n }\n handleClick = () => {\n this.setState({ displayColorPicker: !this.state.displayColorPicker });\n };\n handleClose = () => {\n this.setState({ displayColorPicker: false });\n };\n handleChange = (color) => {\n this.setState({\n hex_colour: color.hex\n });\n };\n switchTabs(e, tab) {\n\n e.stopPropagation();\n\n this.setState({\n ...this.state, // needed?\n tab: tab\n });\n\n }\n render() {\n let trial_remaining;\n let invoices;\n if (this.props.currentUser && !this.props.currentUser.admin && this.props.currentUser.state === 'trialing' && this.props.currentUser.trial_ends_at) {\n trial_remaining = dateFns.differenceInDays(this.props.currentUser.trial_ends_at, dateFns.parse(Date.now()));\n }\n if (this.props.currentUser.invoices.length > 0) {\n invoices = true;\n }\n return (<div>\n\n <div className=\"options\">\n <div className=\"list list__wide\">\n <button\n className={this.state.tab === 'schedule' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'schedule')}>Schedule</button>\n <button\n className={this.state.tab === 'invoices' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'invoices')}>Invoices</button>\n <button\n className={this.state.tab === 'company' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'company')}>Company</button>\n <button\n className={this.state.tab === 'personal' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'personal')}>Personal</button>\n <button\n className={this.state.tab === 'billing' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'billing')}>Billing</button>\n </div>\n </div>\n\n {this.state.tab === 'billing' && (\n <div className=\"group\">\n\n <div className=\"field\">\n {(this.props.subscription && this.props.subscription.state !== 'canceled') &&\n <React.Fragment>\n <h2>You're subscribed to the {this.props.subscription.plan_name} plan.</h2>\n <p>Your next payment will be <b>{this.props.subscription.amount}</b> on {dateFns.format(this.props.subscription.next_invoice_at, 'DD/MM/YYYY')} using your {this.props.subscription.payment_method.brand} card ending in {this.props.subscription.payment_method.last4}. You can cancel your subscription or update your payment method below.</p>\n </React.Fragment>}\n {(!this.props.subscription || this.props.subscription.state === 'canceled') &&\n <React.Fragment>\n <h2>Payment details</h2>\n </React.Fragment>}\n </div>\n\n <StripeProvider apiKey={STRIPE_PUBLISHABLE_KEY}>\n <Elements>\n <CheckoutForm\n showform={false}\n currentUser={this.props.currentUser}\n subscription={this.props.subscription}\n cancel={this.props.cancelSubscription}\n pause={this.props.pauseSubscription}\n handleCancel={this.props.handleCancel}\n overlay={this.props.overlay}\n closeOverlay={this.props.closeOverlay}\n loading={this.props.loading}\n submit={(this.props.subscription) ? this.props.updatePayment : this.props.createSubscription} />\n </Elements>\n </StripeProvider>\n\n {invoices && (<div className=\"invoices\">\n {this.props.currentUser.invoices.map((item) => {\n return (<div key={item.created_at} className=\"invoice\">\n <span>{dateFns.format(item.created_at, 'MMMM YYYY')} ({item.amount})</span>\n <a href={item.url} target=\"_blank\" rel=\"noopener noreferrer\">Download Invoice</a>\n </div>);\n })}\n </div>)}\n\n {trial_remaining &&\n <div className=\"trial\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"7\" /><path d=\"M8.5 4.5v4h4\" />\n </g>\n </svg>\n <span>You have {dateFns.differenceInDays(this.props.currentUser.trial_ends_at, dateFns.parse(Date.now()))} days left of your trial</span>\n </div>}\n\n </div>\n )}\n\n <form onSubmit={this.submitForm.bind(this)}>\n\n {this.state.tab === 'personal' && (\n <div className=\"group\">\n\n <div className=\"field\">\n <label>\n <span>Name {this.errorMessage('name')}</span>\n <input className=\"form-control\" type=\"text\" value={this.state.name} onChange={this.updateState('name')} />\n </label>\n </div>\n\n <div className=\"field\">\n <label>\n <span>Email {this.errorMessage('email')}</span>\n <input className=\"form-control\" type=\"text\" value={this.state.email} onChange={this.updateState('email')} />\n </label>\n </div>\n\n <div className=\"field\">\n <label>\n <span>Password</span>\n <input className=\"form-control\" type=\"password\" value=\"password\" disabled />\n </label>\n <small>Change Password</small>\n </div>\n\n <hr />\n\n <div className=\"field field__switch\">\n <label>\n <span>Do you want to turn on dark mode? {this.errorMessage('dark_mode')}</span>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.dark_mode} onChange={this.updateState('dark_mode')} />\n <span />\n </label>\n </div>\n\n <div className=\"field field__switch\">\n <label>\n <span>Unsubscribe from emails? {this.errorMessage('unsubscribe_from_emails')}</span>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.unsubscribe_from_emails} onChange={this.updateState('unsubscribe_from_emails')} />\n <span />\n </label>\n </div>\n\n </div>\n )}\n\n {this.state.tab === 'invoices' && (\n <div className=\"group\">\n\n <div className=\"field\">\n <label>\n <span>Invoice Note</span>\n <textarea className=\"form-control tall\" value={this.state.business_attributes.invoice_note} onChange={this.updateState('business_attributes.invoice_note')} />\n </label>\n <small>Add any additional details to your invoice such as tax ID, company registration number or purchase order number</small>\n </div>\n\n <div className=\"field\">\n <label>\n <span>Payment Details</span>\n <textarea className=\"form-control tall\" value={this.state.business_attributes.payment_details} onChange={this.updateState('business_attributes.payment_details')} />\n </label>\n <small>Add your payment details here so your clients know how to pay you</small>\n </div>\n\n </div>\n )}\n\n {this.state.tab === 'company' && (\n <div className=\"group\">\n\n <div className=\"field\">\n <label>\n <span>Company Name</span>\n <input className=\"form-control\" type=\"text\" value={this.state.business_attributes.name} onChange={this.updateState('business_attributes.name')} />\n </label>\n </div>\n\n <div className=\"field\">\n <label>\n <span>Registered Office Address</span>\n <textarea className=\"form-control\" value={this.state.business_attributes.address} onChange={this.updateState('business_attributes.address')} />\n </label>\n </div>\n\n <div className=\"field\">\n\n <label>\n <span>Country</span>\n </label>\n <Select className=\"react-select-container\" classNamePrefix=\"react-select\" options={this.countries} value={this.state.country} onChange={this.updateCountry} components={{\n Input\n }} />\n\n </div>\n\n <div className=\"field\">\n <label>\n <span>Company Year End (DD/MM)</span>\n <InputMask mask=\"99 / 99\" maskChar='_' placeholder=\"DD / MM\" value={this.state.business_attributes.year_end} onChange={this.updateState('business_attributes.year_end')} />\n </label>\n <small>We'll use this to calculate the financial health of your business.</small>\n </div>\n\n </div>\n )}\n\n {this.state.tab === 'schedule' && (\n <>\n <div className=\"group\">\n\n <h3>Which days do you work?</h3>\n\n <div className=\"field__group\">\n\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.monday} onChange={this.updateState('monday')} />\n <span>Monday {this.errorMessage('monday')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.tuesday} onChange={this.updateState('tuesday')} />\n <span>Tuesday {this.errorMessage('tuesday')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.wednesday} onChange={this.updateState('wednesday')} />\n <span>Wednesday {this.errorMessage('wednesday')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.thursday} onChange={this.updateState('thursday')} />\n <span>Thursday {this.errorMessage('thursday')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.friday} onChange={this.updateState('friday')} />\n <span>Friday {this.errorMessage('friday')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.saturday} onChange={this.updateState('saturday')} />\n <span>Saturday {this.errorMessage('saturday')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.sunday} onChange={this.updateState('sunday')} />\n <span>Sunday {this.errorMessage('sunday')}</span>\n </label>\n </div>\n\n </div>\n\n <div className={\"field field__helper field__helper-\" + this.state.currency.toLowerCase()}>\n <label>\n <span>How many hours is your work day? {this.errorMessage('hours_per_day')}</span>\n <input className=\"form-control\" type=\"text\" value={this.state.hours_per_day} onChange={this.updateState('hours_per_day')} />\n </label>\n </div>\n\n <div className=\"field field__switch\">\n <label>\n <span>Do you work on public holidays? {this.errorMessage('work_on_public_holidays')}</span>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.work_on_public_holidays} onChange={this.updateState('work_on_public_holidays')} />\n <span />\n </label>\n </div>\n\n <hr />\n\n <h3>Currency Format</h3>\n\n <div className=\"field__group\">\n\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.currency === 'GBP'} onChange={this.updateCurrency('currency', 'GBP')} />\n <span className=\"currency\">£ {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.currency === 'USD'} onChange={this.updateCurrency('currency', 'USD')} />\n <span className=\"currency\">$ {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.currency === 'EUR'} onChange={this.updateCurrency('currency', 'EUR')} />\n <span className=\"currency\">€ {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.currency === 'DKK'} onChange={this.updateCurrency('currency', 'DKK')} />\n <span className=\"currency\">kr. {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input className=\"form-control\" type=\"checkbox\" checked={this.state.currency === 'BRL'} onChange={this.updateCurrency('currency', 'BRL')} />\n <span className=\"currency\">R$ {this.errorMessage('currency')}</span>\n </label>\n </div>\n\n </div>\n\n <div className=\"field field__helper\">\n <label>\n <span>Standard Day Rate {this.errorMessage('standard_day_rate')}</span>\n <div className=\"helper\">\n <span>{getSymbolFromCurrency(this.state.currency)}</span>\n <input className=\"form-control\" type=\"text\" value={this.state.standard_day_rate} onChange={this.updateState('standard_day_rate')} />\n </div>\n </label>\n </div>\n\n <div className=\"field field__helper\">\n <label>\n <span>Standard Hourly Rate {this.errorMessage('standard_hourly_rate')}</span>\n <div className=\"helper\">\n <span>{getSymbolFromCurrency(this.state.currency)}</span>\n <input className=\"form-control\" type=\"text\" value={this.state.standard_hourly_rate} onChange={this.updateState('standard_hourly_rate')} />\n </div>\n </label>\n </div>\n\n <div className=\"field field__helper\">\n <label>\n <span>Monthly Revenue Target {this.errorMessage('monthly_revenue_target')}</span>\n <div className=\"helper\">\n <span>{getSymbolFromCurrency(this.state.currency)}</span>\n <input className=\"form-control\" type=\"text\" value={this.state.monthly_revenue_target} onChange={this.updateState('monthly_revenue_target')} />\n </div>\n </label>\n <small>How much do you need to earn a month to pay your expenses and salary?</small>\n </div>\n\n </div>\n </>\n )}\n\n {this.state.tab !== 'billing' && (\n <div className=\"field field__fixed\">\n <button className=\"btn\" type=\"submit\" disabled={this.props.inProgress}>\n Save Settings\n </button>\n </div>\n )}\n\n {this.props.inProgress && <div className=\"success\">Settings updated</div>}\n\n </form>\n\n </div>);\n }\n}\n\nexport default connect(mapStateToProps, false)(SettingsForm);\n","import React from 'react';\nimport agent from '../agent';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport SettingsForm from './SettingsForm';\n\nimport {\n SETTINGS_UPDATE,\n SETTINGS_SAVED,\n SUBSCRIPTION_CANCEL,\n SUBSCRIPTION_CREATE,\n SUBSCRIPTION_EXTEND,\n PAYMENT_METHOD_UPDATE,\n OPEN_SETTINGS_OVERLAY,\n CLOSE_SETTINGS_OVERLAY,\n ASYNC_END\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.settings,\n currentUser: state.common.currentUser,\n subscription: state.common.subscription,\n overlay: state.settings.overlay\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n\n onSubmitForm: user => {\n function parse(str) {\n const [date, month, year] = str.split('/').map(n => parseInt(n))\n return new Date(year, month - 1, date)\n }\n user.business_attributes.year_end = dateFns.format(parse(user.business_attributes.year_end + '/2019'), 'DD/MM/YYYY')\n dispatch({ type: SETTINGS_SAVED, payload: agent.Auth.save(user) })\n dispatch({ type: SETTINGS_UPDATE })\n },\n\n createSubscription: (stripe_token_id, type) => {\n dispatch({ type: SUBSCRIPTION_CREATE, payload: agent.Subscription.create(stripe_token_id, type) })\n dispatch({ type: CLOSE_SETTINGS_OVERLAY })\n dispatch({ type: ASYNC_END })\n },\n\n updatePayment: (stripe_token_id, type) => {\n dispatch({ type: PAYMENT_METHOD_UPDATE, payload: agent.PaymentMethod.create(stripe_token_id) })\n },\n\n cancelSubscription: subscription_id => {\n dispatch({ type: SUBSCRIPTION_CANCEL, payload: agent.Subscription.remove(subscription_id) })\n },\n\n pauseSubscription: subscription_id => {\n dispatch({ type: SUBSCRIPTION_EXTEND, payload: agent.Subscription.extend(subscription_id) })\n\n dispatch({\n type: SUBSCRIPTION_EXTEND,\n payload: agent.Subscription.extend(subscription_id).then((res) => {\n if(!res.body.errors) {\n dispatch({ type: CLOSE_SETTINGS_OVERLAY });\n }\n return res;\n })\n })\n\n },\n\n openOverlay: () => {\n dispatch({ type: OPEN_SETTINGS_OVERLAY });\n },\n\n closeOverlay: () => {\n dispatch({ type: CLOSE_SETTINGS_OVERLAY });\n }\n\n});\n\nclass Settings extends React.Component {\n\n handleCancel = (e) => {\n\n e.preventDefault();\n this.props.openOverlay()\n }\n\n render() {\n return (\n <section className=\"component__route component__route__settings\">\n <header>\n <h2>Settings</h2>\n </header>\n <section>\n <SettingsForm\n subscription={this.props.subscription}\n currentUser={this.props.currentUser}\n errors={this.props.errors}\n inProgress={this.props.inProgress}\n success={this.props.success}\n onSubmitForm={this.props.onSubmitForm}\n handleCancel={this.handleCancel}\n createSubscription={this.props.createSubscription}\n overlay={this.props.overlay}\n closeOverlay={this.props.closeOverlay}\n updatePayment={this.props.updatePayment}\n cancelSubscription={this.props.cancelSubscription}\n pauseSubscription={this.props.pauseSubscription}/>\n </section>\n </section>\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Settings);","import React from 'react';\nimport {Elements, StripeProvider} from 'react-stripe-elements';\nimport CheckoutForm from './CheckoutForm';\nimport agent from '../agent';\nimport { connect } from 'react-redux';\nimport images from '../images';\nimport Select, { components } from 'react-select';\nimport countryList from 'react-select-country-list';\nimport update from 'immutability-helper';\nimport {\n LOGOUT,\n SETTINGS_UPDATE,\n COUNTRY_SAVED,\n MASQUERADE,\n SUBSCRIPTION_CANCEL,\n SUBSCRIPTION_CREATE,\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.settings,\n currentUser: state.common.currentUser,\n subscription: state.common.subscription\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n createSubscription: (stripe_token_id, type) => {\n dispatch({ type: SUBSCRIPTION_CREATE, payload: agent.Subscription.create(stripe_token_id, type) })\n },\n cancelSubscription: subscription_id => {\n dispatch({ type: SUBSCRIPTION_CANCEL, payload: agent.Subscription.remove(subscription_id) })\n },\n onClickLogout: (currentUser) => {\n if(currentUser.masquerading){\n dispatch({ type: MASQUERADE, payload: agent.AdminUsers.revertMasquerade() })\n }else{\n dispatch({ type: LOGOUT, payload: agent.Auth.logout() })\n }\n },\n onSubmitForm: user => {\n dispatch({ type: SETTINGS_UPDATE })\n dispatch({ type: COUNTRY_SAVED, payload: agent.Auth.save(user) })\n }\n});\n\nconst Input = ({ autoComplete, ...props }) => <components.Input {...props} autoComplete=\"new-password\" />;\n\nclass Billings extends React.Component {\n\n constructor(props) {\n super();\n\n this.countries = countryList().getData()\n\n this.state = {\n country: props.currentUser.country ? {\n value: props.currentUser.country,\n label: countryList().getLabel( props.currentUser.country )\n } : false\n };\n }\n\n updateCountry = value => {\n this.setState({ country: value })\n }\n\n submitForm(ev) {\n\n ev.preventDefault();\n\n let newData = update(this.state, {\n 'country': {$set: this.state.country.value}\n })\n\n this.props.onSubmitForm(newData);\n\n // cleanup\n newData = null;\n\n return false;\n }\n\n render() {\n return (\n <section className=\"component__route component__route__billing\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <div className=\"group\">\n\n {!this.props.currentUser.country ?\n <React.Fragment>\n <form onSubmit={this.submitForm.bind(this)} autoComplete=\"off\" autoComplete=\"new-password\">\n\n <h1>Which country do you live in?</h1>\n\n <div className=\"field\">\n\n <Select\n className=\"react-select-container\"\n classNamePrefix=\"react-select\"\n options={this.countries}\n value={this.state.country}\n onChange={this.updateCountry}\n components={{\n Input\n }}\n />\n\n </div>\n\n <div className=\"field field__buttons\">\n <a href=\"#\" onClick={() => { this.props.onClickLogout(this.props.currentUser)} }>Logout</a>\n <button\n className=\"btn btn-lg btn-primary pull-xs-right\"\n onClick={this.nextStep}\n disabled={this.state.inProgress}>\n Continue\n </button>\n </div>\n\n { this.props.errors && <div class=\"notice\">We noticed a few errors...</div>}\n\n </form>\n </React.Fragment>\n :\n <React.Fragment>\n {(this.props.currentUser.state == 'trial_expired') ? (\n <h1>Your trial has expired, please add a payment method.</h1>\n ) : (\n <h1>Add a payment method.</h1>\n )}\n {(!this.props.subscription || this.props.subscription.state === 'canceled') &&\n <StripeProvider apiKey={process.env.REACT_APP_STRIPE_PUBLISHABLE_KEY}>\n <Elements>\n <CheckoutForm\n showform={true}\n subscription={this.props.subscription}\n currentUser={this.props.currentUser}\n submit={this.props.createSubscription}\n logout={this.props.onClickLogout} />\n </Elements>\n </StripeProvider>\n }\n </React.Fragment>\n }\n </div>\n <span>Have any questions? <a href=\"mailto:hello@heyslate.com?subject=Slate\">Email us</a></span>\n </section>\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Billings);\n","import React from 'react';\nimport {Elements, StripeProvider} from 'react-stripe-elements';\nimport CheckoutForm from './CheckoutForm';\nimport agent from '../agent';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport {\n SUBSCRIPTION_CREATE\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.settings,\n currentUser: state.common.currentUser,\n subscription: state.common.subscription\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n createSubscription: stripe_token_id => {\n dispatch({ type: SUBSCRIPTION_CREATE, payload: agent.Subscription.create(stripe_token_id, true) })\n }\n});\n\nclass PaymentMethod extends React.Component {\n render() {\n return (\n <section className=\"component__route component__route__billings\">\n <header>\n <h2>Billing / Payment details</h2>\n </header>\n <section>\n <div className=\"group\">\n <StripeProvider apiKey={process.env.REACT_APP_STRIPE_PUBLISHABLE_KEY}>\n <div className=\"example\">\n {this.props.subscription && this.props.subscription.payment_method &&\n <p>\n <b>{this.props.subscription.payment_method.brand}</b> ending **** **** **** {this.props.subscription.payment_method.last4} expiring on <b>{this.props.subscription.payment_method.exp_month}/{this.props.subscription.payment_method.exp_year}</b>\n </p>\n }\n <Elements>\n <CheckoutForm currentUser={this.props.currentUser} submit={this.props.createSubscription}/>\n </Elements>\n </div>\n </StripeProvider>\n <p>\n <Link to=\"/settings/billing\">Back to billing settings</Link>\n </p>\n </div>\n </section>\n </section>\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PaymentMethod);\n","import React, { useEffect, useState, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport TimeField from 'react-simple-timefield';\nimport DayPicker from 'react-day-picker';\nimport dateFns from 'date-fns';\nimport Tooltip from '../Tooltip';\nimport { scrollPosition } from './Overlay';\n\nexport const Dropdown = (props) => {\n const node = useRef();\n\n const [open, setOpen] = useState(false);\n\n const handleScroll = e => {\n setOpen(false);\n }\n\n const handleChange = (field, value, persist) => {\n props.onChange(field,value)\n if (!persist) {\n setOpen(false);\n }\n };\n\n const handleClickOutside = e => {\n\n e.stopImmediatePropagation()\n\n let dropdown = e.composedPath().filter(function (el) {\n return el.id === 'dropdown__menu'\n })\n\n // inside click\n if (dropdown.length >= 1 || node.current.contains(e.target)) {\n return;\n }\n\n // outside click\n setOpen(false);\n\n };\n\n useEffect(() => {\n if (open) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n node.current.offsetParent.addEventListener(\"scroll\", handleScroll);\n\n const dropdown_menu = document.querySelector('#dropdown__menu');\n const position_top = ((node.current.offsetParent.offsetTop + node.current.offsetTop + node.current.offsetHeight + 8) - scrollPosition);\n\n // set default position\n dropdown_menu.style.top = position_top + 'px';\n\n // get bounds now dropdown has default position\n const dropdown_menu_bounds = dropdown_menu.getBoundingClientRect();\n\n // dropdown outside window, recalculate position\n if ( dropdown_menu_bounds.bottom > window.innerHeight ) {\n const position_recalc = ((node.current.offsetParent.offsetTop + node.current.offsetTop - 8) - scrollPosition) - dropdown_menu.offsetHeight;\n dropdown_menu.style.top = position_recalc + 'px';\n }\n\n // finally, show dropdown (to stop position popping effect)\n dropdown_menu.style.visibility = 'visible';\n\n } else {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n node.current.offsetParent.removeEventListener(\"scroll\", handleScroll);\n }\n\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n node.current.offsetParent.removeEventListener(\"scroll\", handleScroll);\n };\n }, [open]);\n\n return (\n <div ref={node} className=\"dropdown\">\n <button disabled={props.disabled} className=\"dropdown-toggler\" onClick={e => setOpen(!open)}>\n <span>\n {((props.content === 'project_rate_unit') && (\n (props.project.project_rate_unit === 'days' && 'By the day') ||\n (props.project.project_rate_unit === 'hours' && 'By the hour')\n )) || ((props.content === 'estimated_time_unit') && (\n (props.project.estimated_time_unit === 'hours' && 'Hours') ||\n (props.project.estimated_time_unit === 'days' && 'Days')\n )) || ((props.content === 'preferred_billing_unit') && (\n (props.client.preferred_billing_unit === 'days' && 'By the day') ||\n (props.client.preferred_billing_unit === 'hours' && 'By the hour') ||\n (props.client.preferred_billing_unit === 'projects' && 'By the project')\n )) || ((props.content === 'rates') && (\n (((props.client.preferred_billing_unit === 'days') || (props.client.preferred_billing_unit === 'projects')) && (\n <span><span className={`currency-${props.currency.toLowerCase()}`}></span>{props.client.day_rate}/day</span>\n )) || ((props.client.preferred_billing_unit === 'hours') && (\n <span><span className={`currency-${props.currency.toLowerCase()}`}></span>{props.client.hourly_rate}/hour</span>\n ))\n )) || ((props.content === 'date') && (\n props.unit_value_formatted\n )) || ((props.content === 'deadline') && (\n props.project.deadline ? dateFns.format(props.project.deadline, 'D MMMM YYYY') : 'No'\n ))}\n </span>\n <svg width=\"9\" height=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(-70 -18)\" fill=\"#1282FF\" fillRule=\"evenodd\">\n <path fill=\"currentColor\" d=\"M78.3013153 26.17460431c.15974318.18636704.15830762.45647696.00876349.64041738l-.0629961.06460661-3.5 3c-.16383926.1404336-.39586261.1579879-.57674789.0526626l-.07404349-.0526626-3.5-3c-.20966292-.17971107-.23394369-.49536107-.05423261-.70502399.15974318-.18636704.42689488-.22625929.63154276-.10660658l.07348123.05237397L74.42167794 28.841l3.17461337-2.7206283c.20966292-.17971108.52531292-.15543031.70502399.05423261zm-3.6282761-8.10689523l.07404349.05266262 3.5 3c.20966292.17971107.23394369.49536107.05423261.70502399-.15974318.18636704-.42689488.22625929-.63154276.10660658l-.07348123-.05237397L74.42167794 19.158l-3.17459525 2.7216283c-.18636704.15974318-.45647696.15830762-.64041739.00876349l-.0646066-.0629961c-.15974318-.18636704-.15830762-.45647696-.0087635-.64041738l.06299611-.06460661 3.5-3c.16383926-.14043365.39586261-.15798786.57674789-.05266262z\" opacity=\".5\" fillRule=\"nonzero\"/>\n </g>\n </svg>\n </button>\n {open && (\n ReactDOM.createPortal(\n <div\n style={{position: 'absolute', visibility: 'hidden', right: '32px' }}\n id=\"dropdown__menu\" className={`dropdown__menu ` + props.content}>\n {((props.content === 'project_rate_unit') && ( // project.project_rate_unit\n <div className=\"list\">\n <div\n className={props.project.project_rate_unit === 'days' ? 'item selected' : 'item'}\n onClick={e => handleChange('project.project_rate_unit','days')}>By the day</div>\n <div\n className={props.project.project_rate_unit === 'hours' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('project.project_rate_unit','hours')}>By the hour</div>\n </div>\n )) || ((props.content === 'estimated_time_unit') && ( // project.estimated_time_unit\n <div className=\"list\">\n <div\n className={props.project.estimated_time_unit === 'hours' ? 'item selected' : 'item'}\n onClick={e => handleChange('project.estimated_time_unit','hours')}>Hours</div>\n <div\n className={props.project.estimated_time_unit === 'days' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('project.estimated_time_unit','days')}>Days</div>\n </div>\n )) || ((props.content === 'preferred_billing_unit') && ( // client.preferred_billing_unit\n <div className=\"list\">\n <div\n className={props.client.preferred_billing_unit === 'days' ? 'item selected' : 'item'}\n onClick={e => handleChange('client.preferred_billing_unit','days')}>By the day</div>\n <div\n className={props.client.preferred_billing_unit === 'hours' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('client.preferred_billing_unit','hours')}>By the hour</div>\n <div\n className={props.client.preferred_billing_unit === 'projects' ? 'item selected' : 'item'}\n onClick={(e) => handleChange('client.preferred_billing_unit','projects')}>By the project</div>\n </div>\n )) || ((props.content === 'rates') && ( // client.day_rate & client.hourly_rate\n <div className=\"list\">\n {(((props.client.preferred_billing_unit === 'days') && (\n <div>\n <div className={`currency-${props.currency.toLowerCase()}`}></div>\n <input\n className=\"mini\"\n type=\"text\"\n value={props.client.day_rate}\n onChange={(e) => handleChange('client.day_rate', e.target.value, true)} />\n </div>\n )) || ((props.client.preferred_billing_unit === 'hours') && (\n <div>\n <div className={`currency-${props.currency.toLowerCase()}`}></div>\n <input\n className=\"mini\"\n type=\"text\"\n value={props.client.hourly_rate}\n onChange={(e) => handleChange('client.hourly_rate', e.target.value, true)} />\n </div>\n )))}\n </div>\n )) || ((props.content === 'date') && (\n <React.Fragment>\n <div\n className={ props.unit === 'days' ? 'label' : 'label disabled' }\n onClick={props.toggleUnit}>\n <span>All-day</span>\n <Tooltip message={ props.unit === 'days' ? 'Switch to hours' : 'Switch to all-day' } position={'top'} size={'large'}>\n <span className={ props.unit === 'days' ? 'checkbox checked' : 'checkbox' }>\n <input\n checked={props.unit === 'days'}\n type=\"checkbox\" />\n <span></span>\n </span>\n </Tooltip>\n </div>\n <div\n className={ props.unit === 'days' ? 'time hidden' : 'time' }>\n <TimeField\n colon=\":\"\n value={props.unit_value_in_time}\n onKeyDown={props.onKeyDown}\n onChange={props.onChange}\n style={{width: '100%'}}\n />\n </div>\n <div class=\"apply\" onClick={props.allDates}>Apply to all days</div>\n </React.Fragment>\n )) || ((props.content === 'deadline') && (\n <DayPicker\n selectedDays={dateFns.parse(props.project.deadline)}\n disabledDays={{ before: new Date() }}\n onDayClick={(e) => handleChange('project.deadline',e)}\n onTodayButtonClick={(e) => handleChange('project.deadline',false)}\n fromMonth={new Date()}\n todayButton={'Remove Deadline'}\n initialMonth={props.project.deadline ? dateFns.parse(props.project.deadline) : new Date()} />\n ))}\n </div>, document.querySelector('.overlay__block:last-child')\n )\n )}\n </div>\n );\n};\n","import React from 'react';\nimport dateFns from 'date-fns';\nimport { Dropdown } from './Dropdown';\nexport class OverlayItem extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n date: props.date,\n price: props.price || (this.props.project ? this.props.project.project_rate_value : this.props.client.day_rate),\n unit: props.unit || (this.props.project ? this.props.project.project_rate_unit : 'days'),\n unit_value: props.unit_value || (this.props.project ? this.props.project.project_rate_unit : '1'),\n unit_value_in_time: props.unit_value_in_time || '01:00',\n unit_value_formatted: props.unit_value_formatted || '01h 00m'\n };\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if(\n prevProps.price !== this.props.price || \n prevProps.unit !== this.props.unit || \n prevProps.unit_value !== this.props.unit_value || \n prevProps.unit_value_in_time !== this.props.unit_value_in_time || \n prevProps.unit_value_formatted !== this.props.unit_value_formatted\n ) {\n \n let newState = {\n ...this.state,\n price: this.props.price,\n unit: this.props.unit,\n unit_value: this.props.unit_value,\n unit_value_in_time: this.props.unit_value_in_time,\n unit_value_formatted: this.props.unit_value_formatted\n };\n \n this.setState(newState);\n\n }\n\n }\n\n incrementDecrementTime = (e) => {\n if ([38, 40].includes(e.keyCode)) {\n let [firstNumber, secondNumber] = String(this.state.unit_value_in_time).split(':');\n\n // down\n if (e.keyCode === 40) {\n if (parseInt(firstNumber) === 0 && parseInt(secondNumber) === 15) {\n return false;\n }\n secondNumber = parseInt(secondNumber) - 15;\n if (secondNumber < 0) {\n firstNumber = parseInt(firstNumber) - 1;\n firstNumber = (firstNumber < 10 ? '0' : '') + firstNumber;\n secondNumber = '45';\n }\n }\n // up\n if (e.keyCode === 38) {\n if (firstNumber >= 23 && secondNumber >= 45) {\n return false;\n }\n secondNumber = parseInt(secondNumber) + 15;\n if (secondNumber >= 60) {\n firstNumber = parseInt(firstNumber) + 1;\n firstNumber = (firstNumber < 10 ? '0' : '') + firstNumber;\n secondNumber = '00';\n }\n }\n let newState = {\n ...this.state,\n // price: 100, // chris\n unit_value: firstNumber + ':' + secondNumber,\n unit_value_in_time: `${firstNumber}:${secondNumber}`,\n unit_value_formatted: `${firstNumber}h ${secondNumber}m`\n };\n this.setState(newState);\n this.props.updateDate(this.props.date, newState);\n }\n };\n changeTime = (e, time) => {\n let [firstNumber, secondNumber] = String(time).split(':');\n let newState = {\n ...this.state,\n unit_value: time,\n unit_value_in_time: `${firstNumber}:${secondNumber}`,\n unit_value_formatted: `${firstNumber}h ${secondNumber}m`\n };\n this.setState(newState);\n this.props.updateDate(this.props.date, newState);\n };\n changeAllTimes = (e) => {\n this.props.updateAllDates(this.state);\n };\n toggleUnit = (e) => {\n e.stopPropagation();\n let [firstNumber, secondNumber] = String(this.state.unit_value_in_time).split(':');\n let newState = {\n ...this.state,\n unit: this.state.unit === 'days' ? 'hours' : 'days',\n unit_value: this.state.unit === 'days' ? firstNumber + ':' + secondNumber : 1,\n unit_value_in_time: `${firstNumber}:${secondNumber}`,\n unit_value_formatted: `${firstNumber}h ${secondNumber}m`\n };\n this.setState(newState);\n this.props.updateDate(this.props.date, newState);\n };\n render() {\n const dropdown = <svg width=\"9\" height=\"12\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(-70 -18)\" fill=\"#1282FF\" fillRule=\"evenodd\">\n <path fill=\"#1282FF\" d=\"M78.3013153 26.17460431c.15974318.18636704.15830762.45647696.00876349.64041738l-.0629961.06460661-3.5 3c-.16383926.1404336-.39586261.1579879-.57674789.0526626l-.07404349-.0526626-3.5-3c-.20966292-.17971107-.23394369-.49536107-.05423261-.70502399.15974318-.18636704.42689488-.22625929.63154276-.10660658l.07348123.05237397L74.42167794 28.841l3.17461337-2.7206283c.20966292-.17971108.52531292-.15543031.70502399.05423261zm-3.6282761-8.10689523l.07404349.05266262 3.5 3c.20966292.17971107.23394369.49536107.05423261.70502399-.15974318.18636704-.42689488.22625929-.63154276.10660658l-.07348123-.05237397L74.42167794 19.158l-3.17459525 2.7216283c-.18636704.15974318-.45647696.15830762-.64041739.00876349l-.0646066-.0629961c-.15974318-.18636704-.15830762-.45647696-.0087635-.64041738l.06299611-.06460661 3.5-3c.16383926-.14043365.39586261-.15798786.57674789-.05266262z\" opacity=\".5\" fillRule=\"nonzero\" />\n </g>\n </svg>;\n return (\n <div className=\"flex padding border rounded\">\n <div className=\"date\">{dateFns.format(this.props.date, 'dddd, Do MMMM YYYY')}</div>\n <Dropdown\n disabled={ (this.props.state === 'invoiced' || this.props.state === 'paid') ? true : false }\n content=\"date\"\n unit={this.state.unit}\n unit_value={this.state.unit_value}\n unit_value_in_time={this.state.unit_value_in_time}\n unit_value_formatted={this.state.unit === 'days' ? 'All-day' : this.state.unit_value_formatted}\n toggleUnit={this.toggleUnit}\n onKeyDown={this.incrementDecrementTime}\n onChange={this.changeTime}\n allDates={this.changeAllTimes} />\n </div>\n );\n }\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"none\",\n stroke: \"#C31840\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n strokeWidth: 2,\n d: \"M7,3.88888875 L7,6.99999987 L9.33333333,9.33333321 M14,7 C14,9.50085904 12.6658076,11.8117482 10.5,13.0621778 C8.33419248,14.3126074 5.66580752,14.3126074 3.5,13.0621778 C1.33419242,11.8117482 0,9.50085904 0,7 C0,3.13400667 3.13400681,0 7,0 C10.8659932,0 14,3.13400667 14,7 L14,7 Z\",\n transform: \"translate(1 1)\"\n});\n\nvar SvgTimeSmall = function SvgTimeSmall(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgTimeSmall, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/time_small.8ac4fb13.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Tooltip from '../Tooltip';\nimport { Info } from '../Info';\nimport ListErrors from '../ListErrors';\nimport ContentEditable from 'react-contenteditable';\nimport FocusTrap from 'focus-trap-react';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport _, { isEmpty } from 'lodash';\nimport { TwitterPicker } from 'react-color';\nimport update from 'immutability-helper';\nimport agent from '../../agent';\nimport { Dropdown } from './Dropdown';\nimport { OverlayItem } from './OverlayItem';\nimport {ReactComponent as NoteIcon} from '../../images/note.svg';\nimport {ReactComponent as PriceIcon} from '../../images/price_small.svg';\nimport {ReactComponent as TimeIcon} from '../../images/time_small.svg';\nimport getSymbolFromCurrency from 'currency-symbol-map';\nimport { components } from 'react-select';\nimport Select from 'react-select';\nimport { currencies } from '../../currencies';\nimport { validateEmail } from '../../components/Validate';\nimport {ReactComponent as LockIcon} from '../../images/lock.svg';\n\nimport {\n SCHEDULE_CREATE,\n SCHEDULE_UPDATE,\n SCHEDULE_REMOVE,\n CLIENT_CREATE,\n PROJECT_CREATE,\n MONTH_LOADED\n} from '../../constants/actionTypes';\n\nconst Input = ({ autoComplete, ...props }) => <components.Input {...props} autoComplete=\"new-password\" />;\nconst DropdownIndicator = props => {\n return (\n <components.DropdownIndicator {...props}>\n <svg width=\"9\" height=\"12\" xmlns=\"http://www.w3.org/2000/svg\"><g transform=\"translate(-70 -18)\" fill=\"#1282FF\" fill-rule=\"evenodd\"><path fill=\"currentColor\" d=\"M78.3013153 26.17460431c.15974318.18636704.15830762.45647696.00876349.64041738l-.0629961.06460661-3.5 3c-.16383926.1404336-.39586261.1579879-.57674789.0526626l-.07404349-.0526626-3.5-3c-.20966292-.17971107-.23394369-.49536107-.05423261-.70502399.15974318-.18636704.42689488-.22625929.63154276-.10660658l.07348123.05237397L74.42167794 28.841l3.17461337-2.7206283c.20966292-.17971108.52531292-.15543031.70502399.05423261zm-3.6282761-8.10689523l.07404349.05266262 3.5 3c.20966292.17971107.23394369.49536107.05423261.70502399-.15974318.18636704-.42689488.22625929-.63154276.10660658l-.07348123-.05237397L74.42167794 19.158l-3.17459525 2.7216283c-.18636704.15974318-.45647696.15830762-.64041739.00876349l-.0646066-.0629961c-.15974318-.18636704-.15830762-.45647696-.0087635-.64041738l.06299611-.06460661 3.5-3c.16383926-.14043365.39586261-.15798786.57674789-.05266262z\" opacity=\".5\" fill-rule=\"nonzero\"></path></g></svg>\n </components.DropdownIndicator>\n )\n}\n\nexport let scrollPosition = 0;\n\nconst mapStateToProps = (state, ownProps) => ({\n ...state,\n activeMonth: state.common.activeMonth,\n errors: state.projects.errors || state.clients.errors\n});\n\nconst mapDispatchToProps = dispatch => ({\n\n newClient: client => {\n dispatch({ type: CLIENT_CREATE, payload: agent.Clients.create(client) })\n },\n\n newProject: project => {\n dispatch({ type: PROJECT_CREATE, payload: agent.Projects.create(project) })\n },\n\n updateSchedule: (type, activeMonth, dates, work) => {\n\n if (type === 'CREATE' || type === 'HOLIDAY') {\n\n var schedule = [];\n\n dates.forEach(function(item, i){\n\n if (type === 'HOLIDAY') {\n\n schedule = update(schedule, {$push: [\n update(item, {\n holiday: {$set: true}\n })\n ]})\n\n } else {\n\n schedule = update(schedule, {$push: [\n update(item, {\n client_id: {$set: work.client_id},\n project_id: {$set: work.project_id},\n note: {$set: work.note}\n })\n ]})\n\n }\n\n })\n\n dispatch({\n type: SCHEDULE_CREATE,\n payload: agent.Schedule.create_multiple(schedule).then((res) => {\n if(!res.body.errors) {\n let month_name = dateFns.format(activeMonth, 'MMMM').toLowerCase()\n let year = dateFns.format(activeMonth, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: activeMonth, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n }\n return res;\n })\n })\n\n // cleanup\n schedule = null;\n\n }\n\n if (type === 'UPDATE') {\n\n dates.forEach(function(item, i){\n\n let schedule = update(item, {\n note: {$set: work.note}\n })\n\n dispatch({\n type: SCHEDULE_UPDATE,\n payload: agent.Schedule.update(schedule).then((res) => {\n if(!res.body.errors) {\n let month_name = dateFns.format(activeMonth, 'MMMM').toLowerCase()\n let year = dateFns.format(activeMonth, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: activeMonth, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n }\n return res;\n })\n })\n\n // cleanup\n schedule = null;\n\n })\n\n }\n\n if (type === 'REMOVE') {\n\n dates.forEach(function(item, i){\n\n dispatch({\n type: SCHEDULE_REMOVE,\n payload: agent.Schedule.remove_multiple([{id:parseInt(item.id)}]).then((res) => {\n if(!res.body.errors) {\n let month_name = dateFns.format(activeMonth, 'MMMM').toLowerCase()\n let year = dateFns.format(activeMonth, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: activeMonth, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n }\n return res;\n })\n })\n\n })\n\n }\n\n }\n})\n\nclass Overlay extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.searchClientsRef = React.createRef();\n this.clientTitleRef = React.createRef();\n this.searchProjectsRef = React.createRef();\n this.projectTitleRef = React.createRef();\n this.clientButtonRef = React.createRef();\n this.projectButtonRef = React.createRef();\n this.scheduleButtonRef = React.createRef();\n this.fixedPriceRef = React.createRef();\n\n let client;\n let project;\n let dates = [];\n\n if (this.props.work) {\n\n client = this.props.clients.clients.filter((el) => {\n return el.id === this.props.work.client\n });\n\n project = this.props.projects.projects.filter((el) => {\n return el.id === this.props.work.project_id\n });\n\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: this.props.overlay,\n overlay_history: ['work'],\n client: client[0],\n project: project[0],\n dates: [{...this.props.work}],\n note: this.props.work.note,\n new: false,\n loading: false\n }\n\n } else {\n\n this.state = {\n initialLoad: true,\n counter: 1,\n overlay: this.props.overlay,\n overlay_history: ['client'],\n clients: this.props.clients.clients.filter((el) => {\n return el.state === 'active'\n }),\n projects: this.props.projects,\n keyword: false,\n dates: dates,\n new: true,\n loading: false\n }\n\n }\n\n }\n\n componentDidMount(){\n document.addEventListener(\"keydown\", this.keyPress.bind(this), false);\n\n if(this.state.overlay === 'client') {\n this.searchClientsRef.current.focus()\n }\n\n }\n\n componentWillUnmount(){\n document.removeEventListener(\"keydown\", this.keyPress.bind(this), false);\n scrollPosition = 0\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if(prevState.loading && this.props.errors) {\n\n this.setState({\n ...this.state,\n loading: false\n })\n\n }\n\n if(prevProps.projects !== this.props.projects) {\n\n let client_id;\n\n if (this.state.client.id) {\n client_id = this.state.client.id;\n }\n\n this.setState({\n ...this.state, // needed?\n projects: this.state.client ? this.props.projects.projects.filter(function (el) {\n return el.client_id === client_id\n }) : this.props.projects.projects\n })\n\n }\n\n if(prevState.overlay !== 'new_project' && this.state.overlay === 'new_project' && this.state.project.billing_type === 'fixed_price') {\n this.fixedPriceRef.current.focus()\n }\n\n if(this.state.overlay === 'new_project' && prevState.project !== this.state.project) {\n\n let estimated = this.state.project.amount / this.state.project.estimated_time_value\n\n this.setState({\n estimated: estimated\n })\n\n }\n\n if(this.state.overlay === 'client') {\n this.searchClientsRef.current.focus()\n }\n\n if(this.state.overlay === 'new_client' && prevState.overlay !== 'new_client') {\n this.clientTitleRef.current.focus()\n }\n\n if(this.state.overlay === 'project') {\n this.searchProjectsRef.current.focus()\n }\n\n if(this.state.overlay === 'new_project' && prevState.overlay !== 'new_project') {\n this.projectTitleRef.current.focus()\n }\n\n }\n\n handleScheduleScroll(e) {\n scrollPosition = e.target.scrollTop;\n }\n\n keyPress(e, field=false){\n\n // up/down arrow\n if ( field && [38,40].includes( e.keyCode ) ) {\n\n let value = parseInt(e.target.innerText)\n\n // down\n if( e.keyCode === 40 ) {\n\n if (value === 0) {\n return false\n }\n\n --value\n\n }\n\n // up\n if( e.keyCode === 38 ) {\n ++value\n }\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n // escape\n // if(e.keyCode === 27) {\n // this.props.closeOverlay(e)\n // }\n\n // enter\n if(e.keyCode === 13) {\n\n const overlay = this.state.overlay;\n\n if (e.target.nodeName === 'TEXTAREA') {\n return false;\n }\n\n if (overlay === 'new_client' && this.clientButtonRef.current) {\n this.clientButtonRef.current.click()\n }\n\n if ((overlay === 'new_project') && this.projectButtonRef.current) {\n this.projectButtonRef.current.click()\n }\n\n if (overlay === 'schedule' && this.scheduleButtonRef.current) {\n this.scheduleButtonRef.current.click()\n }\n\n }\n\n }\n\n formatPrice(price, currency=undefined) {\n\n return new Intl.NumberFormat(this.props.common.locale, {\n style: 'currency',\n currency: currency || this.props.common.currentUser.currency\n }).format(price)\n\n }\n\n numericOnly(value){\n return value.replace(/[^0-9.]/g, '')\n }\n\n calculatePrice(unit, unit_value, rate){\n return (unit === 'days') ? parseFloat(rate).toFixed(2) : (parseFloat(unit_value) * rate).toFixed(2)\n }\n\n setOverlay(e, overlay, direction) {\n\n e.stopPropagation();\n\n let overlay_history;\n\n if (direction === 'back') {\n let array = this.state.overlay_history\n overlay_history = array.splice(0, array.length-1)\n } else {\n overlay_history = this.state.overlay_history.concat(overlay);\n }\n\n if(overlay === 'client') {\n this.searchClientsRef.current.value = ''\n }\n\n if(overlay === 'project') {\n this.searchProjectsRef.current.value = ''\n }\n\n this.setState({\n ...this.state, // needed?\n initialLoad: false,\n overlay: overlay,\n overlay_history: overlay_history,\n counter: overlay === 'client' ? 1 : (direction === 'forward' ? this.state.counter + 1 : this.state.counter - 1),\n //keyword: (overlay === 'client' || overlay === 'project') ? false : this.state.keyword,\n project: overlay === 'project' ? [] : this.state.project,\n project_id: overlay === 'project' ? false : this.state.project_id,\n projects: overlay === 'client' ? [] : this.state.projects,\n price: overlay === 'schedule'? true : false,\n results: false,\n keyword: false\n });\n\n }\n\n search(e, type) {\n\n let search = e.currentTarget.value;\n let array = {\n 'clients': this.props.clients.clients,\n 'projects': this.state.client ? this.state.projects : []\n }\n\n if (search.length > 1) {\n\n let list = _.filter(array[type], _.flow(\n _.values,\n _.partialRight(_.some, _.method('match', new RegExp(search, 'i')))\n ));\n\n if (type === 'clients') {\n\n this.setState({\n ...this.state, // needed?\n results: list,\n keyword: search\n })\n\n if (list.length === 0 && e.keyCode === 13) {\n this.setupNewClient()\n }\n\n } else if (type === 'projects') {\n\n this.setState({\n ...this.state, // needed?\n results: list,\n keyword: search\n })\n\n if (list.length === 0 && e.keyCode === 13) {\n this.setupNewProject()\n }\n\n }\n\n }\n\n if (search.length === 0) {\n\n this.setState({\n ...this.state, // needed?\n results: false,\n keyword: false\n })\n\n }\n\n }\n\n updateField(field, value) {\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n // get correct rate for new projects\n if(this.state.new && this.state.client && field === 'project.project_rate_unit') {\n\n let rate;\n\n if (value === 'hours') {\n rate = this.state.client.hourly_rate ? this.state.client.hourly_rate : this.props.common.currentUser.standard_hourly_rate;\n }\n\n if (value === 'days') {\n rate = this.state.client.day_rate ? this.state.client.day_rate : this.props.common.currentUser.standard_day_rate;\n }\n\n newData = update(this.state, {\n 'project': {\n 'project_rate_value': {$set: rate},\n 'project_rate_unit': {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n }\n\n updateColour(color) {\n this.updateField('client.hex_colour', color.hex)\n\n this.setState({\n displayColorPicker: false\n })\n\n }\n\n setClient(e, client) {\n\n e.stopPropagation();\n\n let dates = [];\n this.props.dates.map((date) => {\n return dates.push({\n date: date,\n price: (client.day_rate !== null) ? client.day_rate : this.props.common.currentUser.standard_day_rate,\n unit: 'days',\n unit_value: 1,\n unit_value_in_time: '01:00',\n unit_value_formatted: 'All-day'\n })\n })\n\n let total_price = 0;\n dates.map((date) => {\n return total_price += parseFloat(date.price)\n })\n\n let total_time = this.props.dates.length + (this.props.dates.length === 1 ? ' Day': ' Days');\n let projects = this.props.projects.projects.filter(function (el) {\n return el.client_id === client.id && el.state === 'active'\n })\n\n this.setState({\n ...this.state,\n overlay: 'project',\n overlay_history: this.state.overlay_history.concat('project'),\n counter: this.state.counter + 1,\n client: client,\n projects: projects,\n client_id: client.id,\n dates: dates,\n total_price: total_price,\n total_time: total_time,\n results: false,\n keyword: false\n });\n\n }\n\n setupNewClient(e) {\n\n var r = ((Math.floor(Math.random() * 255) + 255) / 2);\n var g = ((Math.floor(Math.random() * 255) + 255) / 2);\n var b = ((Math.floor(Math.random() * 255) + 255) / 2);\n var random_colour = 'rgb(' + r + ', ' + g + ', ' + b + ')';\n\n this.setState({\n ...this.state,\n overlay: 'new_client',\n overlay_history: this.state.overlay_history.concat('new_client'),\n counter: this.state.counter + 1,\n clients: this.props.clients.clients.filter((el) => {\n return el.state === 'active'\n }),\n client: {\n name: this.state.keyword ? this.state.keyword : '',\n hex_colour: random_colour,\n day_rate: this.props.common.currentUser.standard_day_rate,\n hourly_rate: this.props.common.currentUser.standard_hourly_rate,\n preferred_billing_unit: 'days',\n address_line_1: '',\n address_line_2: '',\n city: '',\n country: '',\n postal_code: '',\n payment_terms: 30,\n invoice_schedule: 'end_of_month',\n currency: this.props.common.currentUser.currency\n },\n projects: [],\n results: false,\n keyword: false\n })\n\n this.searchClientsRef.current.value = ''\n this.searchClientsRef.current.blur()\n\n }\n\n createClient(e, clientName) {\n\n // validate email if provided\n if( this.state.client.email && !validateEmail(this.state.client.email) ) {\n return false;\n }\n\n let newData;\n\n // pro-rata day rate\n if (this.state.client.preferred_billing_unit === 'hours') {\n\n newData = update(this.state.client, {\n day_rate: {$set: this.state.client.hourly_rate * this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n // pro-rata hourly rate\n if (this.state.client.preferred_billing_unit === 'days') {\n newData = update(this.state.client, {\n hourly_rate: {$set: this.state.client.day_rate / this.props.common.currentUser.hours_per_day }\n })\n\n }\n\n // create the client\n this.props.newClient( newData );\n\n this.setState({\n newData,\n loading: true\n })\n\n let that = this;\n let timer = setInterval(function() {\n\n // get client using a dispatch event instead (LOAD_CLIENT_IN_SCHEDULE)\n\n let new_client = that.props.clients.clients.filter(function (el) {\n return el.name === clientName\n });\n\n if (new_client[0]) {\n\n clearInterval(timer);\n\n let client = new_client[0]\n\n let dates = [];\n that.props.dates.map((date) => {\n return dates.push({\n date: date,\n price: (client.day_rate !== null) ? client.day_rate : that.props.common.currentUser.standard_day_rate,\n unit: 'days',\n unit_value: 1,\n unit_value_in_time: '01:00',\n unit_value_formatted: 'All-day'\n })\n })\n\n let total_price = 0;\n dates.map((date) => {\n return total_price += parseFloat(date.price)\n })\n\n let total_time = dates.length + ' Days';\n\n let overlay_history = that.state.overlay_history;\n\n let newState = {\n ...that.state,\n keyword: false,\n overlay: 'project',\n overlay_history: overlay_history.splice(0, overlay_history.length-1).concat('project'),\n dates: dates,\n client: client,\n client_id: client.id,\n price: client.day_rate,\n total_price: total_price,\n total_time: total_time,\n clients: that.props.clients.clients.filter((el) => {\n return el.state === 'active'\n }),\n loading: false\n }\n\n that.setState(newState);\n\n }\n\n }, 100);\n\n // cleanup\n newData = null;\n\n }\n\n setProject(e, project) {\n\n e.stopPropagation();\n\n let dates = [];\n let total_price = 0;\n let total_time = '';\n\n this.props.dates.map((date) => {\n return dates.push({\n date: date,\n price: project.project_rate_value,\n unit: project.project_rate_unit,\n unit_value: 1,\n unit_value_in_time: project.project_rate_unit === 'days' ? '24:00' : '01:00',\n unit_value_formatted: project.project_rate_unit === 'days' ? 'All-day' : '1h 00m'\n })\n\n })\n\n dates.map((date) => {\n return total_price += parseFloat(date.price)\n })\n\n if ( project.project_rate_unit === 'days' ) {\n total_time = this.props.dates.length + (this.props.dates.length > 1 ? ' Days' : ' Day');\n } else {\n total_time = this.props.dates.length + 'h 0m';\n }\n\n this.setState({\n overlay: 'schedule',\n overlay_history: this.state.overlay_history.concat('schedule'),\n counter: this.state.counter + 1,\n project: project,\n project_id: project.id,\n results: false,\n keyword: false,\n total_price: total_price,\n total_time: total_time\n });\n\n }\n\n setupNewProject(e) {\n\n this.setState({\n ...this.state,\n overlay: 'new_project',\n overlay_history: this.state.overlay_history.concat('new_project'),\n counter: this.state.counter + 1,\n projects: this.state.projects,\n project: {\n title: this.state.keyword ? this.state.keyword : '',\n billing_type: 'fixed_price',\n client_id: this.state.client.id,\n amount: '',\n estimated_time_unit: 'days',\n estimated_time_value: 1,\n project_rate_unit: 'days',\n project_rate_value: this.state.client.day_rate,\n currency: this.state.client.currency\n },\n estimated: 0,\n results: false,\n keyword: false\n })\n\n this.searchProjectsRef.current.value = ''\n this.searchProjectsRef.current.blur()\n\n }\n\n createProject(e, client_id, project_name) {\n\n this.setState({\n loading: true\n })\n\n // create the project\n this.props.newProject( this.state.project );\n\n let that = this;\n let timer = setInterval(function() {\n\n let new_project = that.props.projects.projects.filter(function (el) {\n return (el.title === project_name && el.client_id === client_id)\n });\n\n if (new_project[0]) {\n\n clearInterval(timer);\n\n let project = new_project[0]\n\n let dates = [];\n that.props.dates.map((date) => {\n return dates.push({\n date: date,\n price: (project.project_rate_value !== null) ? project.project_rate_value : that.state.client.day_rate,\n unit: 'days',\n unit_value: 1,\n unit_value_in_time: '01:00',\n unit_value_formatted: 'All-day',\n project_id: project.id\n })\n })\n\n let total_price = 0;\n dates.map((date) => {\n return total_price += parseFloat(date.price)\n })\n\n let total_time = dates.length + ' Days';\n\n let overlay_history = that.state.overlay_history;\n\n let newState = {\n ...that.state,\n keyword: false,\n overlay: 'schedule',\n overlay_history: overlay_history.splice(0, overlay_history.length-1).concat('schedule'),\n dates: dates,\n project: project,\n project_id: project.id,\n client_id: project.client_id,\n price: project.project_rate_value,\n total_price: total_price,\n total_time: total_time,\n loading: false\n }\n\n that.setState(newState);\n\n }\n\n }, 100);\n\n }\n\n updateInput(input) {\n\n let field = input.target.name;\n let newState = {\n ...this.state,\n [input.target.name]: input.target.value\n }\n\n this.setState(newState);\n\n }\n\n updateAllDates(override) {\n\n delete override.date\n\n let newState = []\n let total_price = 0;\n let total_time = '';\n let total_days = 0;\n let total_hours = 0;\n let calc;\n let calc_hours = 0;\n let calc_minutes = 0;\n\n // update all dates\n this.state.dates.forEach(function(item, i){\n\n newState = update(newState, {$push: [\n update(item, {\n price: {$set: override.price},\n unit: {$set: override.unit},\n unit_value: {$set: override.unit_value},\n unit_value_in_time: {$set: override.unit_value_in_time},\n unit_value_formatted: {$set: override.unit_value_formatted},\n })\n ]})\n\n // calculate total price and total time\n\n total_price += parseFloat(override.price)\n total_days += (override.unit === 'days' ? 1 : 0)\n total_hours = (override.unit === 'hours' ? parseFloat(override.unit_value) : 0)\n\n if(total_hours > 0) {\n calc = String(total_hours).split('.')\n calc_hours += parseFloat(calc[0])\n calc_minutes += parseFloat('0.'+calc[1]) * 60\n }\n\n if(total_days > 0) {\n total_time = total_days + (total_days === 1 ? ' Day': ' Days')\n }\n\n if(calc_hours > 0 || calc_minutes > 0 ) {\n total_time = calc_hours + 'h ' + calc_minutes.toFixed() + 'm'\n }\n\n });\n\n this.setState({\n ...this.state,\n dates: newState,\n total_price: total_price,\n total_time: total_time\n })\n\n }\n\n updateDate(date, data) {\n\n let newState;\n let index = this.state.dates.findIndex(function(el) {\n return el.date === date\n });\n\n let newData = Object.assign({}, this.state.dates[index], data);\n let unit_value = newData.unit === 'days' ? newData.unit_value : String(newData.unit_value).split(':');\n\n newData.date = date;\n\n // update unit_value of date being edited\n\n if(newData.unit === 'hours') {\n\n let hours = unit_value[0];\n let minutes = ((unit_value[1] * 60) / 3600).toString();\n\n if (minutes === '0') {\n minutes = '00'\n } else {\n minutes = minutes.split('.')[1]\n }\n\n newData.unit_value = hours + '.' + minutes;\n\n }\n\n // update price of date being edited\n\n let client = this.state.client;\n let project = this.state.project;\n let price;\n\n if(project) {\n price = this.calculatePrice(newData.unit, newData.unit_value,\n (newData.unit === 'days') ? (\n project.project_rate_unit === 'days' ? project.project_rate_value : project.project_rate_value * parseFloat(this.props.common.currentUser.hours_per_day)\n ) : (\n project.project_rate_unit === 'days' ? project.project_rate_value / parseFloat(this.props.common.currentUser.hours_per_day) : project.project_rate_value\n )\n )\n } else if (client) {\n price = this.calculatePrice(newData.unit, newData.unit_value,\n (newData.unit === 'days') ? (\n // day rate\n client.day_rate ? client.day_rate : this.props.common.currentUser.standard_day_rate\n ) : (\n // hourly rate\n client.hourly_rate ? client.hourly_rate : client.day_rate / this.props.common.currentUser.hours_per_day\n )\n )\n } else {\n price = this.calculatePrice(newData.unit, newData.unit_value,\n (newData.unit === 'days') ? (\n this.props.common.currentUser.standard_day_rate\n ) : (\n this.props.common.currentUser.standard_hourly_rate\n )\n )\n }\n\n newData.price = price\n\n // new work\n if (this.state.new) {\n\n newState = Object.assign([], this.state.dates, {\n [index]: newData\n });\n\n // existing work\n } else {\n\n newState = Object.assign([], this.state.dates, {\n 0: newData\n });\n\n }\n\n // calculate total price and total time\n\n let total_days = 0;\n let total_hours = 0;\n let total_price = 0;\n let calc;\n let calc_hours = 0;\n let calc_minutes = 0;\n let total_time = '';\n\n newState.map((date) => {\n total_price += parseFloat(date.price)\n total_days += (date.unit === 'days' ? 1 : 0)\n total_hours = (date.unit === 'hours' ? parseFloat(date.unit_value) : 0)\n\n if(total_hours > 0) {\n calc = String(total_hours).split('.')\n calc_hours += parseFloat(calc[0])\n calc_minutes += parseFloat('0.'+calc[1]) * 60\n }\n\n return;\n\n })\n\n if(total_days > 0) {\n total_time += total_days + (total_days === 1 ? ' Day': ' Days')\n }\n\n if(calc_hours > 0 || calc_minutes > 0 ) {\n if(total_days > 0) {\n total_time += ', '\n }\n total_time += calc_hours + 'h ' + calc_minutes.toFixed() + 'm'\n }\n\n // update state\n\n this.setState({\n ...this.state,\n dates: newState,\n total_price: total_price,\n total_time: total_time\n });\n\n }\n\n saveHoliday(e, activeMonth) {\n\n e.stopPropagation();\n\n let dates = [];\n\n this.props.dates.map((date) => {\n return dates.push({\n date: date,\n holiday: true\n })\n })\n\n this.props.updateSchedule(\n 'HOLIDAY', //type\n activeMonth, // activeMonth\n dates, // dates,\n false // work\n )\n\n this.props.closeOverlay(e)\n\n }\n\n saveWork(e, type, activeMonth, dates, work) {\n\n e.stopPropagation();\n\n const client = this.state.client;\n\n work = Object.assign({}, this.state, {holiday: false, updated: dateFns.parse(Date.now())});\n\n this.props.updateSchedule(\n type, //type\n activeMonth, // activeMonth\n dates, // dates,\n work // work\n )\n\n this.props.closeOverlay(e)\n\n }\n\n handleClick = () => {\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\n };\n\n handleClose = () => {\n this.setState({ displayColorPicker: false })\n };\n\n render() {\n\n const close =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M19 5L5 19M19 19L5 5\"/>\n </g>\n </svg>\n\n const price =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"11\" cy=\"10\" r=\"1.5\"/><path d=\"M.5 2.5v11a2 2 0 002 2h13v-11h-13a2 2 0 01-2-2h0a2 2 0 012-2h9v2\"/>\n </g>\n </svg>\n\n const time =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n <g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\">\n <circle cx=\"8.5\" cy=\"8.5\" r=\"7\"/><path d=\"M8.5 4.5v4h4\"/>\n </g>\n </svg>\n\n const holiday =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\">\n <path fill=\"#EA9860\" d=\"M24 9c-.55273 0-1-.44775-1-1V2c0-.55225.44727-1 1-1s1 .44775 1 1v6c0 .55225-.44727 1-1 1zM13.3934 13.3934c-.39084.39084-1.02372.3905-1.41421 0L7.73654 9.15076c-.3905-.3905-.39084-1.02337 0-1.41421.39084-.39084 1.02372-.3905 1.41421 0l4.24264 4.24264c.39051.39049.39085 1.02337.00001 1.41421zM9 24c0 .55273-.44775 1-1 1H2c-.55225 0-1-.44727-1-1s.44775-1 1-1h6c.55225 0 1 .44727 1 1zM13.3934 34.6066c.39084.39084.3905 1.02372 0 1.41422l-4.24264 4.24264c-.3905.3905-1.02337.39084-1.41421 0-.39084-.39084-.3905-1.02372 0-1.41421l4.24264-4.24264c.39049-.3905 1.02337-.39085 1.41421-.00001zM24 39c.55273 0 1 .44775 1 1v6c0 .55225-.44727 1-1 1s-1-.44775-1-1v-6c0-.55225.44727-1 1-1zM34.6066 34.6066c.39084-.39084 1.02372-.3905 1.41422 0l4.24264 4.24264c.3905.3905.39084 1.02337 0 1.41421s-1.02372.3905-1.41421 0l-4.24264-4.24264c-.3905-.39049-.39085-1.02337-.00001-1.41421zM39 24c0-.55273.44775-1 1-1h6c.55225 0 1 .44727 1 1s-.44775 1-1 1h-6c-.55225 0-1-.44727-1-1zM34.6066 13.3934c-.39084-.39084-.3905-1.02372 0-1.41421l4.24264-4.24264c.3905-.3905 1.02337-.39084 1.41421 0 .39084.39084.3905 1.02372 0 1.41421l-4.24264 4.24264c-.39049.3905-1.02337.39084-1.41421 0z\"/>\n <path fill=\"#EFD358\" d=\"M24 37c-7.16797 0-13-5.83154-13-13s5.83203-13 13-13 13 5.83154 13 13-5.83203 13-13 13z\"/>\n </svg>\n\n const holiday__sm =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M1 12h1M4.2 4.2l.7.7M12 1v1M19.8 4.2l-.7.7M23 12h-1M19.8 19.8l-.7-.7M12 23v-1M4.2 19.8l.7-.7\"/>\n <circle cx=\"12\" cy=\"12\" r=\"6\"/>\n </g>\n </svg>\n\n const arrow =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"none\" stroke=\"currentColor\" strokeMiterlimit=\"10\">\n <path d=\"M2 12h20M15 5l7 7-7 7\"/>\n </g>\n </svg>\n\n const help =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\">\n <path fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\" d=\"M14.5 15.5h-12c-.552 0-1-.448-1-1v-12c0-.552.448-1 1-1h12c.552 0 1 .448 1 1v12c0 .552-.448 1-1 1z\"/>\n <circle fill=\"currentColor\" data-stroke=\"none\" cx=\"8.5\" cy=\"5\" r=\"0.5\" stroke=\"none\"/>\n <path fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\" d=\"M8.5 12.5v-4\"/>\n </svg>\n\n const client =\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\">\n <g strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" fill=\"currentColor\" stroke=\"currentColor\">\n <path fill=\"none\" strokeMiterlimit=\"10\" d=\"M24 2C11.85 2 2 11.85 2 24v18s6 4 22 4 22-4 22-4V24c0-12.15-9.85-22-22-22z\"/>\n <path fill=\"none\" strokeMiterlimit=\"10\" d=\"M28.577 8.673c-5.07 5.049-11.822 8.409-19.344 9.164C8.441 19.734 8 21.815 8 24c0 8.837 7.163 16 16 16s16-7.163 16-16c0-7.245-4.818-13.357-11.423-15.327z\"/>\n <circle fill=\"none\" strokeMiterlimit=\"10\" cx=\"17\" cy=\"25\" r=\"1\"/>\n <circle fill=\"none\" strokeMiterlimit=\"10\" cx=\"31\" cy=\"25\" r=\"1\"/>\n <circle data-stroke=\"none\" cx=\"17\" cy=\"25\" r=\"1\" stroke=\"none\"/>\n <circle data-stroke=\"none\" cx=\"31\" cy=\"25\" r=\"1\" stroke=\"none\"/>\n </g>\n </svg>\n\n return (\n ReactDOM.createPortal(\n\n <FocusTrap>\n <div className=\"focus\">\n <div className={`overlay__blocks counter__${this.state.counter} ${this.state.initialLoad && 'initialLoad'}`}>\n\n {this.state.overlay_history.includes('client') && (\n <div className={this.props.clients.clients.length === 0 ? 'overlay__block empty' : 'overlay__block client '}>\n {this.props.clients.clients.length === 0 && (\n <div className=\"empty\">\n { client }\n <span>Add your first client.</span>\n </div>\n )}\n <div className=\"header\">\n <input\n autoFocus={true}\n ref={this.searchClientsRef}\n onKeyUp={(e) => this.search(e, 'clients')}\n type=\"text\"\n placeholder={ this.props.clients.clients.length === 0 ? 'Client Name' : 'Search Clients...'} />\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n {(this.state.results ? this.state.results : this.state.clients).map((el,key) => {\n return (\n <div\n key={key}\n className=\"item padding border rounded\"\n onClick={(e) => this.setClient(e, el)}>{el.name}</div>\n )\n })}\n {!this.state.results && _.size(this.state.clients) > 0 && (\n <div\n className=\"new padding border rounded\"\n onClick={(e) => this.setupNewClient(e, '')}>New Client...</div>\n )}\n <div className=\"divider padding\"></div>\n {this.state.keyword.length > 1 ? (\n <div\n className=\"new padding border rounded\"\n onClick={(e) => this.setupNewClient(e)}>Create a client called ­<b>{this.state.keyword}</b> { arrow }</div>\n ) : (\n <div\n className=\"new padding border rounded\"\n onClick={(e) => { this.saveHoliday(\n e,\n this.props.activeMonth // activeMonth\n ) }}>Mark these days as holiday { holiday__sm }</div>\n )}\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('new_client') && (\n <div className=\"overlay__block new_client overflow\">\n <div className=\"header\">\n <input\n type=\"text\"\n ref={this.clientTitleRef}\n className=\"form-control\"\n type=\"text\"\n placeholder=\"Client Name...\"\n value={this.state.client.name}\n onChange={(e) => this.updateField('client.name', e.target.value)} />\n <button\n onClick={(e) => this.setOverlay(e, 'client', 'back')}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n <div className=\"flex\">\n <textarea\n type=\"text\"\n placeholder=\"Address...\"\n value={this.state.client.address}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.address', e.target.value)} />\n </div>\n <label className=\"flex padding\">\n <div className=\"date\">Contact Name</div>\n <div\n className=\"input text\">\n <input\n type=\"text\"\n placeholder=\"Optional\"\n value={this.state.client.contact_name}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.contact_name', e.target.value)} />\n </div>\n </label>\n <label className=\"flex padding border\">\n <div className=\"date\">Email Address</div>\n <div\n className=\"input text\">\n <input\n type=\"text\"\n placeholder=\"Optional\"\n value={this.state.client.email}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.email', e.target.value)} />\n </div>\n </label>\n <label className=\"flex padding border\">\n <div className=\"date\">Colour</div>\n <div className=\"picker\">\n <div\n className=\"preview\"\n style={{backgroundColor: this.state.client.hex_colour}}\n onClick={ this.handleClick }>\n </div>\n { this.state.displayColorPicker && <div className=\"popover\">\n <div className=\"popover__cover\" onClick={ this.handleClose }/>\n <TwitterPicker\n color={ this.state.client.hex_colour }\n onChangeComplete={this.updateColour.bind(this)}/>\n </div>}\n </div>\n </label>\n <div className=\"flex padding border\">\n <div className=\"date\">Currency</div>\n <Select\n className=\"react-select-container\"\n classNamePrefix=\"react-select\"\n options={currencies}\n defaultValue={currencies.filter((el) => { return el.value === this.state.client.currency})}\n menuPlacement=\"auto\"\n onChange={(e) => this.updateField('client.currency', e.value)}\n components={{ Input, DropdownIndicator }}\n />\n </div>\n <div className=\"flex padding border\">\n <div className=\"date\">How do you want to bill {this.state.client.name}?</div>\n <Dropdown\n client={this.state.client}\n content=\"preferred_billing_unit\"\n onChange={this.updateField.bind(this)} />\n </div>\n {this.state.client.preferred_billing_unit !== 'projects' && (\n this.state.client.preferred_billing_unit === 'hours' ? (\n <div className=\"flex padding border\">\n <div className=\"date\">How much do you charge per hour?</div>\n <div\n className={`input currency`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.client.hourly_rate.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.hourly_rate', this.numericOnly(e.target.value))} />\n </div>\n </div>\n ) : (\n <div className=\"flex padding border\">\n <div className=\"date\">How much do you charge per day?</div>\n <div\n className={`input currency`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.client.day_rate.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('client.day_rate', this.numericOnly(e.target.value))} />\n </div>\n </div>\n )\n )}\n </div>\n <div className=\"actions\">\n <button\n ref={this.clientButtonRef}\n className={this.state.loading ? 'btn btn__loading' : 'btn'}\n disabled={this.state.loading || isEmpty(this.state.client.name)}\n onClick={(e) => this.createClient(e, this.state.client.name)}>\n <div className=\"loader loader__button\"></div>\n <span>Save & Continue</span>\n </button>\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('project') && (\n <div className={this.state.projects.length === 0 ? 'overlay__block empty' : 'overlay__block project'}>\n {this.state.projects.length === 0 ? (\n <React.Fragment>\n <div className=\"empty\">\n { client }\n <span>Add your first project for { this.state.client.name }.</span>\n </div>\n <div className=\"header\">\n <input\n autoFocus={true}\n ref={this.searchProjectsRef}\n onKeyUp={(e) => this.search(e, 'projects')}\n type=\"text\" placeholder={`Project name...`}/>\n <button\n onClick={(e) => this.setOverlay(e, 'client', 'back')}>\n {close}\n </button>\n </div>\n </React.Fragment>\n ) : (\n <div className=\"header\">\n <input\n autoFocus={true}\n ref={this.searchProjectsRef}\n onKeyUp={(e) => this.search(e, 'projects')}\n type=\"text\" placeholder={`Search projects for ${this.state.client.name}...`}/>\n <button\n onClick={(e) => this.setOverlay(e, 'client', 'back')}>\n {close}\n </button>\n </div>\n )}\n <div className=\"content\">\n {(this.state.results ? this.state.results : this.state.projects).map((el, key) => {\n return (\n <div\n key={key}\n className=\"item padding border rounded\"\n onClick={(e) => this.setProject(e, el)}>\n {el.title}\n <span>{el.billing_type_formatted}</span>\n </div>\n )\n })}\n {_.size(this.state.projects) > 0 && !this.state.results && (\n <div\n className=\"new padding border rounded\"\n onClick={(e) => this.setupNewProject(e)}>New Project...</div>\n )}\n <div className=\"divider padding\"></div>\n {this.state.keyword.length > 1 ? (\n <div\n className=\"new padding border rounded\"\n onClick={(e) => this.setupNewProject(e)}>Create a project called ­<b>{this.state.keyword}</b> { arrow }</div>\n ) : (\n <div\n className=\"new padding border rounded\"\n onClick={(e) => this.setOverlay(e, 'schedule', 'forward')}>This work isn't for a project {arrow}</div>\n )}\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('new_project') && (\n <div className=\"overlay__block new_project overflow\">\n <div className=\"header\">\n <input\n autoFocus={true}\n ref={this.projectTitleRef}\n className=\"form-control\"\n type=\"text\"\n placeholder=\"Project Name...\"\n value={this.state.project.title}\n onChange={(e) => this.updateField('project.title', e.target.value)} />\n <button\n onClick={(e) => this.setOverlay(e, 'project', 'back')}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n <div className=\"flex\">\n <textarea\n className=\"form-control\"\n type=\"text\"\n placeholder=\"Description...\"\n value={this.state.project.description}\n onChange={(e) => this.updateField('project.description', e.target.value)}></textarea>\n </div>\n\n <div className=\"tabs\">\n\n <div className=\"title\">I want to bill this project by...</div>\n\n <div className=\"options tabs\">\n <button\n className={this.state.project.billing_type === 'time_spent' ? 'selected' : ''}\n onClick={(e) => this.updateField('project.billing_type', 'time_spent')}>Time Spent</button>\n <button\n className={this.state.project.billing_type === 'fixed_price' ? 'selected' : ''}\n onClick={(e) => this.updateField('project.billing_type', 'fixed_price')}>Fixed Price</button>\n </div>\n\n </div>\n\n {this.state.project.billing_type === 'time_spent' ? (\n <React.Fragment>\n <div className=\"flex padding border\">\n <div className=\"date\">How do you want to bill this project?</div>\n <Dropdown\n project={this.state.project}\n content=\"project_rate_unit\"\n onChange={this.updateField.bind(this)} />\n </div>\n <div className=\"flex padding border\">\n <div className=\"date\">How much do you charge per {this.state.project.project_rate_unit === 'hours' ? 'hour' : 'day'}?</div>\n <div\n className={`input current`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.project.project_rate_value.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('project.project_rate_value', this.numericOnly(e.target.value))} />\n </div>\n </div>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <div className=\"flex padding border\">\n <div className=\"date\">What is your fixed price?</div>\n <div\n className={`input currency`}\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <span className=\"helper\">{getSymbolFromCurrency( this.state.client ? this.state.client.currency : this.props.common.currentUser.currency )}</span>\n <ContentEditable\n className=\"fixed_price\"\n innerRef={this.fixedPriceRef}\n html={this.state.project.amount.toString()}\n onKeyDown={(e) => this.keyPress(e)}\n onChange={(e) => this.updateField('project.amount', this.numericOnly(e.target.value))} />\n </div>\n </div>\n <div className=\"flex padding border\">\n <div className=\"date\">How long do you think this will take?</div>\n <div className=\"double\">\n <div\n className=\"input number\"\n onClick={(e) => e.currentTarget.querySelector('[contentEditable]').focus() }>\n <ContentEditable\n innerRef={ React.createRef() }\n html={this.state.project.estimated_time_value.toString()}\n onKeyDown={(e) => this.keyPress(e, 'project.estimated_time_value')}\n onChange={(e) => this.updateField('project.estimated_time_value', this.numericOnly(e.target.value))} />\n </div>\n <Dropdown\n project={this.state.project}\n content=\"estimated_time_unit\"\n onChange={this.updateField.bind(this)} />\n </div>\n </div>\n </React.Fragment>\n )}\n <div className=\"flex padding border\">\n <div className=\"date\">Do you have a deadline?</div>\n <Dropdown\n project={this.state.project}\n content=\"deadline\"\n onChange={this.updateField.bind(this)} />\n </div>\n </div>\n <div className=\"actions\">\n { this.state.project.billing_type === 'fixed_price' && (\n <div className=\"totals\">\n <div>\n <PriceIcon />\n { this.formatPrice(this.state.estimated, this.state.client ? this.state.client.currency : this.props.common.currentUser.currency) }/{this.state.project.estimated_time_unit.slice(0, -1)} <Tooltip message={`This is an estimate based on your fixed price and the length of time you expect this project to take.`} position={'top'} size={'large'}><Info /></Tooltip>\n </div>\n </div>\n )}\n <button\n ref={this.projectButtonRef}\n className={this.state.loading ? 'btn btn__loading' : 'btn'} disabled={this.state.loading}\n onClick={(e) => this.createProject(e, this.state.client_id, this.state.project.title)}>\n <div className=\"loader loader__button\"></div>\n <span>Save & Continue</span>\n </button>\n </div>\n </div>\n )}\n\n {this.state.overlay_history.includes('schedule') && (\n <div className=\"overlay__block schedule\">\n <div className=\"header\">\n <h2>Schedule { this.state.total_time } { this.state.project && `for ${this.state.project.title}`}</h2>\n <button\n onClick={(e) => this.setOverlay(e, 'project', 'back')}>\n {close}\n </button>\n </div>\n <div className=\"content\" onScroll={this.handleScheduleScroll.bind(this)}>\n {this.state.dates.map((date, key) => {\n return (\n <OverlayItem\n key={key}\n updateDate={this.updateDate.bind(this)}\n updateAllDates={this.updateAllDates.bind(this)}\n date={date.date}\n price={date.price}\n unit={date.unit}\n unit_value={date.unit_value}\n unit_value_in_time={date.unit_value_in_time}\n unit_value_formatted={date.unit_value_formatted}\n client={this.state.client}\n project={this.state.project}/>\n )\n })}\n <div className=\"flex padding border note\">\n <NoteIcon />\n <input\n name=\"note\"\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Add a note...\"\n maxLength=\"50\"\n value={this.state.note ? this.state.note : ''}\n onChange={this.updateInput.bind(this)} />\n </div>\n </div>\n <div className=\"actions\">\n <div className=\"totals\">\n { (this.state.price || (this.state.project && this.state.project.billing_type === 'time_spent')) && (\n <div>\n <PriceIcon /> { this.formatPrice(this.state.total_price, \n (this.state.client.currency ? this.state.client.currency : this.props.common.currentUser.currency)\n ) }\n <Tooltip\n message={\n this.state.total_time.includes('Day') ?\n `${this.state.client.day_rate_formatted} (Day Rate) <br />x<br /> ${this.state.total_time} (Time)`\n :\n `${this.state.client.hourly_rate_formatted} (Hourly Rate) <br />x<br /> ${this.state.total_time} (Time)`\n }\n position={'top'} size={'large'}><Info /></Tooltip>\n </div>\n )}\n <div>\n <TimeIcon /> { this.state.total_time }\n </div>\n </div>\n <button\n ref={this.scheduleButtonRef}\n className=\"btn\"\n onClick={(e) => { this.saveWork(\n e,\n 'CREATE', //type\n this.props.activeMonth, // activeMonth\n this.state.dates, // dates\n false // work\n ) }}>Add to my Schedule</button>\n </div>\n <div className=\"tip\">You can change the time for each day using the <em>↑</em> and <em>↓</em> arrow keys.</div>\n </div>\n )}\n\n {this.state.client && this.state.overlay === 'work' && (\n <div className=\"overlay__block work\">\n <div className=\"header\">\n {this.state.project ? (\n <h2>Work for {this.state.project.title} ({this.state.client.name})</h2>\n ) : (\n <h2>Work for {this.state.client.name}</h2>\n )}\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n {this.state.dates.map((date) => {\n return (\n <OverlayItem\n key={date}\n updateDate={this.updateDate.bind(this)}\n date={date.date}\n client={this.state.client}\n project={this.state.project}\n id={date.id}\n price={date.price_formatted}\n unit={date.unit}\n unit_value={date.unit_value}\n unit_value_in_time={date.unit_value_in_time}\n unit_value_formatted={date.unit_value_formatted}\n state={date.state} />\n )\n })}\n <div className=\"flex padding border note\">\n <NoteIcon />\n <input\n name=\"note\"\n type=\"text\"\n autoComplete=\"off\"\n placeholder=\"Add a note...\"\n maxLength=\"50\"\n value={this.state.note ? this.state.note : ''}\n onChange={this.updateInput.bind(this)}\n disabled={ (this.state.dates[0].state === 'invoiced' || this.state.dates[0].state === 'paid') ? true : false } />\n </div>\n </div>\n <div className=\"actions\">\n <div className=\"totals\">\n { ((!this.state.project) || (this.state.project && this.state.project.billing_type === 'time_spent')) && (\n <div>\n <PriceIcon /> { this.state.total_price ? this.formatPrice(this.state.total_price,\n (this.state.client.currency ? this.state.client.currency : this.props.common.currentUser.currency)\n ) : this.state.dates[0].price_formatted }\n <Tooltip\n message={\n ( this.state.dates[0].unit === 'days' ) ?\n `${this.state.client.day_rate_formatted} (Day Rate) <br />x<br /> ${ this.state.total_time ? this.state.total_time : this.state.dates[0].unit_value_formatted } (Time)`\n :\n `${this.state.client.hourly_rate_formatted} (Hourly Rate) <br />x<br /> ${ this.state.total_time ? this.state.total_time : this.state.dates[0].unit_value_formatted } (Time)`\n }\n position={'top'} size={'large'}><Info /></Tooltip>\n </div>\n )}\n <div><TimeIcon /> { this.state.total_time ? this.state.total_time : this.state.dates[0].unit_value_formatted }</div>\n </div>\n <div className=\"buttons\">\n {(this.state.dates[0].state !== 'invoiced' && this.state.dates[0].state !== 'paid') && (\n <button\n className=\"btn btn__secondary\"\n onClick={(e) => { this.saveWork(\n e,\n 'REMOVE', //type\n this.props.activeMonth, // activeMonth\n this.state.dates, // dates\n false // work\n ) }}>Delete</button>\n )}\n <button\n disabled={ (this.state.dates[0].state === 'invoiced' || this.state.dates[0].state === 'paid') ? true : false }\n className=\"btn\"\n onClick={(e) => { this.saveWork(\n e,\n 'UPDATE', //type\n this.props.activeMonth, // activeMonth\n this.state.dates, // dates\n false // work\n ) }}>\n {(this.state.dates[0].state !== 'invoiced' && this.state.dates[0].state !== 'paid') ? (\n <span>Update Work</span>\n ) : (\n <>\n <Tooltip message={`This item is now locked as it has been marked as ${this.state.dates[0].state}.`} position={'top'} size={'large'}>\n <LockIcon />\n </Tooltip>\n <span>Update Work</span>\n </>\n )}</button>\n </div>\n </div>\n </div>\n )}\n\n {this.state.overlay === 'holiday' && (\n <div className=\"overlay__block holiday\">\n <div className=\"header\">\n <h2>{dateFns.format(this.props.dates[0], 'ddd Do MMMM YYYY')}</h2>\n <button\n onClick={(e) => this.props.closeOverlay(e)}>\n {close}\n </button>\n </div>\n <div className=\"content\">\n\n { holiday }\n\n <div>You've marked {dateFns.format(this.props.dates[0], 'ddd Do MMMM YYYY')} as a holiday.</div>\n\n <button\n className=\"btn btn__secondary\"\n onClick={(e) => { this.saveWork(\n e,\n 'REMOVE', //type\n this.props.activeMonth, // activeMonth\n this.state.dates, // dates\n false // work\n ) }}>Delete Holiday</button>\n\n </div>\n </div>\n )}\n\n </div>\n\n <div\n className=\"overlay__bg\"\n onClick={(e) => this.props.closeOverlay(e) }></div>\n\n <ListErrors errors={this.props.errors} />\n\n </div>\n </FocusTrap>,\n document.querySelector('.overlay')\n )\n )\n\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Overlay);\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", {\n fill: \"orange\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n x: 7,\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n x: 11.9,\n y: 2.1,\n transform: \"matrix(0.7069 0.7074 -0.7074 0.7069 5.9537 -8.2658)\",\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n x: 14,\n y: 7,\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n x: 11.9,\n y: 11.9,\n transform: \"matrix(-0.7074 -0.7069 0.7069 -0.7074 12.956 31.2634)\",\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n x: 7,\n y: 14,\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n x: 2.1,\n y: 11.9,\n transform: \"matrix(-0.7069 -0.7074 0.7074 -0.7069 -3.9536 24.261)\",\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n y: 7,\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"rect\", {\n \"data-color\": \"color-2\",\n x: 2.1,\n y: 2.1,\n transform: \"matrix(0.7074 0.7069 -0.7069 0.7074 3.0488 -1.2635)\",\n width: 2,\n height: 2\n}), /*#__PURE__*/React.createElement(\"path\", {\n fill: \"orange\",\n d: \"M8,4C5.8,4,4,5.8,4,8s1.8,4,4,4s4-1.8,4-4S10.2,4,8,4z\"\n}));\n\nvar SvgHoliday = function SvgHoliday(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 16,\n height: 16,\n viewBox: \"0 0 16 16\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgHoliday, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/holiday.f7387432.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport Overlay from './Overlay';\nimport Tooltip from '../Tooltip';\nimport _ from 'lodash';\nimport { TSelectableItemProps } from 'react-selectable-fast';\nimport {ReactComponent as HolidayIcon} from '../../images/holiday.svg';\nimport {ReactComponent as LockIcon} from '../../images/lock.svg';\n\nimport agent from '../../agent';\nimport {\n SCHEDULE_CREATE,\n SCHEDULE_UPDATE,\n SCHEDULE_REMOVE,\n MONTH_LOADED,\n OPEN_SCHEDULE_OVERLAY,\n CLOSE_SCHEDULE_OVERLAY\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = (state, ownProps) => (\n {\n ...state,\n activeMonth: state.common.activeMonth,\n overlay: state.schedule.overlay\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n updateSchedule: (type, activeMonth, targetMonth, targetDay, work, dates, modal) => {\n\n if (type === 'CREATE' || type === 'HOLIDAY') {\n\n if (type === 'HOLIDAY') {\n\n work = {\n date: targetDay,\n holiday: true\n }\n\n }\n\n if (type === 'CREATE') {\n //dispatch({ type: CLIENT_IN_FOCUS, client_id: work.client_id })\n }\n\n dispatch({ type: SCHEDULE_CREATE, payload: agent.Schedule.create(work) })\n\n }\n\n if (type === 'UPDATE') {\n\n dispatch({ type: SCHEDULE_UPDATE, payload: agent.Schedule.update(work) })\n\n }\n\n if (type === 'REMOVE') {\n\n dispatch({ type: SCHEDULE_REMOVE, payload: agent.Schedule.remove(work.id) })\n\n }\n\n if ( dateFns.isSameDay(targetMonth, activeMonth) ) {\n\n setTimeout(function(){\n let month_name = dateFns.format(targetMonth, 'MMMM').toLowerCase()\n let year = dateFns.format(targetMonth, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: targetMonth, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n }, 500);\n\n }\n\n },\n openOverlay: () => {\n dispatch({ type: OPEN_SCHEDULE_OVERLAY });\n },\n closeOverlay: () => {\n dispatch({ type: CLOSE_SCHEDULE_OVERLAY });\n }\n});\n\nlet dragItem;\nlet dragItemFrontend;\n\nclass ScheduleItem extends React.Component<TSelectableItemProps> {\n\n constructor(props) {\n super(props);\n\n this.state = {\n booked: false,\n currency: this.props.common.currentUser.currency,\n overlay: false\n }\n\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n\n if (this.props.classNames !== nextProps.classNames || this.state.overlay !== nextState.overlay || this.props.selectableRef !== nextProps.selectableRef || this.props.isSelecting !== nextProps.isSelecting || this.props.isSelected !== nextProps.isSelected) {\n return true;\n }\n\n if( !(_.isEqual(_.sortBy(this.props.deleteKeys), _.sortBy(nextProps.deleteKeys))) ) {\n\n if( _.size(this.props.work) <= 0 ) {\n return false;\n } else {\n return true;\n }\n\n }\n\n if( !(_.isEqual(_.sortBy(this.props.work), _.sortBy(nextProps.work))) ) {\n return true;\n }\n\n return false;\n\n }\n\n openOverlay(e, overlay, work = false) {\n\n e.preventDefault();\n e.stopPropagation();\n\n if ( e.shiftKey ) {\n\n if ( e.currentTarget.getAttribute('data-work') ) {\n\n this.props.deleteWork( e.currentTarget.getAttribute('data-work') )\n\n } else {\n\n this.props.addWork( e.currentTarget.getAttribute('data-day') );\n\n }\n\n } else {\n\n this.props.openOverlay()\n\n this.setState({\n overlay: overlay,\n work: work\n });\n\n }\n\n }\n\n onMouseEnter = (e) => {\n e.stopPropagation();\n e.currentTarget.classList.add('hover');\n }\n\n onMouseLeave = (e) => {\n e.stopPropagation();\n e.currentTarget.classList.remove('hover');\n }\n\n onDragEnter = (e) => {\n e.stopPropagation();\n e.currentTarget.classList.add('drop');\n }\n\n onDragLeave = (e) => {\n e.stopPropagation();\n e.currentTarget.classList.remove('drop');\n }\n\n onDragOver = (e) => {\n e.preventDefault();\n }\n\n handleDrop = (e) => {\n\n let work = {\n ...dragItem.props.work[ dragItemFrontend.getAttribute('data-index') ],\n date: e.currentTarget.getAttribute('data-day')\n }\n\n this.props.updateSchedule('UPDATE', this.props.activeMonth, this.props.activeMonth, false, work, false)\n\n e.currentTarget.classList.remove('drop');\n\n document.querySelector('.schedule__calendar').classList.remove('dragging');\n\n dragItemFrontend.classList.remove('dragging');\n\n dragItem = false\n dragItemFrontend = false\n\n }\n\n onDragEnd = (e) => {\n\n e.currentTarget.style.opacity = '1';\n\n }\n\n onDragStart = (e) => {\n\n e.currentTarget.parentNode.parentNode.classList.add('hover');\n\n dragItem = this;\n dragItemFrontend = e.currentTarget;\n\n e.stopPropagation();\n\n document.querySelector('.schedule__calendar').classList.add('dragging');\n\n setTimeout(function(){\n dragItemFrontend.classList.add('dragging');\n });\n\n }\n\n closeOverlay(e) {\n\n e.stopPropagation();\n\n this.props.closeOverlay()\n\n this.setState({\n overlay: false\n });\n\n }\n\n handleWorkClick = (e) => {\n\n e.stopPropagation();\n\n if ( e.shiftKey || e.currentTarget.classList.contains('checkbox') ) {\n\n this.props.deleteWork( e.currentTarget.getAttribute('data-work') )\n\n }\n\n }\n\n handleDateEnter = (e) => {\n\n e.currentTarget.parentNode.querySelector('.day__work div:last-child').classList.add('hover');\n\n }\n\n handleDateLeave = (e) => {\n\n e.currentTarget.parentNode.querySelector('.day__work div:last-child').classList.remove('hover');\n\n }\n\n render() {\n\n const { selectableRef, isSelecting } = this.props\n\n let content;\n\n const add = <React.Fragment>\n <div\n className={`add ${ !this.props.schedule && dateFns.isToday(this.props.day) ? 'hover' : '' } ${ this.props.blackout && this.props.blackout.name ? 'blackout' : '' }`}\n data-day={dateFns.format(this.props.day, 'YYYY-MM-DD')}\n onMouseEnter={this.onMouseEnter}\n onMouseLeave={this.onMouseLeave}>\n <article>\n <span className=\"title\">Book {dateFns.format(this.props.day, 'ddd Do MMMM YYYY')} { this.props.blackout && this.props.blackout.name ? `(${this.props.blackout.name})` : '' }</span>\n <small className=\"meta\">{ this.props.blackout && this.props.blackout.name ? this.props.blackout.name : '' }</small>\n </article>\n </div>\n </React.Fragment>;\n\n const add_inline = <React.Fragment key={dateFns.format(this.props.day, 'YYYY-MM-DD')}>\n <div\n className=\"add__quick\"\n data-day={dateFns.format(this.props.day, 'YYYY-MM-DD')}\n onMouseEnter={this.onMouseEnter}\n onMouseLeave={this.onMouseLeave}>\n <small>{this.props.hours} free</small>\n </div>\n </React.Fragment>;\n\n const clients = this.props.work.map((work, index) =>\n <React.Fragment key={index}>\n <div\n draggable={ (work.state === 'invoiced' || work.state === 'paid') ? false : true }\n data-index={index}\n data-work={work.id}\n data-day={dateFns.format(this.props.day, 'YYYY-MM-DD')}\n onClick={(e) => this.openOverlay(e, work.holiday ? 'holiday' : 'work', work)}\n onDragStart={this.onDragStart}\n onDragEnd={this.onDragEnd}\n onMouseEnter={this.onMouseEnter}\n onMouseLeave={this.onMouseLeave}\n className={ _.includes(this.props.deleteKeys, work.id.toString() ) ? 'delete' : '' }>\n {work.holiday ? (\n <React.Fragment>\n <em />\n <article>\n <span className=\"title\">Holiday <HolidayIcon /></span>\n </article>\n </React.Fragment>\n ) :\n this.props.clients.clients.filter(function (el) {\n return el.id === work.client\n }).map((el) => {\n\n return (\n <React.Fragment key={el.id}>\n <Tooltip message={work.unit === 'hours' ? work.unit_value_formatted_short + ' (' + work.price_formatted + ')' : 'Full Day (' + work.price_formatted + ')'} position={'top'} size={'large'}>\n <em><em style={{backgroundColor: el.hex_colour, height: (work.unit === 'days' ? 100 : work.unit_value * 100 / parseFloat(this.props.common.currentUser.hours_per_day)) + '%'}}></em></em>\n </Tooltip>\n <article>\n <span className=\"title\">\n { work.project_title ? (\n <span className=\"truncate\">{work.project_title} ({el.name})</span>\n ) : (\n <span className=\"truncate\">{el.name}</span>\n )}\n { (work.state === 'invoiced' || work.state === 'paid') && (\n <Tooltip message={`This item is now locked as it has been marked as ${work.state}.`} position={'top'} size={'large'}>\n <LockIcon />\n </Tooltip>\n ) }\n </span>\n {(work.unit === 'hours' || work.note) && (<span className=\"meta\">{work.unit_value_formatted_short}{work.note && ` – ${work.note}`}</span>)}\n </article>\n <span className=\"checkbox\" data-work={work.id} onClick={this.handleWorkClick}></span>\n </React.Fragment>\n );\n })\n }\n </div>\n </React.Fragment>\n );\n\n if (clients.length > 0) {\n content = [clients,add_inline];\n } else {\n content = add;\n }\n\n return (\n <React.Fragment key={dateFns.format(this.props.day, 'YYYY-MM-DD')}>\n <div\n key={dateFns.format(this.props.day, 'YYYY-MM-DD')}\n className={this.props.classNames}\n ref={selectableRef}\n onClick={(e) => this.openOverlay(e, 'client')}\n onDragEnter={this.onDragEnter}\n onDragLeave={this.onDragLeave}\n onDragOver={this.onDragOver}\n onDrop={this.handleDrop}\n data-day={dateFns.format(this.props.day, 'YYYY-MM-DD')}\n data-select={isSelecting}>\n <span className=\"day__date\"\n onMouseEnter={this.handleDateEnter}\n onMouseLeave={this.handleDateLeave}\n data-day={dateFns.format(this.props.day, 'YYYY-MM-DD')}\n ref={dateFns.isToday(this.props.day) ? this.props.todayRef : undefined}>\n <span className=\"number\">{dateFns.format(this.props.day, 'DD')}</span>\n <span className=\"bg\">{dateFns.format(this.props.day, 'ddd')}</span>\n </span>\n <div className=\"day__work\" data-work={this.props.work.length}>\n {content}\n </div>\n </div>\n {this.state.overlay && (\n <Overlay\n overlay={this.state.overlay}\n dates={[dateFns.format(this.props.day, 'YYYY-MM-DD')]}\n work={this.state.work}\n closeOverlay={this.closeOverlay.bind(this)}></Overlay>\n )}\n </React.Fragment>\n )\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ScheduleItem);\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport ScheduleMonth from './ScheduleMonth';\nimport Overlay from './Overlay';\nimport { InView } from 'react-intersection-observer';\nimport 'intersection-observer';\nimport { history } from '../../configureStore';\nimport _ from 'lodash';\nimport { SelectableGroup } from 'react-selectable-fast';\n\nimport agent from '../../agent';\nimport {\n SCHEDULE_REMOVE,\n SCHEDULE_FORWARD,\n SCHEDULE_BACK,\n CHANGE_NEXT_MONTH,\n CHANGE_PREV_MONTH,\n MONTH_LOADED,\n OPEN_SCHEDULE_OVERLAY,\n CLOSE_SCHEDULE_OVERLAY\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state,\n days: state.schedule.days,\n months: state.months,\n clients: state.clients\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n onMove: (month, payload) => {\n dispatch({ type: CHANGE_NEXT_MONTH, month: month })\n dispatch({ type: SCHEDULE_FORWARD, month: month, payload: payload })\n },\n onHistory: (month, payload) => {\n dispatch({ type: CHANGE_PREV_MONTH, month: month })\n dispatch({ type: SCHEDULE_BACK, month: month, payload: payload })\n },\n updateSchedule: (type, activeMonth, dates) => {\n\n if (type === 'REMOVE') {\n\n var schedule = [];\n\n dates.forEach(function(item, i){\n schedule.push({id:parseInt(item)})\n })\n\n dispatch({\n type: SCHEDULE_REMOVE,\n payload: agent.Schedule.remove_multiple(schedule).then((res) => {\n if(!res.body.errors) {\n let month_name = dateFns.format(activeMonth, 'MMMM').toLowerCase()\n let year = dateFns.format(activeMonth, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: activeMonth, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n }\n return res;\n })\n })\n\n // cleanup\n schedule = null;\n\n }\n\n },\n openOverlay: () => {\n dispatch({ type: OPEN_SCHEDULE_OVERLAY });\n },\n closeOverlay: () => {\n dispatch({ type: CLOSE_SCHEDULE_OVERLAY });\n }\n});\n\nlet isScrolling;\nlet inViewMonth;\nclass ScheduleList extends React.Component {\n\n constructor(props){\n super(props);\n\n this.todayRef = React.createRef();\n this.scheduleRef = React.createRef();\n\n this.state = {\n height: 0,\n position: 128,\n scrollUp: false,\n initialLoad: true,\n scrolling: false,\n activeMonth: props.activeMonth,\n multipleDates: [],\n shift: false,\n selectedKeys: [],\n deleteKeys: [],\n selectorEnabled: true,\n overlay: false\n }\n\n this.handleSelection = this.handleSelection.bind(this);\n\n this.handleScroll = this.handleScroll.bind(this);\n this.trigger = 'initial'; // the trigger type helps us know whether to scroll the schedule or not\n\n this.addWork = this.addWork.bind(this);\n this.deleteWork = this.deleteWork.bind(this);\n\n this.handleDelete = this.handleDelete.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n\n this.backListener2 = history.listen(location => {\n if(location.pathname.indexOf('/month/') >= 0) {\n this.trigger = (location.state ? location.state.trigger : 'unknown');\n }\n })\n\n }\n\n componentWillUnmount() {\n this.backListener2();\n document.removeEventListener('keydown', this.handleShiftDown.bind(this));\n document.removeEventListener('keyup', this.handleShiftUp.bind(this));\n }\n\n componentDidMount() {\n\n let height = ReactDOM.findDOMNode(this).scrollHeight;\n inViewMonth = this.props.currentMonth;\n\n // ReactDOM.findDOMNode(this).scrollTop = 128;\n // document.querySelector('.schedule__calendar').scrollTop = 128;\n\n if (dateFns.isSameDay(this.props.activeMonth, this.props.currentMonth)) {\n\n if (this.todayRef.current) {\n\n this.todayRef.current.scrollIntoView()\n\n if( dateFns.isFirstDayOfMonth(new Date()) ) {\n\n if( dateFns.isMonday(new Date()) ) {\n this.scheduleRef.current.scrollTop -= 104;\n } else {\n this.scheduleRef.current.scrollTop -= 48;\n }\n\n } else {\n this.scheduleRef.current.scrollTop -= 96;\n }\n\n }\n\n } else {\n\n if(this.scheduleRef.current) {\n this.scheduleRef.current.scrollTop = 48;\n }\n\n\n }\n\n this.setState((state, props) => ({\n height: height,\n initialLoad: false\n }));\n\n document.addEventListener('keydown', this.handleShiftDown.bind(this));\n document.addEventListener('keyup', this.handleShiftUp.bind(this));\n\n this.setState((state, props) => ({\n selectorEnabled: true\n }));\n\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n\n if (nextProps.days !== this.props.days || nextProps.activeMonth !== this.props.activeMonth || nextState.multipleDates !== this.state.multipleDates || nextState.shift !== this.state.shift || nextState.selectedKeys !== this.state.selectedKeys || nextState.deleteKeys !== this.state.deleteKeys || nextProps.clients !== this.props.clients || nextState.overlay !== this.state.overlay) {\n return true;\n } else {\n return false;\n }\n\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if (window.outerWidth < 1024) {\n return false;\n }\n\n if ( this.props.trigger === 'POP' ) {\n\n if(this.scheduleRef.current) {\n this.scheduleRef.current.scrollTop = 48;\n }\n\n } else {\n\n if ( this.trigger === 'swipe' ) {\n\n // do nothing\n\n } else if ( this.trigger === 'history' ) {\n\n document.querySelectorAll('.schedule__calendar__month')[1].scrollIntoView();\n\n if(this.scheduleRef.current) {\n this.scheduleRef.current.scrollTop -= 48;\n }\n\n } else if ( prevProps.activeMonth !== this.props.activeMonth && this.trigger === 'swipe' ) {\n\n // do nothing\n\n } else if ( prevProps.activeMonth !== this.props.activeMonth && this.trigger === 'click' ) {\n\n if (dateFns.isSameDay(this.props.activeMonth, this.props.currentMonth)) {\n\n if (this.todayRef.current) {\n\n this.todayRef.current.scrollIntoView()\n\n if( dateFns.isFirstDayOfMonth(new Date()) ) {\n\n if( dateFns.isMonday(new Date()) ) {\n this.scheduleRef.current.scrollTop -= 104;\n } else {\n this.scheduleRef.current.scrollTop -= 48;\n }\n\n } else {\n this.scheduleRef.current.scrollTop -= 96;\n }\n\n }\n\n } else {\n\n if(this.scheduleRef.current) {\n this.scheduleRef.current.scrollTop = 48;\n }\n\n }\n\n } else {\n\n if (this.todayRef.current) {\n\n if (dateFns.isSameDay(this.props.activeMonth, this.props.currentMonth)) {\n\n this.todayRef.current.scrollIntoView()\n\n if( dateFns.isFirstDayOfMonth(new Date()) ) {\n\n if( dateFns.isMonday(new Date()) ) {\n this.scheduleRef.current.scrollTop -= 104;\n } else {\n this.scheduleRef.current.scrollTop -= 48;\n }\n\n } else {\n this.scheduleRef.current.scrollTop -= 96;\n }\n\n\n } else {\n\n if(this.scheduleRef.current) {\n this.scheduleRef.current.scrollTop = 48;\n }\n\n }\n\n } else {\n\n if (this.scheduleRef.current) {\n this.scheduleRef.current.scrollTop = 48;\n }\n\n }\n\n }\n\n }\n\n }\n\n handleSelection (selectedKeys) {\n\n if (_.size(selectedKeys) > 0 && !this.state.shift) {\n\n this.props.openOverlay()\n\n this.setState({\n overlay: 'client'\n });\n\n }\n\n \tthis.setState({\n selectedKeys: selectedKeys.map(a => a.props.selectableKey)\n });\n\n }\n\n goBack(date) {\n\n if (this.trigger !== 'click') {\n\n var that = this;\n\n setTimeout(function(){\n\n that.trigger = 'history';\n\n if (document.querySelector('.schedule__calendar')) {\n that.position = document.querySelector('.schedule__calendar').scrollTop;\n }\n\n let from = dateFns.format(date, 'DD-MM-YYYY');\n let to = dateFns.format(dateFns.endOfMonth(date), 'DD-MM-YYYY');\n\n that.props.onHistory(\n date,\n agent.Schedule.all(from,to)\n );\n\n }, 1000);\n\n }\n\n }\n\n goForward(date) {\n\n if (this.trigger !== 'click') {\n\n var that = this;\n\n setTimeout(function(){\n\n that.trigger = 'swipe';\n\n let from = dateFns.format(date, 'DD-MM-YYYY');\n let to = dateFns.format(dateFns.endOfMonth(date), 'DD-MM-YYYY');\n\n that.props.onMove(\n date,\n agent.Schedule.all(from,to)\n );\n\n }, 1000);\n\n }\n\n }\n\n\n handleScroll(event) {\n\n this.trigger = 'swipe';\n\n window.clearTimeout( isScrolling );\n isScrolling = setTimeout(() => {\n\n let sticky = document.querySelector('.sticky .month');\n\n if (sticky) {\n\n inViewMonth = dateFns.startOfMonth(dateFns.parse(sticky.getAttribute('data-month')));\n\n if (window.location.pathname === '/' || window.location.pathname.indexOf('month') === 1) {\n\n let month = dateFns.format(inViewMonth, 'MMMM');\n let year = dateFns.format(inViewMonth, 'YYYY');\n let url = '/month/' + month.toLowerCase() + '/' + year;\n\n if (this.props.history.location.pathname !== url) {\n history.push('/month/' + month.toLowerCase() + '/' + year, {\n type: 'scroll',\n trigger: 'swipe',\n position: document.querySelector('.schedule__calendar').scrollTop\n } );\n }\n\n }\n\n }\n\n if (!inViewMonth && !this.props.activeMonth) {\n inViewMonth = this.props.currentMonth;\n }\n\n }, 100);\n\n }\n\n addWork(date) {\n\n this.setState((state, props) => ({\n selectedKeys: _.uniq([...state.selectedKeys, date]).sort()\n }));\n\n }\n\n deleteWork(date) {\n\n if (_.indexOf(this.state.deleteKeys, date) >= 0) {\n\n this.setState((state, props) => ({\n deleteKeys: _.remove([...state.deleteKeys], function(person){\n return person !== date\n })\n }))\n\n } else {\n\n this.setState((state, props) => ({\n deleteKeys: _.uniq([...state.deleteKeys, date.toString()])\n }))\n\n }\n\n }\n\n handleShiftDown(event) {\n\n if(event.keyCode === 16) {\n\n this.setState((state, props) => ({\n shift: true\n }));\n\n }\n\n }\n\n handleShiftUp(event) {\n\n if(event.keyCode === 16 && !this.state.overlay) {\n\n if (_.size(this.state.selectedKeys) > 0) {\n this.props.openOverlay()\n }\n\n this.setState((state, props) => ({\n shift: false,\n overlay: _.size(this.state.selectedKeys) > 0 ? 'client' : false\n }));\n\n }\n\n }\n\n\n handleDelete() {\n\n this.props.updateSchedule('REMOVE', this.props.activeMonth, this.state.deleteKeys);\n\n this.setState((state, props) => ({\n deleteKeys: []\n }))\n\n }\n\n handleCancel() {\n\n document.querySelectorAll('.delete').forEach(function(item, i){\n item.classList.remove('delete')\n })\n\n this.setState((state, props) => ({\n deleteKeys: []\n }))\n\n }\n\n closeOverlay(e) {\n\n document.querySelectorAll('.shift').forEach(function(item, i){\n item.classList.remove('shift')\n })\n\n e.stopPropagation();\n\n this.props.closeOverlay()\n\n this.setState({\n overlay: false,\n selectedKeys: []\n });\n\n }\n\n render() {\n\n let dates = [];\n\n if (!this.props.days || (_.size(this.props.clients) === 0)) {\n return (\n <section className=\"schedule__calendar\">\n <div className=\"loading\"><div className=\"loader\"></div></div>\n <div className=\"bottom\" data-month={this.props.nextMonth}></div>\n </section>\n );\n }\n\n return (\n <React.Fragment>\n <section\n className=\"schedule__calendar\"\n ref={this.scheduleRef}\n onScroll={this.handleScroll}>\n <InView threshold={1} onChange={inView => { if(inView && window.outerWidth >= 1024 && this.trigger !== 'initial' ) { this.goBack(this.props.prevMonth) } } }>\n <div className=\"top\" data-month={this.props.prevMonth} data-view={this.state.initialLoad}>\n <div className=\"loader loader__small\"></div>\n </div>\n </InView>\n <div style={{minHeight: '3000px'}}>\n <SelectableGroup\n className=\"selector\"\n onSelectionFinish={this.handleSelection}\n selectOnClick={false}\n tolerance={10}\n resetOnStart={true}\n ignoreList={['[draggable]']}>\n {this.props.days.map((date, index) => {\n\n dates.push(date);\n\n if (dateFns.isLastDayOfMonth(date.day)) {\n dates = [];\n }\n\n if (dateFns.isFirstDayOfMonth(date.day)) {\n return (\n <ScheduleMonth\n key={dates[0].day}\n month={dates[0].day}\n dates={dates}\n activeMonth={this.props.activeMonth}\n addWork={this.addWork}\n deleteWork={this.deleteWork}\n multipleDates={this.state.multipleDates}\n selectedKeys={this.state.selectedKeys}\n deleteKeys={this.state.deleteKeys}\n todayRef={this.todayRef} />\n )\n }\n\n return null\n\n })}\n </SelectableGroup>\n </div>\n <InView threshold={1} onChange={inView => { if(inView) { this.goForward(this.props.nextMonth) } } }>\n <div className=\"bottom\" data-month={this.props.nextMonth}>\n <div className=\"loader loader__small\"></div>\n </div>\n </InView>\n </section>\n\n { (_.size(this.state.deleteKeys) >= 1) &&\n (\n ReactDOM.createPortal(\n <React.Fragment>\n <button onClick={this.handleDelete}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path fill=\"#e84c85\" d=\"M2,6v8c0,1.1,0.9,2,2,2h8c1.1,0,2-0.9,2-2V6H2z\"></path> <path fill=\"#e84c85\" d=\"M12,3V1c0-0.6-0.4-1-1-1H5C4.4,0,4,0.4,4,1v2H0v2h16V3H12z M10,3H6V2h4V3z\"></path></svg>\n <span>Delete</span>\n </button>\n <button onClick={this.handleCancel}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path fill=\"#e84c85\" d=\"M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.6,8-8S12.4,0,8,0z M8,2c1.3,0,2.5,0.4,3.5,1.1l-8.4,8.4 C2.4,10.5,2,9.3,2,8C2,4.7,4.7,2,8,2z M8,14c-1.3,0-2.5-0.4-3.5-1.1l8.4-8.4C13.6,5.5,14,6.7,14,8C14,11.3,11.3,14,8,14z\"></path></svg>\n <span>Cancel</span>\n </button>\n </React.Fragment>,\n document.querySelector('span.quick__note__inline span.actions')\n )\n )\n }\n {(this.props.overlay || this.state.overlay) && (\n <Overlay\n overlay=\"client\"\n dates={this.state.selectedKeys}\n closeOverlay={this.closeOverlay.bind(this)}></Overlay>\n )}\n </React.Fragment>\n )\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ScheduleList);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ReactDOM from 'react-dom';\nimport dateFns from 'date-fns';\n\nimport agent from '../../agent';\nimport {\n SCHEDULE_SUMMARY,\n DESTROY_SCHEDULE_SUMMARY\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state,\n summary: state.schedule.summary\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n getSummary: (from,to) => {\n dispatch({\n type: SCHEDULE_SUMMARY,\n payload: agent.Schedule.summary(from,to).then((res) => {\n if(!res.body.errors) {\n //dispatch({ type: MONTH_LOADED, month: activeMonth, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n }\n return res;\n })\n })\n },\n destroySummary: () => {\n dispatch({ type: DESTROY_SCHEDULE_SUMMARY })\n }\n});\n\nclass ScheduleWeek extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n displayTooltip: false\n }\n this.hideTooltip = this.hideTooltip.bind(this)\n this.showTooltip = this.showTooltip.bind(this)\n }\n\n hideTooltip (event) {\n\n this.props.destroySummary();\n\n this.setState({\n displayTooltip: false,\n top: null\n })\n\n }\n\n showTooltip (event) {\n\n this.props.getSummary(\n dateFns.format(this.props.date, 'DD-MM-YYYY'),\n dateFns.format(dateFns.endOfWeek(this.props.date, {weekStartsOn: 1}), 'DD-MM-YYYY')\n );\n\n var bounds = event.currentTarget.getBoundingClientRect();\n var y = bounds.top + bounds.height + 8;\n\n this.setState({\n displayTooltip: true,\n top: y\n })\n\n }\n\n render() {\n let message = this.props.message\n let position = this.props.position\n let size = this.props.size\n\n return (\n <div className={dateFns.isFirstDayOfMonth(this.props.date) ? 'week monthStart' : 'week'}>\n <div>\n <span>{dateFns.format(this.props.date, 'DD')}–{dateFns.format(dateFns.endOfWeek(this.props.date, {weekStartsOn: 1}), 'DD MMMM')}</span>\n {this.state.displayTooltip &&\n (\n ReactDOM.createPortal(\n <div \n className={`schedule_summary`}\n style={{top: this.state.top}}>\n {this.props.summary ? (\n <>\n {this.props.summary.clients.map((client, index) => {\n return(\n <div className=\"schedule_summary__item\">\n <div>{client.name}</div>\n <div className=\"data\">{client.total_time_formatted} ({client.total_price_formatted})</div>\n </div>\n )\n })}\n {this.props.summary.total_time_formatted ? (\n <div className=\"schedule_summary__footer\">\n <div>Total</div>\n <div class=\"data\">{this.props.summary.total_time_formatted} ({this.props.summary.total_price_formatted})</div>\n </div>\n ) : (\n <div className=\"schedule_summary__item\">\n <div className=\"empty\">No work added</div>\n </div>\n )}\n </>\n ) : (\n <div className=\"loader loader__small\"></div>\n )}\n </div>,\n document.querySelector('main')\n )\n )\n }\n <button\n onMouseOver={this.showTooltip}\n onMouseLeave={this.hideTooltip}>\n <span>Week Summary</span>\n </button>\n </div>\n </div>\n )\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ScheduleWeek);\n","const convertToHHMM = (decimal) => {\n let total = decimal % 1\n if (total > 0) {\n var hrs = parseInt(Number(decimal));\n var min = Math.round((Number(decimal)-hrs) * 60);\n return hrs+'h '+min+'m ';\n } else {\n return decimal +'h '\n }\n};\n\nexport default convertToHHMM;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport ScheduleItem from './ScheduleItem';\nimport ScheduleWeek from './ScheduleWeek';\nimport 'intersection-observer';\nimport Sticky from 'react-sticky-el';\nimport { createSelectable } from 'react-selectable-fast';\nimport _ from 'lodash';\nimport classNames from 'classnames/bind';\nimport convertToHHMM from '../../support/time';\n\nconst mapStateToProps = state => (\n {\n ...state\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n});\n\nconst SelectableComponent = createSelectable(ScheduleItem);\n\nclass ScheduleMonth extends React.Component {\n\n constructor(props){\n super(props);\n\n this.todayRef = React.createRef();\n this.state = {\n overlay: false\n }\n\n }\n\n mouseEnter() {\n this.setState({overlay:true})\n }\n\n mouseLeave() {\n this.setState({overlay:false})\n }\n\n render() {\n\n let booked;\n let consecutive_client;\n let previous;\n let previous_project;\n let previous_length;\n let holiday;\n let blackout;\n\n return (\n <React.Fragment>\n <div className=\"schedule__calendar__month\" data-month={dateFns.format(this.props.month, 'MMMM YYYY')}>\n <Sticky hideOnBoundaryHit={true} boundaryElement=\".schedule__calendar__month\" scrollElement=\".schedule__calendar\" topOffset={0} bottomOffset={0}>\n <div className=\"month\" key={dateFns.format(this.props.day, 'x')} data-month={this.props.month}>\n <h3>{dateFns.format(this.props.month, 'MMMM YYYY')} Schedule</h3>\n <span className=\"quick__note__inline\">\n <span className=\"actions\"></span>\n <span className=\"helper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n <path fill=\"#FFF\" d=\"M5,12.5857864 L5,5 C5,2.23871525 7.23871525,0 10,0 L14,0 C14.5522847,0 15,0.44771525 15,1 C15,1.55228475 14.5522847,2 14,2 L10,2 C8.34328475,2 7,3.34328475 7,5 L7,12.5857864 L10.2928932,9.29289322 C10.6834175,8.90236893 11.3165825,8.90236893 11.7071068,9.29289322 C12.0976311,9.68341751 12.0976311,10.3165825 11.7071068,10.7071068 L6.70710678,15.7071068 C6.31658249,16.0976311 5.68341751,16.0976311 5.29289322,15.7071068 L0.292893219,10.7071068 C-0.0976310729,10.3165825 -0.0976310729,9.68341751 0.292893219,9.29289322 C0.683417511,8.90236893 1.31658249,8.90236893 1.70710678,9.29289322 L5,12.5857864 Z\"/>\n </svg>\n <span>Click on a day to schedule some work</span>\n </span>\n </span>\n </div>\n </Sticky>\n {this.props.dates.map((date, index) => {\n let day = date.day;\n let top = dateFns.isSameDay(day, this.props.schedule.activeMonth);\n let work = [];\n let hours_per_day = parseFloat(this.props.common.currentUser.hours_per_day);\n let hours = hours_per_day;\n\n if ( this.props.schedule.work ) {\n\n // calculate the work booked for this day\n work = _.values(_.pickBy(this.props.schedule.work,function(value, key){\n return dateFns.isSameDay(day, dateFns.parse(value.date))\n }));\n\n // calculate how many hours left in the day (7 available in total)\n if (!_.isEmpty(work)) {\n hours = _.sumBy(work, function(o) {\n if (o.unit === 'hours') {\n return parseFloat(o.unit_value);\n } else {\n return 24;\n }\n })\n if (hours > 0) {\n hours = hours_per_day - hours\n }\n if (hours < 0) {\n hours = 0\n }\n }\n\n }\n\n if ( this.props.schedule.blackouts ) {\n\n blackout = this.props.schedule.blackouts.find(blackout => {\n return dateFns.isSameDay(day, dateFns.parse(blackout.date))\n })\n\n }\n\n if ( work.length >= 1 ) {\n\n booked = true;\n consecutive_client = false;\n\n if ( work.length === 1 && work[0].client === previous && work[0].project_id === previous_project && previous_length === 1 ) {\n consecutive_client = true;\n }\n\n previous = work[0].client;\n previous_project = work[0].project_id;\n holiday = work[0].holiday;\n previous_length = work.length;\n\n\n } else {\n\n booked = false;\n consecutive_client = false;\n previous = '';\n previous_project = undefined;\n previous_length = 0;\n holiday = false;\n\n }\n\n let selected = this.props.selectedKeys.indexOf(dateFns.format(date.day, 'YYYY-MM-DD')) > -1 || this.props.multipleDates.indexOf(dateFns.format(date.day, 'YYYY-MM-DD')) > -1;\n let first = this.props.selectedKeys.indexOf(dateFns.format(date.day, 'YYYY-MM-DD')) === 0;\n let last = _.size(this.props.selectedKeys) > 0 ? this.props.selectedKeys.indexOf(dateFns.format(date.day, 'YYYY-MM-DD')) === this.props.selectedKeys.length-1 : false;\n let after = dateFns.format(date.day, 'YYYY-MM-DD') === dateFns.format(dateFns.addDays(dateFns.parse(this.props.selectedKeys[this.props.selectedKeys.length-1]), 1), 'YYYY-MM-DD');\n\n return (\n <>\n {dateFns.isMonday(date.day) &&\n <ScheduleWeek date={date.day}/>\n }\n <SelectableComponent\n key={index}\n selectableKey={dateFns.format(date.day, 'YYYY-MM-DD')}\n day={day}\n top={top}\n work={work}\n holiday={holiday}\n booked={booked}\n blackout={blackout}\n trigger={this.props.trigger}\n activeMonth={this.props.activeMonth}\n consecutive_client={consecutive_client}\n addWork={this.props.addWork}\n deleteWork={this.props.deleteWork}\n deleteKeys={this.props.deleteKeys}\n multipleDates={this.props.multipleDates}\n hours={convertToHHMM(hours)}\n todayRef={this.props.todayRef}\n classNames={\n classNames({\n day: true,\n highlighted: top,\n selected: dateFns.isToday(day),\n weekend: dateFns.isWeekend(day) || _.size(blackout) >= 1,\n weekStart: dateFns.isMonday(day),\n weekFinish: dateFns.isSunday(day),\n booked: _.size(work) >= 1,\n holiday: holiday,\n consecutive_client: (hours === 0 && ((consecutive_client && !dateFns.isFirstDayOfMonth(day)) || selected)),\n shift: selected,\n first: first,\n last: last,\n after: after,\n monthStart: dateFns.isFirstDayOfMonth(day),\n monthEnd: dateFns.isLastDayOfMonth(day),\n hoursFree: hours >= 1,\n invoiced: !_.isEmpty(work[0]) && (work[0].state === 'invoiced'),\n paid: !_.isEmpty(work[0]) && (work[0].state === 'paid')\n })\n } />\n </>\n )\n\n })}\n <div className=\"boundary\"></div>\n </div>\n </React.Fragment>\n )\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ScheduleMonth);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport dateFns from 'date-fns';\nimport _ from 'lodash';\nimport Tooltip from '../Tooltip';\nimport { Info } from '../Info';\n\nconst mapStateToProps = state => (\n {\n token: state.common.token,\n schedule: state.schedule,\n months: state.months,\n activeMonth: state.common.activeMonth,\n currentMonth: state.common.currentMonth,\n nextMonth: state.common.nextMonth,\n prevMonth: state.common.prevMonth,\n currentUser: state.common.currentUser,\n locale: state.common.locale\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n});\n\nclass Month extends React.Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n notifications: true,\n tab: 'clients'\n }\n\n }\n\n clearNotifications(e) {\n\n e.stopPropagation();\n\n this.setState(prevState => ({\n notifications: !prevState.notifications\n }));\n\n }\n\n switchTabs(e, tab) {\n\n e.stopPropagation();\n\n this.setState({\n ...this.state, // needed?\n tab: tab\n });\n\n }\n\n render() {\n\n if (!this.props.nextMonth || !this.props.months.data) {\n return (\n <div className=\"loader top-50\"></div>\n );\n }\n\n let in_past = dateFns.isPast(dateFns.endOfMonth(this.props.months.activeMonth));\n let productivity = 0;\n let days_empty = 0;\n let revenue_percentage = 0;\n let revenue_missed_percentage = 0;\n let revenue_target_string;\n let total_earning_potential_string;\n let monthly_revenue_target_string;\n let chart = [];\n let standard_day_rate_string = '£' + (this.props.currentUser.standard_day_rate).toLocaleString(this.props.locale, {style: \"decimal\", minimumFractionDigits: 1});\n\n if (this.props.months.data) {\n\n productivity = this.props.months.data.productivity;\n total_earning_potential_string = this.props.months.data.total_earning_potential_string;\n revenue_percentage = this.props.months.data.revenue_percentage;\n revenue_missed_percentage = this.props.months.data.revenue_missed_percentage;\n monthly_revenue_target_string = this.props.months.data.monthly_revenue_target_string;\n revenue_target_string = this.props.months.data.revenue_target_string;\n\n if ( productivity >= 100 ) {\n\n chart['empty'] = '0%';\n chart['available'] = '0%';\n\n } else {\n\n days_empty = this.props.months.data.unworked_days\n\n chart['empty'] = (days_empty) ? _.round((100 * days_empty) / this.props.months.data.maximum_hours) + '%' : '0%';\n chart['available'] = (this.props.months.data.available_hours) ? _.round((100 * this.props.months.data.available_hours) / this.props.months.data.maximum_hours) + '%' : '0%';\n\n }\n\n chart['booked'] = productivity + '%';\n chart['holiday'] = (this.props.months.data.holidays) ? _.round((100 * this.props.months.data.holidays) / this.props.months.data.maximum_hours) + '%' : '0%';\n\n if (revenue_percentage > 100 ) {\n\n chart['revenue'] = _.round(100/revenue_percentage*100);\n chart['revenue_potential'] = 0;\n chart['revenue_missed'] = 0;\n chart['revenue_exceeded'] = 100 - chart['revenue'];\n\n } else if (revenue_percentage === 100 ) {\n\n chart['revenue'] = 100;\n chart['revenue_potential'] = 0;\n chart['revenue_missed'] = 0;\n chart['revenue_exceeded'] = 0;\n\n } else {\n\n chart['revenue'] = revenue_percentage;\n chart['revenue_missed'] = revenue_missed_percentage;\n chart['revenue_potential'] = 100 - chart['revenue'] - chart['revenue_missed'];\n chart['revenue_exceeded'] = 0;\n\n }\n\n }\n\n const header =\n <header>\n <h2>{dateFns.format(this.props.activeMonth, 'MMMM ')}\n <Link to={{\n pathname: '/year/' + this.props.months.data.business_year,\n state: {\n trigger: 'click'\n }\n }}>{dateFns.format(this.props.activeMonth, 'YYYY')}</Link>\n </h2>\n <span className=\"month__prev\">\n <Tooltip message={dateFns.format(dateFns.subMonths(this.props.activeMonth, 1), 'MMM YYYY')} position={'bottom'} size={'large'}>\n <Link className=\"icon\" to={{\n pathname: '/month/' + dateFns.format(dateFns.subMonths(this.props.activeMonth, 1), 'MMMM/YYYY').toLowerCase(),\n state: {\n trigger: 'click'\n }\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><g strokeWidth=\"2\" fill=\"#e12323\" stroke=\"#e12323\"><polyline fill=\"none\" stroke=\"#e12323\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\" points=\"11.5,0.5 4,8 11.5,15.5 \"></polyline></g></svg>\n </Link>\n </Tooltip>\n </span>\n <span className=\"month__today\">\n <Tooltip message={`Today`} position={'bottom'} size={'large'}>\n <Link className=\"icon\" to={{\n pathname: '/month/' + dateFns.format(this.props.currentMonth, 'MMMM/YYYY').toLowerCase(),\n state: {\n trigger: 'click'\n }\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><g strokeWidth=\"2\" fill=\"#e12323\" stroke=\"#e12323\"><circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"none\" stroke=\"#e12323\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></circle></g></svg>\n </Link>\n </Tooltip>\n </span>\n <span className=\"month__next last\">\n <Tooltip message={dateFns.format(dateFns.addMonths(this.props.activeMonth, 1), 'MMM YYYY')} position={'bottom'} size={'large'}>\n <Link className=\"icon\" to={{\n pathname: '/month/' + dateFns.format(dateFns.addMonths(this.props.activeMonth, 1), 'MMMM/YYYY').toLowerCase(),\n state: {\n trigger: 'click'\n }\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><g strokeWidth=\"2\" fill=\"#e12323\" stroke=\"#e12323\"><polyline fill=\"none\" stroke=\"#e12323\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\" points=\"4.5,0.5 12,8 4.5,15.5 \"></polyline></g></svg>\n </Link>\n </Tooltip>\n </span>\n </header>\n\n return (\n <React.Fragment>\n\n { header }\n\n <section className=\"component__clients__sidebar\">\n\n <div className=\"progress\">\n\n <header>\n <h3>Revenue</h3>\n <span>{ (this.props.months.data) ? this.props.months.data.amount_revenue_string : 0 }</span>\n </header>\n\n <div className=\"bar\">\n <div className=\"bar__exceeded\" style={{width: this.props.months.data.amount_worked_percentage + '%' }}>\n <Tooltip message={`${this.props.months.data.amount_worked_string} earned so far this month`} position={'top'} size={'small'}></Tooltip>\n </div>\n <div className=\"bar__revenue\" style={{width: this.props.months.data.amount_agreed_percentage + '%' }}>\n <Tooltip message={`${this.props.months.data.amount_agreed_string} more expected this month`} position={'top'} size={'small'}></Tooltip>\n </div>\n <div className=\"bar__empty\" style={{width: chart['revenue_potential'] + '%' }}>\n <Tooltip message={`${revenue_target_string} short of your target`} position={'top'} size={'small'}></Tooltip>\n </div>\n </div>\n\n {this.props.months.data.monthly_revenue_target ?\n <small>{revenue_percentage}% of Monthly Revenue Target <Tooltip message={`${in_past ? 'You earned' : 'You\\'re on track to earn' } ${this.props.months.data.amount_revenue_string} of your ${monthly_revenue_target_string} monthly target.`} position={'top'} size={'large'}><Info /></Tooltip></small>\n :\n <small>{revenue_percentage}% of Revenue Potential <Tooltip message={`${in_past ? 'You earned' : 'You\\'re on track to earn' } ${this.props.months.data.amount_revenue_string} of ${total_earning_potential_string} potential revenue this month based on your standard day rate of ${standard_day_rate_string}`} position={'top'} size={'large'}><Info /></Tooltip></small>\n }\n </div>\n\n <div className=\"progress\">\n\n <header>\n <h3>Productivity</h3>\n <span>{productivity}%</span>\n </header>\n\n <div className=\"bar\">\n <div className=\"bar__booked\" style={{width: chart['booked'] }}>\n <Tooltip message={`${this.props.months.data.dates_booked_count_string} booked`} position={'top'} size={'small'}></Tooltip>\n </div>\n <div className=\"bar__holiday\" style={{width: chart['holiday'] }}>\n <Tooltip message={`${this.props.months.data.holidays} days holiday`} position={'top'} size={'small'}></Tooltip>\n </div>\n <div className=\"bar__available\" style={{width: chart['available'] }}>\n <Tooltip message={`${this.props.months.data.available_time} free`} position={'top'} size={'small'}></Tooltip>\n </div>\n <div className=\"bar__empty\" style={{width: chart['empty'] }}>\n <Tooltip message={`${this.props.months.data.unworked_days} days not worked`} position={'top'} size={'small'}></Tooltip>\n </div>\n </div>\n\n {in_past &&\n <small>You worked {this.props.months.data.dates_booked_count_string} <Tooltip message={`There were ${this.props.months.data.total_workable_days} available days this month`} position={'top'} size={'large'}><Info /></Tooltip></small>\n }\n {!in_past && !_.isEmpty(this.props.months.data.available_time) &&\n <small>You have {this.props.months.data.available_time} free <Tooltip message={`You've booked ${this.props.months.data.dates_booked_count_string} of ${this.props.months.data.total_workable_days} available days this month`} position={'top'} size={'large'}><Info /></Tooltip></small>\n }\n\n </div>\n\n {(this.props.months.data.clients.length > 0) && (\n\n <div className=\"progress progress__list\">\n\n <header>\n\n {this.props.months.data.projects.length > 0 ? (\n <div className=\"options\">\n <div className=\"list\">\n <button\n className={this.state.tab === 'clients' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'clients')}>Clients</button>\n <button\n className={this.state.tab === 'projects' ? 'selected' : ''}\n onClick={(e) => this.switchTabs(e, 'projects')}>Projects</button>\n </div>\n </div>\n ) : (\n\n <h3 className=\"single\">Clients</h3>\n\n )}\n\n </header>\n\n {this.state.tab === 'projects' ? (\n\n this.props.months.data.projects.map(function(project, i){\n\n let next_work_at = project.next_work_at ? `Next working on <br/> ${project.next_work_at}` : 'No future work scheduled';\n\n return (\n <div className=\"item\" key={i}>\n <div className=\"item__info\">\n <span className=\"title\">\n <Link to={`/projects/${project.slug}`}>\n <Tooltip message={ next_work_at } position={'top'} size={'small'}>{ project.name }</Tooltip>\n </Link>\n <small>({project.client_name})</small>\n </span>\n <span className=\"value\">{ project.amount_worked } ({ project.revenue }{ (project.revenue != project.revenue_in_base_currency) ? `/${project.revenue_in_base_currency}` : '' })</span>\n </div>\n </div>\n )\n\n })\n\n ) : (\n\n this.props.months.data.clients.map(function(client, i){\n\n let next_work_at = client.next_work_at ? `Next working on <br/> ${client.next_work_at}` : 'No future work scheduled';\n\n return (\n <div className=\"item\" key={i}>\n <div className=\"item__info\">\n <span className=\"color\" style={{backgroundColor: client.hex_colour }}></span>\n <span className=\"title\">\n <Link to={`/clients/${client.slug}`}>\n <Tooltip message={ next_work_at } position={'top'} size={'small'}>{ client.name }</Tooltip>\n </Link>\n </span>\n <span className=\"value\">{ client.amount_worked } ({ client.revenue }{ (client.revenue != client.revenue_in_base_currency) ? `/${client.revenue_in_base_currency}` : '' })</span>\n </div>\n </div>\n )\n\n })\n\n )}\n\n {this.props.months.data.holidays === -1 &&\n <React.Fragment>\n <hr/>\n <div className=\"item\">\n <div className=\"item__info\">\n <span className=\"color\"></span>\n <span className=\"title\">Holiday</span>\n <span className=\"value\">{this.props.months.data.holidays} Day{this.props.months.data.holidays > 1 && 's' }</span>\n </div>\n </div>\n </React.Fragment>\n }\n\n </div>\n\n )}\n\n <div className=\"notifications\">\n\n { (productivity >= 100) &&\n <div className={this.state.notifications ? 'alert' : 'alert alert__hidden'}>\n <div className=\"alert__title warning\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path d=\"M23.707,6.736,17.263.293A1,1,0,0,0,16.556,0H7.444a1,1,0,0,0-.707.293L.293,6.736A1,1,0,0,0,0,7.443v9.114a1,1,0,0,0,.293.707l6.444,6.443A1,1,0,0,0,7.444,24h9.112a1,1,0,0,0,.707-.293l6.444-6.443A1,1,0,0,0,24,16.557V7.443A1,1,0,0,0,23.707,6.736ZM13.645,5,13,14H11l-.608-9ZM12,20a2,2,0,1,1,2-2A2,2,0,0,1,12,20Z\" fill=\"#141414\"></path></g></svg>\n <h3>You're overbooked!</h3>\n <span onClick={this.clearNotifications.bind(this)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n <p>If you can, we recommend moving some work to next month to make sure you're not overbooked.</p>\n </div>\n </div>\n }\n\n { (productivity > 80 && productivity < 100) &&\n <div className={this.state.notifications ? 'alert' : 'alert alert__hidden'}>\n <div className=\"alert__title warning\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path d=\"M21.855,18.482A12.85,12.85,0,0,1,20,11.994V8.006a8,8,0,0,0-16,0v3.982a12.851,12.851,0,0,1-1.855,6.494A1,1,0,0,0,3,20H21a1,1,0,0,0,.855-1.518Z\" fill=\"#141414\"></path> <path d=\"M13.007,23.825a3,3,0,0,0,1.819-1.819H9.174A3,3,0,0,0,13.007,23.825Z\"></path></g></svg>\n <h3>On the limit</h3>\n <span onClick={this.clearNotifications.bind(this)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n <p>Be careful taking on anymore big projects this month, you're close to overbooking yourself for {dateFns.format(this.props.activeMonth, 'MMMM YYYY')}.</p>\n </div>\n </div>\n }\n\n { (this.props.months.data.revenue_percentage < 60 && this.props.months.data.revenue_percentage > 1) &&\n <div className={this.state.notifications ? 'alert' : 'alert alert__hidden'}>\n <div className=\"alert__title\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path d=\"M23.58.424A1,1,0,0,0,22.819.13C8.791.862,3.609,13.358,3.559,13.484a1,1,0,0,0,.22,1.08l5.657,5.657a1,1,0,0,0,1.085.218c.125-.051,12.554-5.291,13.348-19.253A1,1,0,0,0,23.58.424Zm-8.166,10.99a2,2,0,1,1,0-2.828A2,2,0,0,1,15.414,11.414Z\" fill=\"#141414\"></path> <path d=\"M1.113,18.844a2.844,2.844,0,1,1,4.022,4.022C4.024,23.977,0,24,0,24S0,19.954,1.113,18.844Z\"></path> <path id=\"color-2\" d=\"M10.357,2.341A8.911,8.911,0,0,0,2.522,4.825a9.084,9.084,0,0,0-1.384,1.8,1,1,0,0,0,.155,1.215l1.989,1.99A26.623,26.623,0,0,1,10.357,2.341Z\" fill=\"#141414\"></path> <path id=\"color-3\" d=\"M21.659,13.643a8.911,8.911,0,0,1-2.484,7.835,9.084,9.084,0,0,1-1.8,1.384,1,1,0,0,1-1.215-.155l-1.99-1.989A26.623,26.623,0,0,0,21.659,13.643Z\" fill=\"#141414\"></path></g></svg>\n <h3>Good start {this.props.currentUser.first_name}!</h3>\n <span onClick={this.clearNotifications.bind(this)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n <p>You need to earn another {this.props.months.data.target_remaining_formatted} ({this.props.months.data.target_remaining_days_formatted} of work) to meet your monthly revenue target of {this.props.currentUser.monthly_revenue_target_formatted}.</p>\n </div>\n </div>\n }\n\n { (this.props.months.data.revenue_percentage > 60 && this.props.months.data.revenue_percentage < 100 && this.state.notifications) &&\n <div className={this.state.notifications ? 'alert' : 'alert alert__hidden'}>\n <div className=\"alert__title\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path fill=\"#141414\" d=\"M17,16c-2.951,0-5.403-0.639-7-1.712c0,0.746,0,1.238,0,1.712c0,1.657,3.134,3,7,3s7-1.343,7-3 c0-0.474,0-0.966,0-1.712C22.403,15.361,19.951,16,17,16z\"></path> <path fill=\"#141414\" d=\"M17,21c-2.951,0-5.403-0.639-7-1.712c0,0.746,0,1.238,0,1.712c0,1.657,3.134,3,7,3s7-1.343,7-3 c0-0.474,0-0.966,0-1.712C22.403,20.361,19.951,21,17,21z\"></path> <ellipse fill=\"#141414\" cx=\"17\" cy=\"11\" rx=\"7\" ry=\"3\"></ellipse> <ellipse cx=\"7\" cy=\"3\" rx=\"7\" ry=\"3\"></ellipse> <path d=\"M8,17.973C7.673,17.989,7.341,18,7,18c-2.951,0-5.403-0.639-7-1.712C0,17.034,0,17.526,0,18 c0,1.657,3.134,3,7,3c0.34,0,0.673-0.014,1-0.034V17.973z\"></path> <path d=\"M8,12.973C7.673,12.989,7.341,13,7,13c-2.951,0-5.403-0.639-7-1.712C0,12.034,0,12.526,0,13 c0,1.657,3.134,3,7,3c0.34,0,0.673-0.014,1-0.034V12.973z\"></path> <path d=\"M9.92,7.766C9.018,7.916,8.042,8,7,8C4.049,8,1.597,7.361,0,6.288C0,7.034,0,7.526,0,8 c0,1.657,3.134,3,7,3c0.341,0,0.674-0.014,1.003-0.034C8.015,9.703,8.71,8.606,9.92,7.766z\"></path></g></svg>\n <h3>Nearly there {this.props.currentUser.first_name}!</h3>\n <span onClick={this.clearNotifications.bind(this)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n <p>You need to earn another {this.props.months.data.target_remaining_formatted} ({this.props.months.data.target_remaining_days_formatted} of work) to meet your monthly revenue target of {this.props.currentUser.monthly_revenue_target_formatted}.</p>\n </div>\n </div>\n }\n\n { (this.props.months.data.revenue_percentage >= 100 && this.state.notifications) &&\n <div className={this.state.notifications ? 'alert' : 'alert alert__hidden'}>\n <div className=\"alert__title\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path fill=\"#141414\" d=\"M6.172,14.561C6.358,14.835,6.668,15,7,15h10c0.332,0,0.642-0.165,0.828-0.439s0.224-0.624,0.101-0.932l-2-5 C15.776,8.249,15.409,8,15,8H9C8.591,8,8.224,8.249,8.071,8.629l-2,5C5.948,13.937,5.986,14.286,6.172,14.561z\"></path> <rect y=\"11\" width=\"4\" height=\"2\"></rect> <rect x=\"3.929\" y=\"2.929\" transform=\"matrix(0.707 -0.7072 0.7072 0.707 -2.0415 4.93)\" width=\"2\" height=\"4\"></rect> <rect x=\"11\" width=\"2\" height=\"4\"></rect> <rect x=\"17.071\" y=\"3.929\" transform=\"matrix(0.7072 -0.707 0.707 0.7072 2.099 14.926)\" width=\"4\" height=\"2\"></rect> <rect x=\"20\" y=\"11\" width=\"4\" height=\"2\"></rect> <path fill=\"#141414\" d=\"M23.929,21.629l-2-5C21.776,16.249,21.409,16,21,16h-6c-0.409,0-0.776,0.249-0.929,0.629l-2,5 C12.023,21.749,12,22,12,22c0-0.125-0.023-0.251-0.071-0.371l-2-5C9.776,16.249,9.409,16,9,16H3c-0.409,0-0.776,0.249-0.929,0.629 l-2,5c-0.123,0.308-0.085,0.657,0.101,0.932S0.668,23,1,23h22c0.332,0,0.642-0.165,0.828-0.439S24.052,21.937,23.929,21.629z\"></path></g></svg>\n <h3>Awesome job {this.props.currentUser.first_name}!</h3>\n <span onClick={this.clearNotifications.bind(this)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n { in_past ?\n <p>You smashed your monthly revenue target for {dateFns.format(this.props.activeMonth, 'MMMM YYYY')} by {this.props.months.data.revenue_exceeded_string}!</p>\n :\n <p>You're on target to smash your monthly revenue target for {dateFns.format(this.props.activeMonth, 'MMMM YYYY')} by {this.props.months.data.revenue_exceeded_string}</p>\n }\n </div>\n </div>\n }\n\n </div>\n\n </section>\n\n </React.Fragment>\n )\n\n }\n\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Month);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport { Link } from 'react-router-dom';\nimport ScheduleList from './ScheduleList';\nimport Month from './Month';\nimport { history } from '../../configureStore';\n\nimport agent from '../../agent';\nimport {\n SCHEDULE_LOADED,\n SCHEDULE_UNLOADED,\n MONTH_LOADED,\n SWITCH_MONTH,\n CHANGE_PREV_MONTH,\n CHANGE_NEXT_MONTH,\n LOAD_DAYS\n} from '../../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.schedule,\n token: state.common.token,\n activeMonth: state.common.activeMonth,\n nextMonth: state.common.nextMonth,\n prevMonth: state.common.prevMonth,\n currentMonth: state.common.currentMonth,\n clients: state.clients,\n projects: state.projects\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n onLoad: (month,payload) => {\n dispatch({ type: CHANGE_PREV_MONTH, month: month })\n dispatch({ type: CHANGE_NEXT_MONTH, month: dateFns.addMonths(month,1) })\n dispatch({ type: LOAD_DAYS, month: month })\n dispatch({ type: SCHEDULE_LOADED, payload: payload })\n let month_name = dateFns.format(month, 'MMMM').toLowerCase()\n let year = dateFns.format(month, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: month, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n },\n onUnload: () =>\n dispatch({ type: SCHEDULE_UNLOADED }),\n loadDays: (month) => {\n dispatch({ type: LOAD_DAYS, month: month })\n dispatch({ type: CHANGE_PREV_MONTH, month: month })\n dispatch({ type: CHANGE_NEXT_MONTH, month: dateFns.addMonths(month,1) })\n },\n switchMonth: (month) => {\n dispatch({ type: SWITCH_MONTH, month: month })\n },\n loadMonth: (month) => {\n let month_name = dateFns.format(month, 'MMMM').toLowerCase()\n let year = dateFns.format(month, 'YYYY').toLowerCase()\n dispatch({ type: MONTH_LOADED, month: month, month_string: month_name + '-' + year, payload: agent.Month.show(month_name, year) })\n },\n loadSchedule: (payload) => {\n dispatch({ type: SCHEDULE_LOADED, payload: payload })\n }\n});\n\nconst Title = (props) => {\n\n let title = 'Schedule';\n\n return (\n <header>\n <h2>{title}</h2>\n <span className=\"schedule__reset\">\n <Link to={{\n pathname: '/month/' + dateFns.format(props.currentMonth, 'MMMM/YYYY').toLowerCase(),\n state: {\n trigger: 'click'\n }\n }}>\n <button>Go to Today</button></Link>\n </span>\n </header>\n );\n}\n\nclass Schedule extends React.Component {\n\n constructor(props){\n super(props);\n\n this.trigger = 'PUSH';\n\n }\n\n componentWillMount() {\n\n var months = {\n 'january' : '01',\n 'february' : '02',\n 'march' : '03',\n 'april' : '04',\n 'may' : '05',\n 'june' : '06',\n 'july' : '07',\n 'august' : '08',\n 'september' : '09',\n 'october' : '10',\n 'november' : '11',\n 'december' : '12'\n }\n\n let url_date = window.location.pathname.match(/\\/month\\/(.*)\\/([0-9]{4})/);\n let date = dateFns.parse(url_date[2] + '-' + months[url_date[1]] + '-01');\n let nextMonth = dateFns.startOfMonth(dateFns.addMonths(date,1));\n\n this.props.switchMonth(date);\n this.props.loadMonth(date);\n this.props.loadDays(date);\n this.props.loadSchedule(\n agent.Schedule.all(\n dateFns.format(date, 'DD-MM-YYYY'),\n dateFns.format(dateFns.endOfMonth(nextMonth), 'DD-MM-YYYY')\n )\n );\n\n }\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n componentDidMount() {\n }\n\n componentDidUpdate(prevProps) {\n\n var months = {\n 'january' : '01',\n 'february' : '02',\n 'march' : '03',\n 'april' : '04',\n 'may' : '05',\n 'june' : '06',\n 'july' : '07',\n 'august' : '08',\n 'september' : '09',\n 'october' : '10',\n 'november' : '11',\n 'december' : '12'\n }\n\n if(prevProps.match.url !== this.props.match.url) {\n \n let url_date = this.props.location.pathname.match(/\\/month\\/(.*)\\/([0-9]{4})/);\n let date = dateFns.parse(url_date[2] + '-' + months[url_date[1]] + '-01');\n let nextMonth = dateFns.startOfMonth(dateFns.addMonths(date,1));\n\n let trigger = this.props.location.state ? this.props.location.state.trigger : 'unknown';\n\n if (history.action === 'POP') {\n\n this.trigger = 'POP';\n\n } else {\n\n this.trigger = 'PUSH';\n\n }\n\n if (trigger === 'click' || history.action === 'POP') {\n\n this.props.switchMonth(date);\n this.props.loadMonth(date);\n this.props.loadDays(date);\n this.props.loadSchedule(\n agent.Schedule.all(\n dateFns.format(date, 'DD-MM-YYYY'),\n dateFns.format(dateFns.endOfMonth(nextMonth), 'DD-MM-YYYY')\n )\n );\n\n } else {\n\n this.props.switchMonth(date);\n this.props.loadMonth(date);\n\n }\n\n }\n\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n\n if (nextProps.match !== this.props.match || nextProps.activeMonth !== this.props.activeMonth || nextProps.nextMonth !== this.props.nextMonth || nextProps.prevMonth !== this.props.prevMonth) {\n return true;\n } else {\n return false;\n }\n\n }\n\n render() {\n \n if (!this.props.days || (typeof this.props.clients === 'undefined') || (typeof this.props.projects === 'undefined')) {\n return (\n <section className=\"schedule__calendar\">\n <div className=\"loading\"><div className=\"loader\"></div></div>\n <div className=\"bottom\" data-month={this.props.nextMonth}></div>\n </section>\n );\n }\n return (\n <React.Fragment>\n <section className=\"component__route component__route__month\">\n <Month\n trigger={this.props.trigger} />\n </section>\n <section className=\"component__schedule\">\n <Title\n activeMonth={this.props.activeMonth}\n currentMonth={this.props.currentMonth}\n nextMonth={this.props.nextMonth}\n prevMonth={this.props.prevMonth} />\n <ScheduleList\n history={this.props.history}\n currentMonth={this.props.currentMonth}\n activeMonth={this.props.activeMonth}\n nextMonth={this.props.nextMonth}\n prevMonth={this.props.prevMonth}\n trigger={this.trigger} />\n </section>\n </React.Fragment>\n );\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Schedule);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport dateFns from 'date-fns';\nimport classNames from 'classnames/bind';\nimport { Link } from 'react-router-dom';\nimport Tooltip from '../Tooltip';\nimport { Info } from '../Info';\nimport _ from 'lodash';\nimport agent from '../../agent';\nimport {\n REQUEST_YEAR,\n YEAR_LOADED,\n YEAR_UNLOADED\n} from '../../constants/actionTypes';\nimport {ReactComponent as PriceIcon} from '../../images/icons/price.svg';\n\nconst mapStateToProps = (state, ownProps) => ({\n ...state.years,\n ...state.projects,\n year: ownProps.match.params.year,\n currentUser: state.common.currentUser,\n currentMonth: state.common.currentMonth,\n currentYear: state.common.currentUser.current_year,\n});\n\nconst mapDispatchToProps = dispatch => ({\n onLoad: (payload) => {\n dispatch({ type: REQUEST_YEAR })\n dispatch({ type: YEAR_LOADED, payload: payload })\n },\n onUnload: () =>\n dispatch({ type: YEAR_UNLOADED }),\n});\n\nclass Year extends React.Component {\n\n componentWillMount() {\n\n this.props.onLoad(\n agent.Year.show(this.props.year)\n );\n\n }\n\n componentDidUpdate(prevProps,prevState) {\n\n if(prevProps.location.pathname !== this.props.location.pathname) {\n\n if(this.props.location.pathname.indexOf('/year/') >= 0) {\n\n let url_date = this.props.location.pathname.replace('/year/','');\n\n this.props.onLoad(\n agent.Year.show(url_date.replace('/',''))\n );\n\n }\n\n }\n\n }\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n formatPrice(price) {\n\n return new Intl.NumberFormat(this.props.locale, {\n style: 'currency',\n currency: this.props.currentUser.currency\n }).format(price)\n\n }\n\n render() {\n\n if ((typeof this.props.data === 'undefined') || this.props.isFetching) {\n\n return (\n <div className=\"loading\"><div className=\"loader\"></div></div>\n )\n\n } else {\n\n let revenue_percentage = 0;\n let yearly_target = null;\n let yearly_revenue = 0;\n let target_remaining = 0;\n let in_past = dateFns.isPast(dateFns.endOfYear(this.props.year));\n\n if(this.props.data.amount_revenue && this.props.yearly_target){\n yearly_revenue = this.props.amount_revenue;\n yearly_target = this.props.yearly_target;\n revenue_percentage = Math.round(parseInt(yearly_revenue, 10) / yearly_target * 100);\n target_remaining = this.props.target_remaining_formatted;\n }\n\n if(this.props.data.name){\n\n return (\n <React.Fragment>\n <section className=\"component__route component__route__month\">\n\n <header>\n <h2>{this.props.data.name}</h2>\n <span className=\"year__prev\">\n <Tooltip message={`Prev Year`} position={'bottom'} size={'large'}>\n <Link className=\"icon\" to={{\n pathname: '/year/' + this.props.data.previous_year + '/',\n state: {\n trigger: 'click'\n }\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><g strokeWidth=\"2\" fill=\"#e12323\" stroke=\"#e12323\"><polyline fill=\"none\" stroke=\"#e12323\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\" points=\"11.5,0.5 4,8 11.5,15.5 \"></polyline></g></svg>\n </Link>\n </Tooltip>\n </span>\n <span className=\"year__today\">\n <Tooltip message={`This Year`} position={'bottom'} size={'large'}>\n <Link className=\"icon\" to={{\n pathname: '/year/' + this.props.currentYear,\n state: {\n trigger: 'click'\n }\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><g strokeWidth=\"2\" fill=\"#e12323\" stroke=\"#e12323\"><circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"none\" stroke=\"#e12323\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></circle></g></svg>\n </Link>\n </Tooltip>\n </span>\n { this.props.data.next_year && (\n <span className=\"year__next last\">\n <Tooltip message={`Next Year`} position={'bottom'} size={'large'}>\n <Link className=\"icon\" to={{\n pathname: '/year/' + this.props.data.next_year + '/',\n state: {\n trigger: 'click'\n }\n }}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><g strokeWidth=\"2\" fill=\"#e12323\" stroke=\"#e12323\"><polyline fill=\"none\" stroke=\"#e12323\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit=\"10\" points=\"4.5,0.5 12,8 4.5,15.5 \"></polyline></g></svg>\n </Link>\n </Tooltip>\n </span>\n )}\n </header>\n\n <section className=\"component\">\n\n <div className=\"progress\">\n\n <header>\n <h3>Revenue</h3>\n <span>{ this.props.data.amount_revenue_formatted }</span>\n </header>\n\n <div className=\"bar\">\n <div className=\"bar__exceeded\" style={{width: this.props.data.amount_worked_percentage + '%' }}>\n <Tooltip message={`${this.props.data.amount_worked_string} earned this year`} position={'top'} size={'small'}></Tooltip>\n </div>\n <div className=\"bar__revenue\" style={{width: this.props.data.amount_agreed_percentage + '%' }}>\n <Tooltip message={`${this.props.data.amount_agreed_string} more expected this year`} position={'top'} size={'small'}></Tooltip>\n </div>\n <div className=\"bar__empty\">\n <Tooltip message={`${this.props.data.target_remaining_formatted} short of your target`} position={'top'} size={'small'}></Tooltip>\n </div>\n </div>\n\n <small>{ this.props.data.monthly_average_revenue_formatted } on average per month</small>\n\n </div>\n\n <div className=\"progress\">\n\n <header>\n <h3>{ this.props.data.target_remaining_days === 0 ? 'Target smashed by' : 'Target Remaining' }</h3>\n <span>{ this.props.data.target_remaining_formatted }</span>\n </header>\n\n <div className=\"bar\">\n <div style={{width: '100%'}} className={ this.props.data.target_remaining_days === 0 ? 'bar__exceeded' : 'bar__empty' }></div>\n </div>\n\n <small>{ this.props.data.target_remaining_days === 0 ? \n in_past ? `You smashed your target of ${this.props.data.yearly_target_formatted}` : `Includes projects you haven't scheduled yet`\n : `${this.props.data.target_remaining_days} days needed to reach this`}{ this.props.data.target_remaining_days > 0 && <Tooltip message={`This is based on your day rate of ${ this.props.currentUser.standard_day_rate_formatted}`} position={'top'} size={'large'}><Info /></Tooltip> }</small>\n\n </div>\n\n <div className=\"progress\">\n\n <header>\n <h3>Days Worked</h3>\n <span>{ this.props.data.number_of_days_worked }</span>\n </header>\n\n <div className=\"bar\">\n <div className=\"bar__booked\" style={{width: ( this.props.data.number_of_days_worked / this.props.data.total_workable_days * 100 ) + '%' }}></div>\n <div className=\"bar__empty\"></div>\n </div>\n\n <small>Average day rate of { this.props.data.average_day_rate_formatted }</small>\n\n </div>\n\n <div className=\"progress\">\n\n <header>\n <h3>Holidays</h3>\n <span>{ this.props.data.number_of_days_holiday }</span>\n </header>\n\n <div className=\"bar\">\n <div className=\"bar__booked\" style={{width: ( this.props.data.number_of_days_holiday / this.props.data.total_workable_days * 100 ) + '%' }}></div>\n <div className=\"bar__empty\"></div>\n </div>\n\n <small>{this.props.data.number_of_days_unworked_to_date} days not worked <Tooltip message={`These are days you were available but had no work`} position={'top'} size={'large'}><Info /></Tooltip></small>\n\n </div>\n\n <div className=\"progress progress__list\">\n\n <header>\n\n <h3>Top Clients</h3>\n\n </header>\n\n {this.props.data.client_breakdown.length === 0 && <div className=\"empty\"><p>You haven't added any work for this year.</p></div>}\n\n {this.props.data.client_breakdown.map(function(client, i){\n return (\n <div className=\"item\" key={i}>\n <div className=\"item__info\">\n <span className=\"color\" style={{backgroundColor: client.hex_colour }}></span>\n <span className=\"title\">\n <Link to={`/clients/${client.client_slug}`}>\n { client.client_name }\n </Link>\n </span>\n <span className=\"value\">{ client.revenue_formatted }</span>\n </div>\n </div>\n )\n })}\n\n </div>\n\n <div className=\"notifications\">\n\n { (this.props.data.revenue_percentage < 60 && this.props.data.revenue_percentage > 1) &&\n <div className=\"alert\">\n <div className=\"alert__title\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path d=\"M23.58.424A1,1,0,0,0,22.819.13C8.791.862,3.609,13.358,3.559,13.484a1,1,0,0,0,.22,1.08l5.657,5.657a1,1,0,0,0,1.085.218c.125-.051,12.554-5.291,13.348-19.253A1,1,0,0,0,23.58.424Zm-8.166,10.99a2,2,0,1,1,0-2.828A2,2,0,0,1,15.414,11.414Z\" fill=\"#141414\"></path> <path d=\"M1.113,18.844a2.844,2.844,0,1,1,4.022,4.022C4.024,23.977,0,24,0,24S0,19.954,1.113,18.844Z\"></path> <path id=\"color-2\" d=\"M10.357,2.341A8.911,8.911,0,0,0,2.522,4.825a9.084,9.084,0,0,0-1.384,1.8,1,1,0,0,0,.155,1.215l1.989,1.99A26.623,26.623,0,0,1,10.357,2.341Z\" fill=\"#141414\"></path> <path id=\"color-3\" d=\"M21.659,13.643a8.911,8.911,0,0,1-2.484,7.835,9.084,9.084,0,0,1-1.8,1.384,1,1,0,0,1-1.215-.155l-1.99-1.989A26.623,26.623,0,0,0,21.659,13.643Z\" fill=\"#141414\"></path></g></svg>\n <h3>Good start {this.props.currentUser.first_name}!</h3>\n <span onClick={this.clearNotifications}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n <p>You need to earn another {this.props.data.target_remaining_formatted} ({this.props.data.target_remaining_days_formatted} of work) to meet your annual revenue target.</p>\n </div>\n </div>\n }\n\n { (this.props.data.revenue_percentage > 60 && this.props.data.revenue_percentage < 100) &&\n <div className=\"alert\">\n <div className=\"alert__title\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path fill=\"#141414\" d=\"M17,16c-2.951,0-5.403-0.639-7-1.712c0,0.746,0,1.238,0,1.712c0,1.657,3.134,3,7,3s7-1.343,7-3 c0-0.474,0-0.966,0-1.712C22.403,15.361,19.951,16,17,16z\"></path> <path fill=\"#141414\" d=\"M17,21c-2.951,0-5.403-0.639-7-1.712c0,0.746,0,1.238,0,1.712c0,1.657,3.134,3,7,3s7-1.343,7-3 c0-0.474,0-0.966,0-1.712C22.403,20.361,19.951,21,17,21z\"></path> <ellipse fill=\"#141414\" cx=\"17\" cy=\"11\" rx=\"7\" ry=\"3\"></ellipse> <ellipse cx=\"7\" cy=\"3\" rx=\"7\" ry=\"3\"></ellipse> <path d=\"M8,17.973C7.673,17.989,7.341,18,7,18c-2.951,0-5.403-0.639-7-1.712C0,17.034,0,17.526,0,18 c0,1.657,3.134,3,7,3c0.34,0,0.673-0.014,1-0.034V17.973z\"></path> <path d=\"M8,12.973C7.673,12.989,7.341,13,7,13c-2.951,0-5.403-0.639-7-1.712C0,12.034,0,12.526,0,13 c0,1.657,3.134,3,7,3c0.34,0,0.673-0.014,1-0.034V12.973z\"></path> <path d=\"M9.92,7.766C9.018,7.916,8.042,8,7,8C4.049,8,1.597,7.361,0,6.288C0,7.034,0,7.526,0,8 c0,1.657,3.134,3,7,3c0.341,0,0.674-0.014,1.003-0.034C8.015,9.703,8.71,8.606,9.92,7.766z\"></path></g></svg>\n <h3>Nearly there {this.props.currentUser.first_name}!</h3>\n <span onClick={this.clearNotifications}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n <p>You need to earn another {this.props.data.target_remaining_formatted} ({this.props.data.target_remaining_days_formatted} of work) to meet your annual revenue target.</p>\n </div>\n </div>\n }\n\n { this.props.data.revenue_percentage >= 100 &&\n <div className=\"alert\">\n <div className=\"alert__title\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><g fill=\"#141414\"><path fill=\"#141414\" d=\"M6.172,14.561C6.358,14.835,6.668,15,7,15h10c0.332,0,0.642-0.165,0.828-0.439s0.224-0.624,0.101-0.932l-2-5 C15.776,8.249,15.409,8,15,8H9C8.591,8,8.224,8.249,8.071,8.629l-2,5C5.948,13.937,5.986,14.286,6.172,14.561z\"></path> <rect y=\"11\" width=\"4\" height=\"2\"></rect> <rect x=\"3.929\" y=\"2.929\" transform=\"matrix(0.707 -0.7072 0.7072 0.707 -2.0415 4.93)\" width=\"2\" height=\"4\"></rect> <rect x=\"11\" width=\"2\" height=\"4\"></rect> <rect x=\"17.071\" y=\"3.929\" transform=\"matrix(0.7072 -0.707 0.707 0.7072 2.099 14.926)\" width=\"4\" height=\"2\"></rect> <rect x=\"20\" y=\"11\" width=\"4\" height=\"2\"></rect> <path fill=\"#141414\" d=\"M23.929,21.629l-2-5C21.776,16.249,21.409,16,21,16h-6c-0.409,0-0.776,0.249-0.929,0.629l-2,5 C12.023,21.749,12,22,12,22c0-0.125-0.023-0.251-0.071-0.371l-2-5C9.776,16.249,9.409,16,9,16H3c-0.409,0-0.776,0.249-0.929,0.629 l-2,5c-0.123,0.308-0.085,0.657,0.101,0.932S0.668,23,1,23h22c0.332,0,0.642-0.165,0.828-0.439S24.052,21.937,23.929,21.629z\"></path></g></svg>\n <h3>Awesome job {this.props.currentUser.first_name}!</h3>\n <span onClick={this.clearNotifications}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><path d=\"M10.707,1.293a1,1,0,0,0-1.414,0L6,4.586,2.707,1.293A1,1,0,0,0,1.293,2.707L4.586,6,1.293,9.293a1,1,0,1,0,1.414,1.414L6,7.414l3.293,3.293a1,1,0,0,0,1.414-1.414L7.414,6l3.293-3.293A1,1,0,0,0,10.707,1.293Z\" fill=\"#ffffff\"></path></svg>\n </span>\n </div>\n <div className=\"alert__text\">\n { in_past ?\n <p>You smashed your annual revenue target for {this.props.data.name} by {this.props.data.target_remaining_formatted}!</p>\n :\n <p>You're on target to smash your annual revenue target for {this.props.data.name} by {this.props.data.target_remaining_formatted}</p>\n }\n </div>\n </div>\n }\n\n </div>\n\n </section>\n\n </section>\n\n <section className=\"component__schedule\">\n\n <header>\n\n <h2>Monthly breakdown</h2>\n\n </header>\n\n <section className=\"component__list\">\n\n <div className=\"blocks blocks__year\">\n\n {this.props.data.month_breakdown.map(hash => {\n\n let days = [];\n let month = dateFns.parse('1 ' + hash.month_name);\n let day = dateFns.startOfWeek(month, {weekStartsOn: 1});\n let revenue_percentage = 0;\n\n if (hash.revenue >= 1) {\n revenue_percentage = hash.difference_from_target_width_percentage\n }\n\n let dayClass = classNames({\n month: true,\n empty: revenue_percentage === 0,\n outside: revenue_percentage <= 40,\n inside: revenue_percentage > 40,\n above: hash.difference_from_target > 0,\n below: hash.difference_from_target < 0\n })\n\n while (day <= dateFns.endOfMonth(month)) {\n days.push({\n key: dateFns.format(day, 'DDMMYY'),\n day: day\n });\n day = dateFns.addDays(day, 1);\n }\n\n var headers = ['M','T','W','T','F','S','S']\n\n return (\n <div\n key={month}\n className={dayClass}>\n <h3>\n <Link to={{\n pathname: `/month/${hash.month}/${hash.year}`,\n state: {\n trigger: 'click'\n }\n }}>\n { hash.month_name}\n </Link>\n <span>{hash.revenue_string}</span>\n </h3>\n <div className=\"progress progress__comparison\">\n <div className=\"bar\">\n <em>No work added</em>\n {hash.difference_from_target < 0 &&\n <span>{ hash.difference_from_target_formatted.replace('-','') } { hash.difference_from_target_formatted > 0 ? 'above' : 'below' } target</span>\n }\n <div style={{width: hash.difference_from_target_width_percentage + '%' }}></div>\n {hash.difference_from_target > 0 &&\n <span>{ hash.difference_from_target_formatted } above target</span>\n }\n </div>\n </div>\n </div>\n )\n\n })}\n </div>\n\n </section>\n\n </section>\n\n </React.Fragment>\n\n )\n\n }\n\n }\n\n }\n\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Year);\n","import ListErrors from './ListErrors';\nimport React from 'react';\nimport agent from '../agent';\nimport images from '../images';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport {\n UPDATE_FIELD_AUTH,\n LOGIN,\n LOGIN_PAGE_UNLOADED\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n ...state.auth,\n common: state.common\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n onChangeEmail: value =>\n dispatch({ type: UPDATE_FIELD_AUTH, key: 'email', value }),\n onChangePassword: value =>\n dispatch({ type: UPDATE_FIELD_AUTH, key: 'password', value }),\n onSubmit: (email, password) =>\n dispatch({ type: LOGIN, payload: agent.Auth.login(email, password) }),\n onUnload: () =>\n dispatch({ type: LOGIN_PAGE_UNLOADED })\n});\n\nclass Login extends React.Component {\n\n constructor() {\n super();\n this.changeEmail = ev => this.props.onChangeEmail(ev.target.value);\n this.changePassword = ev => this.props.onChangePassword(ev.target.value);\n this.submitForm = (email, password) => ev => {\n ev.preventDefault();\n this.props.onSubmit(email, password);\n };\n }\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n errorMessage(field) {\n if(this.props.errors && this.props.errors[field]){\n return this.props.errors[field];\n }\n };\n\n render() {\n\n const email = this.props.email;\n const password = this.props.password;\n return (\n\n <main>\n\n <section className=\"component__route component__route__login\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <ListErrors errors={this.props.errors} />\n\n <form onSubmit={this.submitForm(email, password)}>\n\n <h1>Sign in to your Slate account.</h1>\n\n <div>\n\n <div className=\"field\">\n\n <label>\n <span>Email {this.errorMessage('email') ? <div className=\"error\">{this.errorMessage('email')}</div> : ''}</span>\n <input\n type=\"text\"\n value={email}\n onChange={this.changeEmail} />\n </label>\n\n </div>\n\n <div className=\"field\">\n\n <label>\n <span className=\"justify\">Password <Link to=\"/password/forgot\">Forgot password?</Link></span>\n <input\n type=\"password\"\n value={password}\n onChange={this.changePassword} />\n </label>\n\n </div>\n \n </div>\n\n <div className=\"field field__buttons\">\n\n <Link to=\"/register\">Create an account</Link>\n\n <button\n disabled={this.props.common.loading}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}>\n <div className=\"loader loader__button\"></div>\n <span>Sign In</span>\n </button>\n\n </div>\n\n </form>\n\n </section>\n\n </main>\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Login);\n","import React from 'react';\nimport agent from '../agent';\nimport images from '../images';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport dateFns from 'date-fns';\nimport Select, { components } from 'react-select';\nimport countryList from 'react-select-country-list';\nimport update from 'immutability-helper';\nimport getSymbolFromCurrency from 'currency-symbol-map';\n\nimport {\n REGISTER\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n errors: state.auth.errors,\n common: state.common\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n onSubmitForm: user => {\n // function parse(str) {\n // const [date, month, year] = str.split('/').map(n => parseInt(n))\n // return new Date(year, month - 1, date)\n // }\n user.business_attributes.year_end = dateFns.format(dateFns.endOfYear(dateFns.startOfToday()), 'YYYY-MM-DD')\n user.country = user.country.value\n dispatch({ type: REGISTER, payload: agent.Auth.register(user) })\n }\n});\n\nconst Input = ({ autoComplete, ...props }) => <components.Input {...props} autoComplete=\"new-password\" />;\n\nclass RegisterForm extends React.Component {\n\n constructor(props) {\n super();\n\n this.countries = countryList().getData()\n\n this.state = {\n name: props.common.name ? props.common.name : '',\n email: props.common.email ? props.common.email : '',\n password: '',\n standard_hourly_rate: '',\n standard_day_rate: '',\n monthly_revenue_target: '',\n monday: true,\n tuesday: true,\n wednesday: true,\n thursday: true,\n friday: true,\n saturday: false,\n sunday: false,\n work_on_public_holidays: false,\n dark_mode: false,\n currency: 'GBP',\n business_attributes: {\n id: null,\n name: '',\n year_end: ''\n },\n country: {\n value: 'US',\n label: countryList().getLabel('US')\n },\n step: 1\n };\n }\n\n componentWillMount() {\n }\n\n componentWillReceiveProps(nextProps) {\n }\n\n errorMessage(field) {\n if(this.props.errors && this.props.errors[field]){\n return this.props.errors[field];\n }\n };\n\n updateState = field => ev => {\n\n const [split_field, parent_key] = field.split('.').reverse()\n const value = ev.target.type === 'checkbox' ? ev.target.checked : ev.target.value;\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n };\n\n updateCurrency = (field, value) => ev => {\n\n const [split_field, parent_key] = field.split('.').reverse()\n let newData;\n\n if (parent_key === undefined) {\n\n newData = update(this.state, {\n [split_field]: {$set: value}\n })\n\n } else {\n\n newData = update(this.state, {\n [parent_key]: {\n [split_field]: {$set: value}\n }\n })\n\n }\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n };\n\n updateCountry = value => {\n this.setState({ country: value })\n }\n\n submitForm(ev) {\n ev.preventDefault();\n this.props.onSubmitForm(this.state);\n }\n\n handleClick = () => {\n this.setState({ displayColorPicker: !this.state.displayColorPicker })\n };\n\n handleClose = () => {\n this.setState({ displayColorPicker: false })\n };\n\n handleChange = (color) => {\n this.setState({\n hex_colour: color.hex\n })\n };\n\n nextStep = (e) => {\n e.preventDefault();\n this.setState({ step: 2 })\n };\n\n prevStep = (e) => {\n e.preventDefault();\n this.setState({ step: 1 })\n };\n\n render() {\n\n return (\n <form onSubmit={this.submitForm.bind(this)} autoComplete=\"off\" autoComplete=\"new-password\">\n\n <h1>Start your 30-day free trial.</h1>\n\n <div className={(this.state.step === 1 || this.props.errors) ? 'show' : 'hide'}>\n\n <div className=\"field\">\n <label>\n <span>Name {this.errorMessage('name') ? <div className=\"error\">{this.errorMessage('name')}</div> : ''}</span>\n <input\n className=\"form-control\"\n type=\"text\"\n value={this.state.name}\n autoComplete=\"none\"\n autoFocus={true}\n onChange={this.updateState('name')} />\n </label>\n </div>\n\n <div className=\"field\">\n <label>\n <span>Email {this.errorMessage('email') ? <div className=\"error\">{this.errorMessage('email')}</div> : ''}</span>\n <input\n className=\"form-control\"\n type=\"text\"\n defaultValue={this.state.email}\n autoComplete=\"new-password\"\n onChange={this.updateState('email')} />\n </label>\n </div>\n\n <div className=\"field\">\n <label>\n <span>Password {this.errorMessage('password') ? <div className=\"error\">{this.errorMessage('password')}</div> : ''}</span>\n <input\n className=\"form-control\"\n type=\"password\"\n value={this.state.password}\n autoComplete=\"new-password\"\n onChange={this.updateState('password')} />\n </label>\n <small>Must be at least 8 characters</small>\n </div>\n\n <div className=\"field\">\n\n <label>\n <span>Country</span>\n </label>\n <Select\n className=\"react-select-container\"\n classNamePrefix=\"react-select\"\n options={this.countries}\n value={this.state.country}\n onChange={this.updateCountry}\n components={{\n Input\n }}\n />\n\n </div>\n\n </div>\n\n <hr className={(this.props.errors) ? 'show' : 'hide'} />\n\n <div className={this.state.step === 2 ? 'show' : 'hide'}>\n\n <h3>Currency Format</h3>\n\n <div className=\"field__group\">\n\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.currency === 'GBP'}\n onChange={this.updateCurrency('currency', 'GBP')} />\n <span className=\"currency\">£ {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.currency === 'USD'}\n onChange={this.updateCurrency('currency', 'USD')} />\n <span className=\"currency\">$ {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.currency === 'EUR'}\n onChange={this.updateCurrency('currency', 'EUR')} />\n <span className=\"currency\">€ {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.currency === 'DKK'}\n onChange={this.updateCurrency('currency', 'DKK')} />\n <span className=\"currency\">kr. {this.errorMessage('currency')}</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.currency === 'BRL'}\n onChange={this.updateCurrency('currency', 'BRL')} />\n <span className=\"currency\">R$ {this.errorMessage('currency')}</span>\n </label>\n </div>\n </div>\n\n <div className=\"field field__helper\">\n <label>\n <span>Standard Day Rate {this.errorMessage('standard_day_rate') ? <div className=\"error\">{this.errorMessage('standard_day_rate')}</div> : ''}</span>\n <div className=\"helper\">\n <span>{getSymbolFromCurrency(this.state.currency)}</span>\n <input\n className=\"form-control\"\n type=\"text\"\n value={this.state.standard_day_rate}\n onChange={this.updateState('standard_day_rate')} />\n </div>\n </label>\n </div>\n\n <div className=\"field field__helper\">\n <label>\n <span>Standard Hourly Rate {this.errorMessage('standard_hourly_rate') ? <div className=\"error\">{this.errorMessage('standard_hourly_rate')}</div> : ''}</span>\n <div className=\"helper\">\n <span>{getSymbolFromCurrency(this.state.currency)}</span>\n <input\n className=\"form-control\"\n type=\"text\"\n value={this.state.standard_hourly_rate}\n onChange={this.updateState('standard_hourly_rate')} />\n </div>\n </label>\n </div>\n\n <div className=\"field field__helper\">\n <label>\n <span>Monthly Revenue Target {this.errorMessage('monthly_revenue_target') ? <div className=\"error\">{this.errorMessage('monthly_revenue_target')}</div> : ''}</span>\n <div className=\"helper\">\n <span>{getSymbolFromCurrency(this.state.currency)}</span>\n <input\n className=\"form-control\"\n type=\"text\"\n value={this.state.monthly_revenue_target}\n onChange={this.updateState('monthly_revenue_target')} />\n </div>\n </label>\n <small>How much do you need to earn a month to pay your expenses and salary?</small>\n </div>\n\n </div>\n\n <div className=\"field field__buttons\">\n { this.state.step === 1 ?\n <React.Fragment>\n <Link to=\"/login\">Sign In</Link>\n <button\n className=\"btn btn-lg btn-primary pull-xs-right\"\n onClick={this.nextStep}\n disabled={this.state.inProgress}>\n Continue\n </button>\n </React.Fragment>\n :\n <React.Fragment>\n\n <a\n href=\"#\"\n onClick={this.prevStep}>\n Go Back\n </a>\n \n <button\n disabled={this.props.common.loading}\n className={this.props.common.loading ? 'btn btn__loading' : 'btn'}>\n <div className=\"loader loader__button\"></div>\n <span>Create my account</span>\n </button>\n\n </React.Fragment>\n }\n </div>\n\n { this.props.errors && <div class=\"notice\">We noticed a few errors...</div>}\n\n </form>\n );\n }\n}\n\nclass Register extends React.Component {\n render() {\n return (\n\n <main>\n\n <section className=\"component__route component__route__register\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <RegisterForm\n errors={this.props.errors}\n common={this.props.common}\n onSubmitForm={this.props.onSubmitForm} />\n\n <span>Have any questions? <a href=\"mailto:hello@heyslate.com?subject=Slate\">Email us</a></span>\n\n </section>\n\n </main>\n\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Register);\n","import React from 'react';\nimport agent from '../agent';\nimport images from '../images';\nimport { connect } from 'react-redux';\nimport update from 'immutability-helper';\nimport {\n DEMO_REGISTER\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => (\n {\n errors: state.auth.errors\n }\n);\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: (user) =>\n dispatch({ type: DEMO_REGISTER, payload: agent.Auth.demo_register(user) })\n});\n\nclass RegisterDemo extends React.Component {\n constructor() {\n super();\n\n this.state = {\n loading: false,\n email: '',\n name: '',\n clients: '1'\n };\n\n }\n\n componentDidUpdate(prevProps, prevState) {\n\n if (this.props.errors && prevState.loading) {\n this.setState({\n loading: false\n })\n }\n\n }\n\n submitForm = (ev) => {\n ev.preventDefault();\n\n this.setState({\n loading: true\n })\n\n this.props.onSubmit(this.state);\n\n };\n\n updateState = field => ev => {\n\n let newData = update(this.state, {\n [field]: {$set: ev.target.value}\n })\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n };\n\n errorMessage(field) {\n if(this.props.errors && this.props.errors[field]){\n return this.props.errors[field];\n }\n };\n\n render() {\n return (\n\n <main>\n\n <section className=\"component__route component__route__register\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <form onSubmit={this.submitForm.bind(this)} autoComplete=\"off\" autoComplete=\"new-password\">\n\n <h1>Build your custom Slate demo.</h1>\n\n {this.props.message &&\n <p class=\"notice\">{this.props.message}</p>\n }\n <div className=\"field\">\n\n <label>\n <div>What's your name? {this.errorMessage('name') ? <div className=\"error\">{this.errorMessage('name')}</div> : ''}</div>\n <input\n type=\"text\"\n value={this.state.name}\n onChange={this.updateState('name')} />\n </label>\n\n </div>\n\n <div className=\"field\">\n\n <label>\n <div>What's your email address? {this.errorMessage('email') ? <div className=\"error\">{this.errorMessage('email')}</div> : ''}</div>\n <input\n type=\"text\"\n value={this.state.email}\n onChange={this.updateState('email')} />\n </label>\n\n </div>\n\n <h3>How many clients do your normally work for in a day?</h3>\n\n <div className=\"field__group\">\n\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.clients === '1'}\n value=\"1\"\n onChange={this.updateState('clients')} />\n <span className=\"currency\">1</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.clients === '2'}\n value=\"2\"\n onChange={this.updateState('clients')} />\n <span className=\"currency\">2</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.clients === '3'}\n value=\"3\"\n onChange={this.updateState('clients')} />\n <span className=\"currency\">3</span>\n </label>\n </div>\n <div className=\"field field__checkbox\">\n <label>\n <input\n className=\"form-control\"\n type=\"checkbox\"\n checked={this.state.clients === '3+'}\n value=\"3+\"\n onChange={this.updateState('clients')} />\n <span className=\"currency\">3+</span>\n </label>\n </div>\n </div>\n\n <div className=\"field field__buttons\">\n\n {this.state.loading && <span>Building your demo, please wait...</span>}\n\n <button className={this.state.loading ? 'btn btn__loading' : 'btn'} disabled={this.state.loading}>\n <div className=\"loader loader__button\"></div>\n <span>Start Demo</span>\n </button>\n\n </div>\n\n </form>\n\n <span>This is a temporary demo account just for you so feel free to <br/> add, edit and delete to your hearts content.</span>\n\n </section>\n\n </main>\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RegisterDemo);\n","import ListErrors from './ListErrors';\nimport React from 'react';\nimport agent from '../agent';\nimport images from '../images';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport update from 'immutability-helper';\n\nimport {\n PASSWORD_FORGET,\n PASSWORD_FORGET_PAGE_UNLOADED\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => ({ ...state.auth });\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: (email) =>\n dispatch({ type: PASSWORD_FORGET, payload: agent.Password.forgot(email) }),\n onUnload: () =>\n dispatch({ type: PASSWORD_FORGET_PAGE_UNLOADED })\n});\n\nclass ForgottenPassword extends React.Component {\n constructor() {\n super();\n this.submitForm = (email) => ev => {\n ev.preventDefault();\n this.props.onSubmit(email);\n };\n this.state = {\n email: ''\n };\n }\n\n updateState = field => ev => {\n\n const value = ev.target.value;\n\n let newData = update(this.state, {\n [field]: {$set: value}\n })\n\n this.setState(newData);\n \n // cleanup\n newData = null;\n\n };\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n errorMessage(field) {\n if(this.props.errors && this.props.errors[field]){\n return this.props.errors[field];\n }\n };\n\n render() {\n return (\n\n <main>\n\n <section className=\"component__route component__route__login\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <ListErrors errors={this.props.errors} />\n\n <form onSubmit={this.submitForm(this.state.email)}>\n\n <h1>Reset your password.</h1>\n\n {this.props.message &&\n <p class=\"notice\">{this.props.message}</p>\n }\n\n <div>\n\n <div className=\"field\">\n\n <label>\n <span>Email {this.errorMessage('email') ? <div className=\"error\">{this.errorMessage('email')}</div> : ''}</span>\n <input\n type=\"text\"\n value={this.state.email}\n onChange={this.updateState('email')} />\n </label>\n\n </div>\n \n </div>\n\n <div className=\"field field__buttons\">\n\n <Link to=\"/login\">Sign In</Link>\n\n <button\n className=\"btn btn-lg btn-primary pull-xs-right\"\n type=\"submit\"\n disabled={this.props.inProgress}>\n Send password reset email\n </button>\n\n </div>\n\n </form>\n\n </section>\n\n </main>\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ForgottenPassword);\n","import ListErrors from './ListErrors';\nimport React from 'react';\nimport agent from '../agent';\nimport images from '../images';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport queryString from 'query-string';\nimport update from 'immutability-helper';\nimport {\n PASSWORD_RESET,\n PASSWORD_RESET_PAGE_UNLOADED\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => ({ ...state.auth });\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: (token, password) =>\n dispatch({ type: PASSWORD_RESET, payload: agent.Password.reset(token, password) }),\n onUnload: () =>\n dispatch({ type: PASSWORD_RESET_PAGE_UNLOADED })\n});\n\nclass ResetPassword extends React.Component {\n constructor() {\n super();\n this.submitForm = (token, password) => ev => {\n ev.preventDefault();\n this.props.onSubmit(token, password);\n };\n this.state = {\n password: '',\n token: ''\n };\n }\n\n componentDidMount() {\n const values = queryString.parse(this.props.location.search)\n const token = values.token\n this.updateStatewithValue('token', token)\n }\n\n updateState = field => ev => {\n\n let newData = update(this.state, {\n [field]: {$set: ev.target.value}\n })\n\n this.setState(newData);\n\n // cleanup\n newData = null;\n\n };\n\n updateStatewithValue(field, value) {\n \n let newData = update(this.state, {\n [field]: {$set: value}\n })\n\n this.setState(newData);\n \n // cleanup\n newData = null;\n\n };\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n errorMessage(field) {\n if(this.props.errors && this.props.errors[field]){\n return this.props.errors[field];\n }\n };\n\n render() {\n return (\n\n <main>\n\n <section className=\"component__route component__route__login\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <ListErrors errors={this.props.errors} />\n\n <form onSubmit={this.submitForm(this.state.token, this.state.password)}>\n\n <h1>Reset your password.</h1>\n\n <div>\n\n <div className=\"field\">\n\n <label>\n <span>Password {this.errorMessage('password') ? <div className=\"error\">{this.errorMessage('password')}</div> : ''}</span>\n <input\n type=\"password\"\n value={this.state.password}\n onChange={this.updateState('password')} />\n </label>\n\n </div>\n \n </div>\n\n <div className=\"field field__buttons\">\n\n <Link to=\"/login\">Sign In</Link>\n\n <button\n className=\"btn btn-lg btn-primary pull-xs-right\"\n type=\"submit\"\n disabled={this.props.inProgress}>\n Reset Password\n </button>\n\n </div>\n\n </form>\n\n </section>\n\n </main>\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ResetPassword);\n","import ListErrors from './ListErrors';\nimport React from 'react';\nimport agent from '../agent';\nimport images from '../images';\nimport { connect } from 'react-redux';\nimport queryString from 'query-string';\nimport update from 'immutability-helper';\nimport {\n UNSUBSCRIBE,\n CHECK_UNSUBSCRIBE_TOKEN,\n UNSUBSCRIBE_UNLOADED\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => ({ ...state.auth });\n\nconst mapDispatchToProps = dispatch => ({\n onSubmit: (token) =>\n dispatch({ type: UNSUBSCRIBE, payload: agent.Unsubscribe.unsubscribe(token) }),\n onLoad: (token) =>\n dispatch({ type: CHECK_UNSUBSCRIBE_TOKEN, payload: agent.Unsubscribe.get(token) }),\n onUnload: (token) =>\n dispatch({ type: UNSUBSCRIBE_UNLOADED })\n});\n\nclass Unsubscribe extends React.Component {\n constructor() {\n super();\n this.submitForm = (token) => ev => {\n ev.preventDefault();\n this.props.onSubmit(token);\n };\n this.state = {\n token: '',\n email: ''\n };\n }\n\n componentDidMount() {\n const values = queryString.parse(this.props.location.search)\n const token = values.token\n this.updateStatewithValue('token', token)\n this.props.onLoad(token);\n }\n\n updateStatewithValue(field, value) {\n\n let newData = update(this.state, {\n [field]: {$set: value}\n })\n\n this.setState(newData);\n \n // cleanup\n newData = null;\n\n };\n\n componentWillUnmount() {\n this.props.onUnload();\n }\n\n errorMessage(field) {\n if(this.props.errors && this.props.errors[field]){\n return this.props.errors[field];\n }\n };\n\n render() {\n if(this.props.unsubscribe_email === undefined){\n if(this.props.unsubscribed === undefined){\n return (\n <main>\n\n <section className=\"component__route component__route__login\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <h1>Sorry there is no user linked to the unsubscribe link you clicked on.</h1>\n\n <p>Please contact hello@heyslate.com and we will be able to help you.</p>\n\n </section>\n\n </main>\n );\n }else{\n return (\n <main>\n\n <section className=\"component__route component__route__login\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <h1>You have been unsubscribed from all Slate emails.</h1>\n\n </section>\n\n </main>\n );\n }\n }else{\n return (\n\n <main>\n\n <section className=\"component__route component__route__login\">\n\n <img src={images.logo} alt=\"Slate\" />\n\n <ListErrors errors={this.props.errors} />\n\n <form onSubmit={this.submitForm(this.state.token)}>\n\n <h1>Are you sure you want to unsubscribe { this.props.unsubscribe_email } from all Slate emails?</h1>\n\n <div className=\"field field__buttons\">\n\n <button\n className=\"btn btn-lg btn-primary pull-xs-right\"\n type=\"submit\"\n disabled={this.props.inProgress}>\n Yes, please unsubscribe me from all emails.\n </button>\n\n </div>\n\n </form>\n\n </section>\n\n </main>\n );\n }\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Unsubscribe);\n","// This is used to determine if a user is authenticated and\n// if they are allowed to visit the page they navigated to.\n\n// If they are: they proceed to the page\n// If not: they are redirected to the login page.\nimport React from 'react'\nimport { Redirect, Route } from 'react-router-dom'\n\nconst PrivateRoute = ({ component: Component, ...rest }) => {\n\n // Add your own authentication on the below line.\n const isLoggedIn = window.localStorage.getItem('jwt');\n\n return (\n <Route\n {...rest}\n render={props =>\n isLoggedIn ? (\n <Component {...props} />\n ) : (\n <Redirect to={{ pathname: '/login', state: { from: props.location } }} />\n )\n }\n />\n )\n}\n\nexport default PrivateRoute\n","import React, { useState, useEffect } from 'react';\nimport { Route, Switch } from 'react-router';\nimport Nav from './components/Nav';\nimport Home from './components/Home';\nimport Clients from './components/Clients';\nimport AdminUsers from './components/Admin/Users';\nimport AdminUser from './components/Admin/User';\nimport Projects from './components/Projects';\nimport Invoices from './pages/Invoices';\nimport InvoiceNew from './pages/InvoiceNew';\nimport InvoiceEdit from './pages/InvoiceEdit';\nimport Settings from './components/Settings';\nimport Billings from './components/Billings';\nimport PaymentMethod from './components/PaymentMethod';\nimport Schedule from './components/Schedule';\nimport Year from './components/Year';\nimport Login from './components/Login';\nimport Register from './components/Register';\nimport RegisterDemo from './components/RegisterDemo';\nimport ForgottenPassword from './components/ForgottenPassword';\nimport ResetPassword from './components/ResetPassword';\nimport Unsubscribe from './components/Unsubscribe';\nimport PrivateRoute from './components/PrivateRoute';\nimport dateFns from 'date-fns';\nimport {isNil} from 'lodash'\nimport { history } from './configureStore';\n\n// const mapStateToProps = state => {\n// return {\n// redirectTo: state.common.redirectTo,\n// currentUser: state.common.currentUser,\n// subscription: state.common.subscription\n// }\n// };\n//\n// const mapDispatchToProps = dispatch => ({\n// });\n\nconst AppRoute = (props) => {\n\n const isLoggedIn = window.localStorage.getItem('jwt');\n\n const billingRequired = (props) => {\n const {currentUser = {}, subscription = null} = props;\n\n const expiredTrial = (currentUser.state === 'trialing' && dateFns.isPast(currentUser.trial_ends_at) && subscription === null)\n const cancelledAndSubcriptionExpired = (currentUser.state === 'cancelled' && (!isNil(currentUser.paid_subscription_ends_at) && dateFns.isPast(currentUser.paid_subscription_ends_at)))\n const registeredButNoSubscription = (currentUser.state === 'registered' && subscription === null )\n\n return (\n expiredTrial || cancelledAndSubcriptionExpired || registeredButNoSubscription\n )\n\n }\n\n const [path, setPath] = useState( window.location.pathname !== '/' ? window.location.pathname.split('/')[1] : '/' );\n\n useEffect(() => {\n // Listen for changes to the current location.\n const listen = history.listen((location, action) => {\n if(location.pathname.indexOf('/month/') >= 0) {\n setPath('month');\n } else if(location.pathname.indexOf('/year/') >= 0) {\n setPath('year');\n } else if(location.pathname.indexOf('/clients') >= 0) {\n setPath('clients');\n } else if(location.pathname.indexOf('/projects') >= 0) {\n setPath('projects');\n } else if(location.pathname.indexOf('/invoices') >= 0) {\n setPath('invoices');\n } else if(location.pathname.indexOf('/settings') >= 0) {\n setPath('settings');\n } else if(location.pathname.indexOf('/admin') >= 0) {\n setPath('admin');\n } else {\n setPath('/');\n }\n })\n }, [])\n\n return (\n isLoggedIn ? (\n\n // show payment screen if trial is over and no subcription found (excluding admins)\n (\n billingRequired({ currentUser: props.currentUser, subscription: props.subcription}) && (!props.currentUser.admin)\n ) ? (\n <React.Fragment>\n <main>\n <Billings />\n </main>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <Nav\n activeMonth={props.activeMonth}\n redirectTo={props.redirectTo}\n currentUser={props.currentUser}\n currentPath={path} />\n <main className={props.currentUser.demo ? 'demo' : 'user'}>\n <Switch>\n <PrivateRoute exact path=\"/\" component={Home}/>\n <PrivateRoute exact path=\"/month/:month/:year\" component={Schedule}/>\n <PrivateRoute exact path=\"/year/:year\" component={Year}/>\n <PrivateRoute exact path=\"/clients\" component={Clients}/>\n <PrivateRoute exact path=\"/clients/:slug\" component={Clients}/>\n <PrivateRoute exact path=\"/projects\" component={Projects}/>\n <PrivateRoute exact path=\"/projects/:slug\" component={Projects}/>\n <PrivateRoute exact path=\"/invoices\" component={Invoices}/>\n <PrivateRoute exact path=\"/invoices/new\" component={InvoiceNew}/>\n <PrivateRoute exact path=\"/invoices/:invoiceId/edit\" component={InvoiceEdit}/>\n <PrivateRoute exact path=\"/invoices/:slug\" component={Invoices}/>\n <PrivateRoute exact path=\"/settings\" component={Settings}/>\n <PrivateRoute exact path=\"/settings/billing\" component={Billings}/>\n <PrivateRoute exact path=\"/settings/billing/payment\" component={PaymentMethod}/>\n <PrivateRoute path=\"/unsubscribe\" component={Unsubscribe} />\n <PrivateRoute path=\"/admin/users/:slug\" component={AdminUser} />\n <PrivateRoute path=\"/admin/users\" component={AdminUsers} />\n </Switch>\n <Route path=\"/login\" component={Login} />\n <Route path=\"/demo\" component={RegisterDemo} />\n </main>\n </React.Fragment>\n )\n ) : (\n <React.Fragment>\n <PrivateRoute exact path=\"/\" component={Home}/>\n <PrivateRoute exact path=\"/month/:month/:year\" component={Schedule}/>\n <PrivateRoute exact path=\"/year/:year\" component={Year}/>\n <PrivateRoute exact path=\"/clients\" component={Clients}/>\n <PrivateRoute exact path=\"/clients/:slug\" component={Clients}/>\n <PrivateRoute exact path=\"/projects\" component={Projects}/>\n <PrivateRoute exact path=\"/invoices\" component={Invoices}/>\n <PrivateRoute exact path=\"/settings\" component={Settings}/>\n <PrivateRoute exact path=\"/settings/billing\" component={Billings}/>\n <Route path=\"/login\" component={Login} />\n <Route path=\"/demo\" component={Register} />\n <Route path=\"/password/forgot\" component={ForgottenPassword} />\n <Route path=\"/password/reset\" component={ResetPassword} />\n <Route path=\"/register\" component={Register} />\n <Route path=\"/unsubscribe\" component={Unsubscribe} />\n </React.Fragment>\n )\n )\n\n}\n\nexport default AppRoute\n//export default connect(mapStateToProps, mapDispatchToProps)(AppRoute);\n","import agent from '../agent';\nimport React from 'react';\nimport { connect } from 'react-redux';\nimport { ConnectedRouter } from 'connected-react-router';\nimport { history } from '../configureStore';\nimport AppRoute from '../routes';\nimport _ from 'lodash';\nimport images from '../images';\nimport '../styles/app.scss';\n\nimport {\n APP_LOAD,\n REDIRECT,\n CLIENTS_PAGE_LOADED,\n PROJECTS_PAGE_LOADED,\n SUBSCRIPTION_REQUIRED,\n DEMO_LOGOUT\n} from '../constants/actionTypes';\n\nconst mapStateToProps = state => {\n return {\n appLoaded: state.common.appLoaded,\n appName: state.common.appName,\n currentUser: state.common.currentUser,\n activeMonth: state.common.activeMonth,\n nextMonth: state.common.nextMonth,\n prevMonth: state.common.prevMonth,\n currentMonth: state.common.currentMonth,\n redirectTo: state.common.redirectTo,\n subscription: state.common.subscription,\n clientSize: state.clients.clients,\n projectSize: state.clients.projects\n }};\n\nconst mapDispatchToProps = dispatch => ({\n onLoad: (payload, token) =>\n dispatch({ type: APP_LOAD, payload, token, skipTracking: true }),\n onRedirect: () =>\n dispatch({ type: REDIRECT }),\n onClients: (payload) => {\n dispatch({ type: CLIENTS_PAGE_LOADED, payload: payload })\n },\n onProjects: (payload) => {\n dispatch({ type: PROJECTS_PAGE_LOADED, payload: payload })\n },\n checkSubscription: (payload) => {\n dispatch({ type: SUBSCRIPTION_REQUIRED, payload })\n },\n logout: (email, name) => {\n dispatch({ type: DEMO_LOGOUT, payload: agent.Auth.logout(), email: email, name: name })\n }\n});\n\nclass App extends React.Component {\n\n constructor(props){\n super(props);\n this.state = {\n newUser: true,\n onboardingStep: 0\n };\n }\n\n componentWillReceiveProps(nextProps) {\n\n if (nextProps.redirectTo) {\n history.push(nextProps.redirectTo);\n this.props.onRedirect();\n }\n\n }\n\n componentWillMount() {\n\n const token = window.localStorage.getItem('jwt');\n this.props.onLoad(token ? agent.Auth.current() : null, token);\n\n }\n\n componentDidMount() {\n\n if(this.props.currentUser && (window.location.pathname === '/login' || window.location.pathname === '/register') ) {\n\n history.push('/');\n this.props.onRedirect();\n }\n\n }\n\n componentDidUpdate(prevProps) {\n\n if(this.props.currentUser) {\n\n if(prevProps.currentUser !== this.props.currentUser){\n\n // if(!this.props.currentUser.admin && this.props.currentUser.state !== 'trialing' && this.props.currentUser.state !== 'purchased'){\n // this.props.checkSubscription(this.props.subscription)\n // }\n this.props.onClients(agent.Clients.all());\n this.props.onProjects(agent.Projects.all());\n }\n\n }\n\n }\n\n nextScreen(e) {\n\n e.preventDefault();\n\n if (this.state.onboardingStep === 6) {\n this.setState({ newUser: false })\n } else {\n this.setState(prevState => {\n return {onboardingStep: prevState.onboardingStep + 1}\n })\n }\n\n }\n\n register(e) {\n\n e.preventDefault();\n\n this.props.logout(\n (this.props.currentUser.email).replace('demo+',''),\n this.props.currentUser.name\n );\n history.push('/register');\n this.props.onRedirect();\n\n }\n\n render() {\n\n if (this.props.appLoaded && this.props.activeMonth && this.props.clientSize !== null) {\n\n const theme = (this.props.currentUser && this.props.currentUser.dark_mode) ? 'theme--dark' : 'theme--default';\n\n return (\n <ConnectedRouter history={history}>\n <React.Fragment>\n <div className={`theme ${theme}`}>\n <div id=\"mobile\">Sorry, we're still working on mobile support.</div>\n <AppRoute\n redirectTo={this.props.redirectTo}\n activeMonth={this.props.activeMonth}\n nextMonth={this.props.nextMonth}\n prevMonth={this.props.prevMonth}\n currentMonth={this.props.currentMonth}\n currentUser={this.props.currentUser}\n subscription={this.props.subscription} />\n {((this.props.currentUser && this.props.currentUser.demo) ) && (\n <div className=\"demo\">\n <span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M5.121 17.804A13.937 13.937 0 0 1 12 16c2.5 0 4.847.655 6.879 1.804M15 10a3 3 0 1 1-6 0 3 3 0 0 1 6 0zm6 2a9 9 0 1 1-18 0 9 9 0 0 1 18 0z\" stroke=\"#003845\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" fill=\"none\"></path>\n </svg>\n Get an account like this for your business.\n </span>\n <button\n onClick={this.register.bind(this)}\n className=\"btn btn__primary\">\n <span>Start your free trial</span>\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path d=\"M17 8l4 4m0 0l-4 4m4-4H3\" stroke=\"#003845\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"></path>\n </svg>\n </button>\n </div>\n )}\n {( (this.props.currentUser && this.state.newUser && this.props.currentUser.new_user) ) && (\n <div className=\"c-modal-cover takeover\">\n <div className=\"c-modal\">\n <div className=\"c-modal__body\">\n\n <div className={this.state.onboardingStep !== 0 ? 'hidden' : '' }>\n <h1>Hey { this.props.currentUser.first_name }!</h1>\n <p>Thanks for giving Slate a try. To help get you started we'd love to show you a things to make the most of your trial.</p>\n </div>\n\n <div className={this.state.onboardingStep !== 1 ? 'hidden' : '' }>\n <h1>Adding work to a single day</h1>\n <p>If you want to add some work to a single day, simply find the day in your schedule and click anywhere inside.</p>\n </div>\n\n <div className={this.state.onboardingStep !== 2 ? 'hidden' : '' }>\n <h1>Adding work to multiple days</h1>\n <p>If you want to add work to multiple days, simply drag your mouse over the days you want to book.</p>\n </div>\n\n <div className={this.state.onboardingStep !== 3 ? 'hidden' : '' }>\n <h1>Moving work to another day</h1>\n <p>If you need to move some work you've already added to your schedule, drag & drop it to another day.</p>\n </div>\n\n <div className={this.state.onboardingStep !== 4 ? 'hidden' : '' }>\n <h1>Multiple clients on a day</h1>\n <p>If you're working for multiple clients on a day, we'll tell you how much time is available so you don't overbook yourself.</p>\n </div>\n\n <div className={this.state.onboardingStep !== 5 ? 'hidden' : '' }>\n <h1>Monthly performance</h1>\n <p>Everytime you update your schedule, we populate the sidebar with stats and analysis for the month.</p>\n </div>\n\n <div className={this.state.onboardingStep !== 6 ? 'hidden' : '' }>\n <h1>Yearly performance</h1>\n <p>We also measure your performance across the year when your schedule is updated, giving you a snapshot of each month.</p>\n </div>\n\n <button onClick={this.nextScreen.bind(this)} className=\"btn\">{ this.state.onboardingStep < 6 ? 'Continue' : 'Start using Slate'}</button>\n\n </div>\n <div>\n <img src={images.onboarding__00} alt=\"Step 1\" className={this.state.onboardingStep !== 0 ? 'hidden' : '' } />\n <img src={images.onboarding__01} alt=\"Step 2\" className={this.state.onboardingStep !== 1 ? 'hidden' : '' } />\n <img src={images.onboarding__02} alt=\"Step 3\" className={this.state.onboardingStep !== 2 ? 'hidden' : '' } />\n <img src={images.onboarding__03} alt=\"Step 4\" className={this.state.onboardingStep !== 3 ? 'hidden' : '' } />\n <img src={images.onboarding__04} alt=\"Step 5\" className={this.state.onboardingStep !== 4 ? 'hidden' : '' } />\n <img src={images.onboarding__05} alt=\"Step 6\" className={this.state.onboardingStep !== 5 ? 'hidden' : '' } />\n <img src={images.onboarding__06} alt=\"Step 7\" className={this.state.onboardingStep !== 6 ? 'hidden' : '' } />\n </div>\n </div>\n </div>\n )}\n <div className=\"overlay\"></div>\n </div>\n </React.Fragment>\n </ConnectedRouter>\n );\n }\n return (\n <div className=\"loading\"><div className=\"loader\"></div></div>\n );\n }\n}\n\n// App.contextTypes = {\n// router: PropTypes.object.isRequired\n// };\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\n","import ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport React from 'react';\nimport configureStore, { history } from './configureStore'\nimport App from './components/App';\n\nconst store = configureStore(/* provide initial state if any */)\n\nReactDOM.render((\n <Provider store={store}>\n <App history={history} />\n </Provider>\n\n), document.getElementById('root'));\n","import auth from './reducers/auth';\nimport { combineReducers } from 'redux';\nimport common from './reducers/common';\nimport home from './reducers/home';\nimport clients from './reducers/clients';\nimport projects from './reducers/projects';\nimport invoices from './reducers/invoices';\nimport tasks from './reducers/tasks';\nimport settings from './reducers/settings';\nimport schedule from './reducers/schedule';\nimport months from './reducers/months';\nimport years from './reducers/years';\nimport admin_users from './reducers/admin_users';\nimport { connectRouter } from 'connected-react-router'\n\nexport default (history) => combineReducers({\n auth,\n common,\n home,\n settings,\n schedule,\n clients,\n projects,\n invoices,\n tasks,\n months,\n years,\n admin_users,\n router: connectRouter(history),\n});\n"],"sourceRoot":""}