├── .babelrc ├── .eslintignore ├── .eslintrc ├── .gitignore ├── CODE_OF_CONDUCT.md ├── LICENSE.txt ├── _config.yml ├── documentation ├── css │ ├── bootstrap.css │ ├── prism.css │ └── style.css ├── favicon.ico ├── fonts │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 ├── images │ ├── BossAdminChooseTheme.png │ ├── BossAdminTable.png │ ├── banner.jpg │ ├── detail_icon.png │ ├── fonts.jpg │ ├── icons.png │ ├── logo.png │ ├── roboto.png │ ├── ss_code.png │ └── ss_code2.png ├── index.html └── js │ ├── bootstrap.bundle.js │ ├── bootstrap.bundle.js.map │ ├── jquery.js │ ├── jquery.nav.js │ └── prism.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── readme.md ├── src ├── app │ ├── actions │ │ ├── CalendarEventActions.js │ │ ├── ContactActions.js │ │ ├── CrudTbActions.js │ │ ├── EcommerceActions.js │ │ ├── ReduxFormActions.js │ │ ├── TreeTableActions.js │ │ ├── UiActions.js │ │ └── actionTypes.js │ ├── components │ │ ├── App │ │ │ ├── App.js │ │ │ ├── Dashboard.js │ │ │ ├── Outer.js │ │ │ └── appStyles-jss.js │ │ ├── Badges │ │ │ └── LimitedBadges.js │ │ ├── BreadCrumb │ │ │ ├── BreadCrumb.js │ │ │ └── breadCrumb-jss.js │ │ ├── Calendar │ │ │ ├── AddEvent.js │ │ │ ├── AddEventForm.js │ │ │ ├── DetailEvent.js │ │ │ ├── EventCalendar.js │ │ │ └── calendar-jss.js │ │ ├── CardPaper │ │ │ ├── GeneralCard.js │ │ │ ├── IdentityCard.js │ │ │ ├── NewsCard.js │ │ │ ├── PlayerCard.js │ │ │ ├── PostCard.js │ │ │ ├── ProductCard.js │ │ │ ├── ProfileCard.js │ │ │ ├── VideoCard.js │ │ │ └── cardStyle-jss.js │ │ ├── Cart │ │ │ ├── Cart.js │ │ │ └── cart-jss.js │ │ ├── Contact │ │ │ ├── AddContact.js │ │ │ ├── AddContactForm.js │ │ │ ├── ContactDetail.js │ │ │ ├── ContactHeader.js │ │ │ ├── ContactList.js │ │ │ └── contact-jss.js │ │ ├── Counter │ │ │ └── CounterWidget.js │ │ ├── Error │ │ │ └── ErrorWrap.js │ │ ├── Footer │ │ │ ├── Footer.js │ │ │ └── Footer.scss │ │ ├── Forms │ │ │ ├── LoginForm.js │ │ │ ├── RegisterForm.js │ │ │ ├── helpers │ │ │ │ └── helpers.js │ │ │ └── user-jss.js │ │ ├── Gallery │ │ │ ├── ProductDetail.js │ │ │ ├── ProductGallery.js │ │ │ └── product-jss.js │ │ ├── Header │ │ │ ├── Header.js │ │ │ ├── UserMenu.js │ │ │ └── header-jss.js │ │ ├── MarketingAds │ │ │ └── MarketingAds.js │ │ ├── Notification │ │ │ └── Notification.js │ │ ├── Panel │ │ │ ├── FloatingPanel.js │ │ │ └── panel-jss.js │ │ ├── PapperBlock │ │ │ ├── PapperBlock.js │ │ │ └── papperStyle-jss.js │ │ ├── Quote │ │ │ └── Quote.js │ │ ├── Search │ │ │ ├── SearchProduct.js │ │ │ └── search-jss.js │ │ ├── Sidebar │ │ │ ├── MainMenu.js │ │ │ ├── OtherMenu.js │ │ │ ├── Sidebar.js │ │ │ └── sidebar-jss.js │ │ ├── SourceReader │ │ │ └── SourceReader.js │ │ ├── Tables │ │ │ ├── AdvTable.js │ │ │ ├── CrudTable.js │ │ │ ├── EmptyData.js │ │ │ ├── TreeTable.js │ │ │ └── tableParts │ │ │ │ ├── DatePickerCell.js │ │ │ │ ├── EditableCell.js │ │ │ │ ├── Form.js │ │ │ │ ├── MainTable.js │ │ │ │ ├── Row.js │ │ │ │ ├── SelectableCell.js │ │ │ │ ├── TableHeader.js │ │ │ │ ├── TableToolbar.js │ │ │ │ ├── TimePickerCell.js │ │ │ │ ├── ToggleCell.js │ │ │ │ └── tableStyle-jss.js │ │ ├── Widget │ │ │ ├── AlbumWidget.js │ │ │ ├── AreaChartWidget.js │ │ │ ├── CarouselWidget.js │ │ │ ├── CounterIconsWidget.js │ │ │ └── widget-jss.js │ │ └── index.js │ ├── config │ │ ├── codePreview.js │ │ ├── default.js │ │ ├── environment.js │ │ └── index.js │ ├── redux │ │ ├── helpers │ │ │ └── dateTimeHelper.js │ │ ├── middleware │ │ │ └── clientMiddleware.js │ │ ├── modules │ │ │ ├── calendar.js │ │ │ ├── contact.js │ │ │ ├── crudTable.js │ │ │ ├── ecommerce.js │ │ │ ├── initForm.js │ │ │ ├── login.js │ │ │ ├── treeTable.js │ │ │ └── ui.js │ │ ├── reducer.js │ │ └── store.js │ ├── routes │ │ ├── Charts │ │ │ ├── AreaCharts.js │ │ │ ├── BarCharts.js │ │ │ ├── CompossedCharts.js │ │ │ ├── LineCharts.js │ │ │ ├── PieCharts.js │ │ │ ├── RadarCharts.js │ │ │ ├── ResponsiveCharts.js │ │ │ ├── ScatterCharts.js │ │ │ └── demos │ │ │ │ ├── AreaNegativePositive.js │ │ │ │ ├── AreaPercent.js │ │ │ │ ├── AreaResponsive.js │ │ │ │ ├── AreaSimple.js │ │ │ │ ├── AreaStacked.js │ │ │ │ ├── BarCustom.js │ │ │ │ ├── BarCustomLabel.js │ │ │ │ ├── BarMix.js │ │ │ │ ├── BarPositiveNegative.js │ │ │ │ ├── BarResponsive.js │ │ │ │ ├── BarSimple.js │ │ │ │ ├── BarStacked.js │ │ │ │ ├── CompossedLineBarArea.js │ │ │ │ ├── CompossedResponsive.js │ │ │ │ ├── CompossedSameData.js │ │ │ │ ├── CompossedVertical.js │ │ │ │ ├── DoubleRadar.js │ │ │ │ ├── LineCustomDot.js │ │ │ │ ├── LineCustomLabel.js │ │ │ │ ├── LineResponsive.js │ │ │ │ ├── LineSimple.js │ │ │ │ ├── LineVertical.js │ │ │ │ ├── PieCustomLabel.js │ │ │ │ ├── PieCustomShape.js │ │ │ │ ├── PieSimple.js │ │ │ │ ├── RadarSimple.js │ │ │ │ ├── ScatterCustom.js │ │ │ │ ├── ScatterJoinLine.js │ │ │ │ ├── ScatterMultiple.js │ │ │ │ ├── ScatterResponsive.js │ │ │ │ ├── ScatterSimple.js │ │ │ │ ├── index.js │ │ │ │ └── sampleData.js │ │ ├── Dashboard │ │ │ ├── Dashboard.js │ │ │ ├── DashboardV2.js │ │ │ └── dashboard-jss.js │ │ ├── Forms │ │ │ ├── Autocomplete.js │ │ │ ├── Buttons.js │ │ │ ├── CheckboxRadio.js │ │ │ ├── DateTimePicker.js │ │ │ ├── Rating.js │ │ │ ├── ReduxForm.js │ │ │ ├── Selectbox.js │ │ │ ├── SliderRange.js │ │ │ ├── Switches.js │ │ │ ├── TextEditor.js │ │ │ ├── Textbox.js │ │ │ ├── Upload.js │ │ │ └── demos │ │ │ │ ├── AutoSuggest.js │ │ │ │ ├── Checkboxes.js │ │ │ │ ├── ComplexButtons.js │ │ │ │ ├── ControlledSelectbox.js │ │ │ │ ├── CustomButtons.js │ │ │ │ ├── DateInput.js │ │ │ │ ├── DateTimeInput.js │ │ │ │ ├── FloatingButtons.js │ │ │ │ ├── FormattedInputs.js │ │ │ │ ├── HighlightSuggest.js │ │ │ │ ├── InputAdornments.js │ │ │ │ ├── MultipleSelectbox.js │ │ │ │ ├── NativeSelectbox.js │ │ │ │ ├── RadioButton.js │ │ │ │ ├── ReduxFormDemo.js │ │ │ │ ├── SelectSuggestionTags.js │ │ │ │ ├── SelectSuggestions.js │ │ │ │ ├── SimpleSelectbox.js │ │ │ │ ├── StandardButtons.js │ │ │ │ ├── SwitchesInput.js │ │ │ │ ├── TagSuggestions.js │ │ │ │ ├── TextFields.js │ │ │ │ ├── TextFieldsLayout.js │ │ │ │ ├── TimeInput.js │ │ │ │ └── index.js │ │ ├── Layouts │ │ │ ├── AppLayout.js │ │ │ ├── Grid.js │ │ │ ├── Responsive.js │ │ │ └── demos │ │ │ │ ├── AutoLayout.js │ │ │ │ ├── Breakpoint.js │ │ │ │ ├── BreakpointGrid.js │ │ │ │ ├── Centered.js │ │ │ │ ├── FullHeader.js │ │ │ │ ├── FullWidth.js │ │ │ │ ├── GridLayout.js │ │ │ │ ├── Interactive.js │ │ │ │ ├── Limitation.js │ │ │ │ ├── MediaQueries.js │ │ │ │ ├── SidebarLayout.js │ │ │ │ ├── SidebarLayoutRight.js │ │ │ │ ├── WIthWIdth.js │ │ │ │ ├── breakpoint.md │ │ │ │ ├── index.js │ │ │ │ └── menuData.js │ │ ├── Maps │ │ │ ├── Info.js │ │ │ ├── MapDirection.js │ │ │ ├── MapMarker.js │ │ │ ├── SearchMap.js │ │ │ ├── StreetViewMap.js │ │ │ ├── TrafficIndicator.js │ │ │ └── demos │ │ │ │ ├── BasicMarker.js │ │ │ │ ├── Direction.js │ │ │ │ ├── PopoverMarker.js │ │ │ │ ├── SearchLocation.js │ │ │ │ ├── StreetView.js │ │ │ │ ├── Traffic.js │ │ │ │ └── index.js │ │ ├── NotFound │ │ │ └── NotFound.js │ │ ├── Pages │ │ │ ├── BlankPage │ │ │ │ └── index.js │ │ │ ├── Calendar │ │ │ │ └── index.js │ │ │ ├── Chat │ │ │ │ └── index.js │ │ │ ├── Contact │ │ │ │ └── index.js │ │ │ ├── Ecommerce │ │ │ │ └── index.js │ │ │ ├── Email │ │ │ │ └── index.js │ │ │ ├── Error │ │ │ │ └── index.js │ │ │ ├── Maintenance │ │ │ │ └── index.js │ │ │ ├── Photos │ │ │ │ └── index.js │ │ │ ├── SocialMedia │ │ │ │ └── index.js │ │ │ ├── Standalone │ │ │ │ ├── LoginDedicated.js │ │ │ │ └── NotFoundDedicated.js │ │ │ ├── UserProfile │ │ │ │ └── index.js │ │ │ └── Users │ │ │ │ ├── LockScreen.js │ │ │ │ ├── Login.js │ │ │ │ ├── Register.js │ │ │ │ └── ResetPassword.js │ │ ├── Parent │ │ │ └── index.js │ │ ├── Tables │ │ │ ├── AdvancedTable.js │ │ │ ├── BasicTable.js │ │ │ ├── CrudTable.js │ │ │ ├── TablePlayground.js │ │ │ ├── TreeTable.js │ │ │ └── demos │ │ │ │ ├── AdvTableDemo.js │ │ │ │ ├── BorderedTable.js │ │ │ │ ├── CrudTableDemo.js │ │ │ │ ├── EmptyTable.js │ │ │ │ ├── HoverTable.js │ │ │ │ ├── SimpleTable.js │ │ │ │ ├── StatusColorRow.js │ │ │ │ ├── StatusLabel.js │ │ │ │ ├── StrippedTable.js │ │ │ │ ├── TrackingTable.js │ │ │ │ ├── TreeTableDemo.js │ │ │ │ ├── dataTreeTable.js │ │ │ │ ├── index.js │ │ │ │ └── sampleData.js │ │ ├── Themes │ │ │ ├── ThemeThumb.js │ │ │ ├── index.js │ │ │ └── themeStyles-jss.js │ │ ├── UiElements │ │ │ ├── Accordion.js │ │ │ ├── Avatars.js │ │ │ ├── Badges.js │ │ │ ├── Breadcrumbs.js │ │ │ ├── Cards.js │ │ │ ├── DialogModal.js │ │ │ ├── Dividers.js │ │ │ ├── DrawerMenu.js │ │ │ ├── ImageGrid.js │ │ │ ├── List.js │ │ │ ├── Notification.js │ │ │ ├── Paginations.js │ │ │ ├── PopoverTooltip.js │ │ │ ├── Progress.js │ │ │ ├── SliderCarousel.js │ │ │ ├── Steppers.js │ │ │ ├── Tabs.js │ │ │ ├── Tags.js │ │ │ ├── Typography.js │ │ │ └── demos │ │ │ │ ├── Accordion │ │ │ │ ├── AdvancedAccordion.js │ │ │ │ ├── ControlledAccordion.js │ │ │ │ └── SimpleAccordion.js │ │ │ │ ├── Avatars │ │ │ │ ├── AvatarsDemo.js │ │ │ │ └── AvatarsPractice.js │ │ │ │ ├── Badges │ │ │ │ ├── CommonBadges.js │ │ │ │ └── VariantBadges.js │ │ │ │ ├── Breadcrumbs │ │ │ │ ├── ClassicBreadcrumbs.js │ │ │ │ └── PaperBreadcrumbs.js │ │ │ │ ├── Cards │ │ │ │ ├── ControlCards.js │ │ │ │ ├── EcommerceCards.js │ │ │ │ ├── PaperSheet.js │ │ │ │ ├── SocialCards.js │ │ │ │ └── StandardCards.js │ │ │ │ ├── DialogModal │ │ │ │ ├── AlertDialog.js │ │ │ │ ├── ConfirmationDialog.js │ │ │ │ ├── FormDialog.js │ │ │ │ ├── FullScreenDialog.js │ │ │ │ ├── ModalDemo.js │ │ │ │ ├── SelectDialog.js │ │ │ │ └── SelectRadioDialog.js │ │ │ │ ├── DrawerMenu │ │ │ │ ├── BasicMenu.js │ │ │ │ ├── DropdownMenu.js │ │ │ │ ├── MenuTransition.js │ │ │ │ ├── MiniDrawer.js │ │ │ │ ├── PermanentDrawer.js │ │ │ │ ├── PersistentDrawer.js │ │ │ │ ├── StyledMenu.js │ │ │ │ ├── SwipeDrawer.js │ │ │ │ ├── TemporaryDrawer.js │ │ │ │ └── menuData.js │ │ │ │ ├── ImageGrid │ │ │ │ ├── AdvancedGridList.js │ │ │ │ ├── ImageGridList.js │ │ │ │ ├── SingleLineGridList.js │ │ │ │ └── TitlebarGridList.js │ │ │ │ ├── List │ │ │ │ ├── ListBasic.js │ │ │ │ ├── ListControl.js │ │ │ │ ├── ListInteractive.js │ │ │ │ ├── ListMenu.js │ │ │ │ └── PinnedList.js │ │ │ │ ├── Notification │ │ │ │ ├── SimpleNotif.js │ │ │ │ ├── StyledNotif.js │ │ │ │ └── TransitionNotif.js │ │ │ │ ├── PopoverTooltip │ │ │ │ ├── PopoverPlayground.js │ │ │ │ ├── PositionedTooltips.js │ │ │ │ ├── SimplePopover.js │ │ │ │ └── SimpleTooltips.js │ │ │ │ ├── Progress │ │ │ │ ├── CircularDeterminate.js │ │ │ │ ├── CircularIndeterminate.js │ │ │ │ ├── CircularIntegration.js │ │ │ │ ├── CircularStatic.js │ │ │ │ ├── LinearBuffer.js │ │ │ │ ├── LinearDeterminate.js │ │ │ │ ├── LinearIndeterminate.js │ │ │ │ ├── LinearQuery.js │ │ │ │ ├── LinearStatic.js │ │ │ │ └── ProgressDelay.js │ │ │ │ ├── Steppers │ │ │ │ ├── HorizontalLinear.js │ │ │ │ ├── HorizontalNonLinear.js │ │ │ │ ├── MobileSteppers.js │ │ │ │ ├── StepperCarousel.js │ │ │ │ ├── StepperError.js │ │ │ │ └── VerticalStepper.js │ │ │ │ ├── Tabs │ │ │ │ ├── BottomNav.js │ │ │ │ ├── CenteredTabs.js │ │ │ │ ├── CustomTabs.js │ │ │ │ ├── DisabledTab.js │ │ │ │ ├── FixedTabs.js │ │ │ │ ├── IconTabs.js │ │ │ │ ├── LongTextTabs.js │ │ │ │ ├── ScrollIconTabs.js │ │ │ │ ├── ScrollTabs.js │ │ │ │ └── SimpleTabs.js │ │ │ │ ├── Tags │ │ │ │ ├── ArrayTags.js │ │ │ │ └── BasicTags.js │ │ │ │ ├── Typography │ │ │ │ ├── AlignTypo.js │ │ │ │ ├── ColouredTypo.js │ │ │ │ ├── GeneralTypo.js │ │ │ │ ├── Heading.js │ │ │ │ ├── ListTypo.js │ │ │ │ └── QuotesDemo.js │ │ │ │ └── index.js │ │ ├── index.js │ │ └── withTracker.js │ ├── styles │ │ ├── components │ │ │ ├── Code.scss │ │ │ ├── Form.scss │ │ │ ├── Messages.scss │ │ │ ├── Progress.scss │ │ │ ├── Table.scss │ │ │ ├── TextEditor.scss │ │ │ ├── Typography.scss │ │ │ └── vendors │ │ │ │ ├── react-big-calendar │ │ │ │ └── react-big-calendar.css │ │ │ │ ├── react-loading-bar │ │ │ │ └── index.css │ │ │ │ ├── select │ │ │ │ └── select.css │ │ │ │ └── slick-carousel │ │ │ │ ├── ajax-loader.gif │ │ │ │ ├── fonts │ │ │ │ ├── slick.eot │ │ │ │ ├── slick.svg │ │ │ │ ├── slick.ttf │ │ │ │ └── slick.woff │ │ │ │ ├── slick-carousel.css │ │ │ │ ├── slick-theme.css │ │ │ │ └── slick.css │ │ ├── layout │ │ │ ├── _base.scss │ │ │ ├── _buttons.scss │ │ │ ├── _forms.scss │ │ │ ├── _layout.scss │ │ │ ├── _lists.scss │ │ │ ├── _media.scss │ │ │ ├── _tables.scss │ │ │ ├── _typography.scss │ │ │ └── _variables.scss │ │ ├── mixins.scss │ │ ├── mixins │ │ │ ├── bourbon.scss │ │ │ ├── neat.scss │ │ │ └── pallete.scss │ │ ├── variables.scss │ │ └── variables │ │ │ ├── bitters.scss │ │ │ ├── custom_pallete.scss │ │ │ └── neat.scss │ └── utils │ │ ├── avatars.js │ │ ├── brand.js │ │ ├── carouselData.js │ │ ├── chartData.js │ │ ├── chartMiniData.js │ │ ├── chatData.js │ │ ├── connectionData.js │ │ ├── contactData.js │ │ ├── dummyContents.js │ │ ├── emailData.js │ │ ├── eventData.js │ │ ├── helpers.js │ │ ├── images.js │ │ ├── imgData.js │ │ ├── imgDataMasonry.js │ │ ├── menu.js │ │ ├── notifMessage.js │ │ ├── otherMenu.js │ │ ├── productData.js │ │ ├── screenshoot.js │ │ ├── themePalette.js │ │ ├── timelineData.js │ │ └── validation.js ├── client │ ├── index.js │ ├── normalize.scss │ └── root.js ├── helpers │ ├── ApiClient.js │ └── material-icon-cheat.txt └── server │ ├── SSR │ ├── createSSR.js │ └── html.js │ ├── env.js │ ├── rawdocs.js │ ├── rawicons.js │ ├── server.js │ └── start.js ├── static ├── favicons │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── images │ ├── avatars │ │ ├── pp_boy.svg │ │ ├── pp_boy2.svg │ │ ├── pp_boy3.svg │ │ ├── pp_boy4.svg │ │ ├── pp_boy5.svg │ │ ├── pp_girl.svg │ │ ├── pp_girl2.svg │ │ ├── pp_girl3.svg │ │ ├── pp_girl4.svg │ │ └── pp_girl5.svg │ ├── logo.svg │ ├── material_bg.svg │ ├── pp_boy.svg │ ├── pp_girl.svg │ └── spinner.gif └── logo.jpg └── webpack ├── universal-webpack-settings.json ├── webpack-dev-server.js ├── webpack.config.client.development.js ├── webpack.config.client.js ├── webpack.config.client.production.babel.js ├── webpack.config.js ├── webpack.config.server.development.babel.js ├── webpack.config.server.js └── webpack.config.server.production.babel.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "env", 4 | "react", 5 | "stage-0", 6 | "flow" 7 | ], 8 | "plugins": [ 9 | "react-hot-loader/babel", 10 | [ "babel-plugin-webpack-alias", { "config": "./webpack/webpack.config.js" } ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/.eslintignore -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint-config-airbnb", 4 | "plugin:flowtype/recommended" 5 | ], 6 | "env": { 7 | "browser": true, 8 | "node": true, 9 | "mocha": true, 10 | }, 11 | "parser": "babel-eslint", 12 | "rules": { 13 | "no-nested-ternary": 0, 14 | "import/no-unresolved": 0, 15 | "import/no-named-as-default": 0, 16 | "no-unused-expressions": 0, 17 | "comma-dangle": 0, // not sure why airbnb turned this on. gross! 18 | "indent": [2, 2, {"SwitchCase": 1}], 19 | "no-console": 0, 20 | "no-alert": 0, 21 | "id-length": 0, 22 | "no-script-url": 0, 23 | "import/no-extraneous-dependencies": 0, 24 | "no-underscore-dangle": 0, 25 | "react/jsx-filename-extension": 0, 26 | "global-require": 0, 27 | "import/newline-after-import": 0, 28 | "import/extensions": 0, 29 | "prefer-template": 0, 30 | "max-len": 0, 31 | "react/prefer-stateless-function": 0, 32 | "react/forbid-prop-types": 0, 33 | "jsx-a11y/href-no-hash": "off", 34 | "function-paren-newline": 0, 35 | "react/no-typos": 0, 36 | "jsx-a11y/anchor-is-valid": 0, 37 | "react/default-props-match-prop-types": 0, 38 | "arrow-parens": 0 39 | }, 40 | "plugins": [ 41 | "react", 42 | "import", 43 | "flowtype" 44 | ], 45 | "settings": { 46 | "import/parser": "babel-eslint", 47 | "import/resolve": { 48 | "moduleDirectory": ["node_modules", "src"] 49 | } 50 | }, 51 | "globals": { 52 | "__CLIENT__": true, 53 | "__SERVER__": true, 54 | "beforeAll": true, 55 | "afterAll": true, 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Webstorm 2 | .idea/ 3 | 4 | # OSX 5 | .DS_Store 6 | .AppleDouble 7 | .LSOverride 8 | 9 | # Node 10 | node_modules/ 11 | npm-debug.log 12 | yarn.lock 13 | 14 | *.iml 15 | .DB 16 | 17 | *.log 18 | .env 19 | 20 | # Dist 21 | static/server 22 | static/assets 23 | 24 | # Webpack 25 | webpack-assets.json 26 | webpack-stats.json 27 | 28 | # Sublime 29 | 30 | *.sublime-workspace 31 | *.sublime-project 32 | 33 | # Tests 34 | coverage/ 35 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Call-Em-All 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-slate -------------------------------------------------------------------------------- /documentation/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/favicon.ico -------------------------------------------------------------------------------- /documentation/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /documentation/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /documentation/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /documentation/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /documentation/images/BossAdminChooseTheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/BossAdminChooseTheme.png -------------------------------------------------------------------------------- /documentation/images/BossAdminTable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/BossAdminTable.png -------------------------------------------------------------------------------- /documentation/images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/banner.jpg -------------------------------------------------------------------------------- /documentation/images/detail_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/detail_icon.png -------------------------------------------------------------------------------- /documentation/images/fonts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/fonts.jpg -------------------------------------------------------------------------------- /documentation/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/icons.png -------------------------------------------------------------------------------- /documentation/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/logo.png -------------------------------------------------------------------------------- /documentation/images/roboto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/roboto.png -------------------------------------------------------------------------------- /documentation/images/ss_code.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/ss_code.png -------------------------------------------------------------------------------- /documentation/images/ss_code2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/documentation/images/ss_code2.png -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | var autoprefixer = require('autoprefixer'); 2 | 3 | module.exports = { 4 | plugins: [ 5 | autoprefixer({browsers: 'last 2 versions'}) 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /src/app/actions/CalendarEventActions.js: -------------------------------------------------------------------------------- 1 | import * as types from './actionTypes'; 2 | 3 | export const fetchAction = items => ({ 4 | type: types.FETCH_CALENDAR_DATA, 5 | items, 6 | }); 7 | 8 | export const addAction = { 9 | type: types.ADD_EVENT 10 | }; 11 | 12 | export const discardAction = { 13 | type: types.DISCARD_EVENT 14 | }; 15 | 16 | export const submitAction = newEvent => ({ 17 | type: types.SUBMIT_EVENT, 18 | newEvent, 19 | }); 20 | 21 | export const deleteAction = event => ({ 22 | type: types.DELETE_EVENT, 23 | event, 24 | }); 25 | 26 | export const closeNotifAction = { 27 | type: types.CLOSE_NOTIF 28 | }; 29 | -------------------------------------------------------------------------------- /src/app/actions/ContactActions.js: -------------------------------------------------------------------------------- 1 | import * as types from './actionTypes'; 2 | 3 | export const fetchAction = items => ({ 4 | type: types.FETCH_CONTACT_DATA, 5 | items, 6 | }); 7 | 8 | export const showDetailAction = item => ({ 9 | type: types.SHOW_DETAIL_CONTACT, 10 | item, 11 | }); 12 | 13 | export const hideDetailAction = { 14 | type: types.HIDE_DETAIL, 15 | }; 16 | 17 | export const submitAction = (newData, avatar) => ({ 18 | type: types.SUBMIT_CONTACT, 19 | newData, 20 | avatar 21 | }); 22 | 23 | export const addAction = { 24 | type: types.ADD_CONTACT, 25 | }; 26 | 27 | export const editAction = item => ({ 28 | type: types.EDIT_CONTACT, 29 | item, 30 | }); 31 | 32 | export const searchAction = keyword => ({ 33 | type: types.SEARCH_CONTACT, 34 | keyword, 35 | }); 36 | 37 | export const removeAction = item => ({ 38 | type: types.DELETE_CONTACT, 39 | item, 40 | }); 41 | 42 | export const closeAction = { 43 | type: types.CLOSE_CONTACT_FORM, 44 | }; 45 | 46 | export const addToFavoriteAction = item => ({ 47 | type: types.TOGGLE_FAVORITE, 48 | item, 49 | }); 50 | 51 | export const closeNotifAction = { 52 | type: types.CLOSE_NOTIF 53 | }; 54 | -------------------------------------------------------------------------------- /src/app/actions/CrudTbActions.js: -------------------------------------------------------------------------------- 1 | import * as types from './actionTypes'; 2 | 3 | export const fetchAction = (items, branch) => ({ 4 | branch, 5 | type: `${branch}/${types.FETCH_DATA}`, 6 | items 7 | }); 8 | export const addAction = (anchor, branch) => ({ 9 | branch, 10 | type: `${branch}/${types.ADD_EMPTY_ROW}`, 11 | anchor 12 | }); 13 | export const removeAction = (item, branch) => ({ 14 | branch, 15 | type: `${branch}/${types.REMOVE_ROW}`, 16 | item 17 | }); 18 | export const updateAction = (event, item, branch) => ({ 19 | branch, 20 | type: `${branch}/${types.UPDATE_ROW}`, 21 | event, 22 | item 23 | }); 24 | export const editAction = (item, branch) => ({ 25 | branch, 26 | type: `${branch}/${types.EDIT_ROW}`, 27 | item 28 | }); 29 | export const saveAction = (item, branch) => ({ 30 | branch, 31 | type: `${branch}/${types.SAVE_ROW}`, 32 | item 33 | }); 34 | export const closeNotifAction = branch => ({ 35 | branch, 36 | type: `${branch}/${types.CLOSE_NOTIF}`, 37 | }); 38 | -------------------------------------------------------------------------------- /src/app/actions/EcommerceActions.js: -------------------------------------------------------------------------------- 1 | import * as types from './actionTypes'; 2 | 3 | export const fetchAction = items => ({ 4 | type: types.FETCH_PRODUCT_DATA, 5 | items, 6 | }); 7 | 8 | export const searchAction = keyword => ({ 9 | type: types.SEARCH_PRODUCT, 10 | keyword, 11 | }); 12 | 13 | export const addAction = item => ({ 14 | type: types.ADD_TO_CART, 15 | item, 16 | }); 17 | 18 | export const removeAction = item => ({ 19 | type: types.DELETE_CART_ITEM, 20 | item, 21 | }); 22 | 23 | export const checkoutAction = ({ 24 | type: types.CHECKOUT, 25 | }); 26 | 27 | export const detailAction = item => ({ 28 | type: types.SHOW_DETAIL_PRODUCT, 29 | item 30 | }); 31 | 32 | export const closeNotifAction = { 33 | type: types.CLOSE_NOTIF 34 | }; 35 | -------------------------------------------------------------------------------- /src/app/actions/ReduxFormActions.js: -------------------------------------------------------------------------------- 1 | import * as types from './actionTypes'; 2 | 3 | export const initAction = (data) => ({ type: types.INIT, data }); 4 | export const clearAction = { type: types.CLEAR }; 5 | -------------------------------------------------------------------------------- /src/app/actions/TreeTableActions.js: -------------------------------------------------------------------------------- 1 | import * as types from './actionTypes'; 2 | 3 | const openAction = (keyID, child, branch) => ({ 4 | branch, 5 | type: `${branch}/${types.TOGGLE_TREE}`, 6 | keyID, 7 | child 8 | }); 9 | 10 | export default openAction; 11 | -------------------------------------------------------------------------------- /src/app/actions/UiActions.js: -------------------------------------------------------------------------------- 1 | import * as types from './actionTypes'; 2 | 3 | export const toggleAction = { type: types.TOGGLE_SIDEBAR }; 4 | export const openAction = initialLocation => ({ 5 | type: types.OPEN_SUBMENU, 6 | initialLocation 7 | }); 8 | export const changeThemeAction = theme => ({ 9 | type: types.CHANGE_THEME, 10 | theme 11 | }); 12 | export const playTransitionAction = isLoaded => ({ 13 | type: types.LOAD_PAGE, 14 | isLoaded 15 | }); 16 | -------------------------------------------------------------------------------- /src/app/components/App/Outer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { object, PropTypes } from 'prop-types'; 3 | import { renderRoutes } from 'react-router-config'; 4 | import { withStyles } from '@material-ui/core/styles'; 5 | import Hidden from '@material-ui/core/Hidden'; 6 | import brand from 'ba-utils/brand'; 7 | import logo from 'ba-images/logo.svg'; 8 | import styles from './appStyles-jss'; 9 | 10 | class Outer extends React.Component { 11 | render() { 12 | const { 13 | classes, 14 | route, 15 | } = this.props; 16 | return ( 17 |
18 |
19 | 20 |
21 | {brand.name} 22 |

{brand.name}

23 |
24 |
25 | {renderRoutes(route.routes)} 26 |
27 |
28 | ); 29 | } 30 | } 31 | 32 | Outer.propTypes = { 33 | classes: PropTypes.object.isRequired, 34 | route: object, 35 | }; 36 | 37 | Outer.defaultProps = { 38 | route: object 39 | }; 40 | 41 | export default (withStyles(styles)(Outer)); 42 | -------------------------------------------------------------------------------- /src/app/components/Badges/LimitedBadges.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import Badge from '@material-ui/core/Badge'; 4 | 5 | class LimitedBadges extends PureComponent { 6 | render() { 7 | const { 8 | children, 9 | limit, 10 | value, 11 | ...rest 12 | } = this.props; 13 | return ( 14 | limit ? limit + '+' : value} {...rest}> 15 | { children } 16 | 17 | ); 18 | } 19 | } 20 | 21 | LimitedBadges.propTypes = { 22 | children: PropTypes.node.isRequired, 23 | value: PropTypes.number.isRequired, 24 | limit: PropTypes.number.isRequired, 25 | }; 26 | 27 | export default LimitedBadges; 28 | -------------------------------------------------------------------------------- /src/app/components/BreadCrumb/BreadCrumb.js: -------------------------------------------------------------------------------- 1 | import React, { Fragment } from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import classNames from 'classnames'; 5 | import { Link, Route } from 'react-router-dom'; 6 | import styles from './breadCrumb-jss'; 7 | 8 | const Breadcrumbs = (props) => { 9 | const { 10 | classes, 11 | theme, 12 | separator, 13 | location 14 | } = props; 15 | return ( 16 |
17 | { 20 | let parts = location.pathname.split('/'); 21 | const place = parts[parts.length - 1]; 22 | parts = parts.slice(1, parts.length - 1); 23 | return ( 24 |

25 | You are here: 26 | 27 | { 28 | parts.map((part, partIndex) => { 29 | const path = ['', ...parts.slice(0, partIndex + 1)].join('/'); 30 | return ( 31 | 32 | {part} 33 | { separator } 34 | 35 | ); 36 | }) 37 | } 38 |  {place} 39 | 40 |

41 | ); 42 | }} 43 | /> 44 |
45 | ); 46 | }; 47 | 48 | Breadcrumbs.propTypes = { 49 | classes: PropTypes.object.isRequired, 50 | location: PropTypes.object.isRequired, 51 | theme: PropTypes.string.isRequired, 52 | separator: PropTypes.string.isRequired, 53 | }; 54 | 55 | export default withStyles(styles)(Breadcrumbs); 56 | -------------------------------------------------------------------------------- /src/app/components/BreadCrumb/breadCrumb-jss.js: -------------------------------------------------------------------------------- 1 | const styles = theme => ({ 2 | dark: {}, 3 | breadcrumbs: { 4 | position: 'relative', 5 | display: 'block', 6 | fontSize: 12, 7 | color: 'rgba(255, 255, 255, 0.5)', 8 | '& p': { 9 | display: 'block', 10 | '& span': { 11 | textTransform: 'capitalize', 12 | marginLeft: 5, 13 | }, 14 | '& a': { 15 | color: theme.palette.common.white, 16 | textDecoration: 'none', 17 | margin: '0 5px' 18 | } 19 | }, 20 | '&$dark': { 21 | color: theme.palette.grey[900], 22 | '& a': { 23 | color: theme.palette.grey[900] 24 | } 25 | } 26 | } 27 | }); 28 | 29 | export default styles; 30 | -------------------------------------------------------------------------------- /src/app/components/Calendar/AddEvent.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Button from '@material-ui/core/Button'; 5 | import Add from '@material-ui/icons/Add'; 6 | import Tooltip from '@material-ui/core/Tooltip'; 7 | import FloatingPanel from './../Panel/FloatingPanel'; 8 | import AddEventForm from './AddEventForm'; 9 | import styles from './calendar-jss.js'; 10 | 11 | class AddEvent extends React.Component { 12 | showResult(values) { 13 | setTimeout(() => { 14 | this.props.submit(values); 15 | }, 500); // simulate server latency 16 | } 17 | 18 | render() { 19 | const { 20 | classes, 21 | openForm, 22 | closeForm, 23 | addEvent 24 | } = this.props; 25 | const branch = ''; 26 | return ( 27 |
28 | 29 | 32 | 33 | closeForm()}> 34 | this.showResult(values)} /> 35 | 36 |
37 | ); 38 | } 39 | } 40 | 41 | AddEvent.propTypes = { 42 | classes: PropTypes.object.isRequired, 43 | openForm: PropTypes.bool.isRequired, 44 | addEvent: PropTypes.func.isRequired, 45 | closeForm: PropTypes.func.isRequired, 46 | submit: PropTypes.func.isRequired, 47 | }; 48 | 49 | export default withStyles(styles)(AddEvent); 50 | -------------------------------------------------------------------------------- /src/app/components/CardPaper/NewsCard.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Card from '@material-ui/core/Card'; 5 | import CardMedia from '@material-ui/core/CardMedia'; 6 | import CardActions from '@material-ui/core/CardActions'; 7 | import CardContent from '@material-ui/core/CardContent'; 8 | import Button from '@material-ui/core/Button'; 9 | import styles from './cardStyle-jss'; 10 | 11 | class NewsCard extends React.Component { 12 | render() { 13 | const { 14 | classes, 15 | children, 16 | title, 17 | image, 18 | } = this.props; 19 | return ( 20 | 21 | 26 | 27 | {children} 28 | 29 | 30 | 33 | 36 | 37 | 38 | ); 39 | } 40 | } 41 | 42 | NewsCard.propTypes = { 43 | classes: PropTypes.object.isRequired, 44 | children: PropTypes.node.isRequired, 45 | title: PropTypes.string.isRequired, 46 | image: PropTypes.string.isRequired, 47 | }; 48 | 49 | export default withStyles(styles)(NewsCard); 50 | -------------------------------------------------------------------------------- /src/app/components/Cart/cart-jss.js: -------------------------------------------------------------------------------- 1 | const styles = theme => ({ 2 | totalPrice: { 3 | background: theme.palette.grey[200], 4 | textAlign: 'right', 5 | display: 'block' 6 | }, 7 | cartWrap: { 8 | [theme.breakpoints.up('sm')]: { 9 | width: 400, 10 | }, 11 | '&:focus': { 12 | outline: 'none' 13 | } 14 | }, 15 | itemText: { 16 | marginRight: 30, 17 | overflow: 'hidden', 18 | whiteSpace: 'nowrap', 19 | textOverflow: 'ellipsis', 20 | width: 220 21 | }, 22 | cartPanel: { 23 | '& figure': { 24 | width: 120, 25 | height: 70, 26 | overflow: 'hidden', 27 | '& img': { 28 | maxWidth: '100%' 29 | } 30 | } 31 | }, 32 | empty: { 33 | textAlign: 'center', 34 | padding: 20 35 | } 36 | }); 37 | 38 | export default styles; 39 | -------------------------------------------------------------------------------- /src/app/components/Footer/Footer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import styles from './Footer.scss'; 3 | 4 | const Footer = () => ( 5 |
6 | Footer 7 |
8 | ); 9 | 10 | export default Footer; 11 | -------------------------------------------------------------------------------- /src/app/components/Footer/Footer.scss: -------------------------------------------------------------------------------- 1 | @import "../../styles/variables"; 2 | @import "../../styles/mixins"; 3 | 4 | $Footer: 'Footer'; 5 | 6 | .#{$Footer} { 7 | display: flex; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/components/Forms/helpers/helpers.js: -------------------------------------------------------------------------------- 1 | export default function isImage(file) { 2 | const fileName = file.name || file.path; 3 | const suffix = fileName.substr(fileName.indexOf('.') + 1).toLowerCase(); 4 | if (suffix === 'jpg' || suffix === 'jpeg' || suffix === 'bmp' || suffix === 'png') { 5 | return true; 6 | } 7 | return false; 8 | } 9 | -------------------------------------------------------------------------------- /src/app/components/Notification/Notification.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Snackbar from '@material-ui/core/Snackbar'; 5 | import IconButton from '@material-ui/core/IconButton'; 6 | import CloseIcon from '@material-ui/icons/Close'; 7 | 8 | const styles = theme => ({ 9 | close: { 10 | width: theme.spacing.unit * 4, 11 | height: theme.spacing.unit * 4, 12 | }, 13 | }); 14 | 15 | class Notification extends React.Component { 16 | handleClose = (event, reason) => { 17 | if (reason === 'clickaway') { 18 | return; 19 | } 20 | this.props.close('crudTableDemo'); 21 | }; 22 | 23 | render() { 24 | const { classes, message } = this.props; 25 | return ( 26 | this.handleClose()} 34 | ContentProps={{ 35 | 'aria-describedby': 'message-id', 36 | }} 37 | message={message} 38 | action={[ 39 | this.handleClose()} 45 | > 46 | 47 | , 48 | ]} 49 | /> 50 | ); 51 | } 52 | } 53 | 54 | Notification.propTypes = { 55 | classes: PropTypes.object.isRequired, 56 | close: PropTypes.func.isRequired, 57 | message: PropTypes.string.isRequired, 58 | }; 59 | 60 | export default withStyles(styles)(Notification); 61 | -------------------------------------------------------------------------------- /src/app/components/PapperBlock/PapperBlock.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import classNames from 'classnames'; 4 | import { withStyles } from '@material-ui/core/styles'; 5 | import Paper from '@material-ui/core/Paper'; 6 | import Typography from '@material-ui/core/Typography'; 7 | import styles from './papperStyle-jss'; 8 | 9 | function PaperSheet(props) { 10 | const { 11 | classes, 12 | title, 13 | desc, 14 | children, 15 | whiteBg, 16 | noMargin, 17 | colorMode, 18 | overflowX 19 | } = props; 20 | return ( 21 |
22 | 23 | 24 | {title} 25 | 26 | 27 | {desc} 28 | 29 |
30 | {children} 31 |
32 |
33 |
34 | ); 35 | } 36 | 37 | PaperSheet.propTypes = { 38 | classes: PropTypes.object.isRequired, 39 | title: PropTypes.string.isRequired, 40 | desc: PropTypes.string.isRequired, 41 | children: PropTypes.node.isRequired, 42 | whiteBg: PropTypes.bool, 43 | colorMode: PropTypes.bool, 44 | noMargin: PropTypes.bool, 45 | overflowX: PropTypes.bool, 46 | }; 47 | 48 | PaperSheet.defaultProps = { 49 | whiteBg: false, 50 | noMargin: false, 51 | colorMode: false, 52 | overflowX: false 53 | }; 54 | 55 | export default withStyles(styles)(PaperSheet); 56 | -------------------------------------------------------------------------------- /src/app/components/PapperBlock/papperStyle-jss.js: -------------------------------------------------------------------------------- 1 | const styles = theme => ({ 2 | root: theme.mixins.gutters({ 3 | paddingTop: theme.spacing.unit * 3, 4 | paddingBottom: theme.spacing.unit * 3, 5 | marginTop: theme.spacing.unit * 3, 6 | '&$noMargin': { 7 | margin: 0 8 | }, 9 | }), 10 | title: { 11 | marginBottom: theme.spacing.unit * 4, 12 | paddingBottom: theme.spacing.unit * 2, 13 | position: 'relative', 14 | textTransform: 'capitalize', 15 | fontSize: 28, 16 | '&:after': { 17 | content: '""', 18 | display: 'block', 19 | position: 'absolute', 20 | bottom: 0, 21 | left: 0, 22 | width: 40, 23 | borderBottom: `4px solid ${theme.palette.primary.main}` 24 | } 25 | }, 26 | description: { 27 | maxWidth: 960, 28 | fontSize: 16, 29 | }, 30 | content: { 31 | marginTop: theme.spacing.unit * 2, 32 | padding: theme.spacing.unit, 33 | backgroundColor: theme.palette.background.default, 34 | }, 35 | whiteBg: { 36 | backgroundColor: 'transparent', 37 | margin: 0, 38 | }, 39 | noMargin: {}, 40 | colorMode: { 41 | backgroundColor: theme.palette.secondary.main, 42 | '& $title': { 43 | color: theme.palette.grey[100], 44 | '&:after': { 45 | borderBottom: `5px solid ${theme.palette.primary.light}` 46 | } 47 | }, 48 | '& $description': { 49 | color: theme.palette.grey[100], 50 | } 51 | }, 52 | overflowX: { 53 | width: '100%', 54 | overflowX: 'auto', 55 | } 56 | }); 57 | 58 | export default styles; 59 | -------------------------------------------------------------------------------- /src/app/components/Search/search-jss.js: -------------------------------------------------------------------------------- 1 | const styles = theme => ({ 2 | root: { 3 | flexGrow: 1, 4 | marginTop: 20, 5 | marginBottom: 40 6 | }, 7 | flex: { 8 | flex: 1, 9 | }, 10 | menuButton: { 11 | marginLeft: -12, 12 | marginRight: 20, 13 | }, 14 | wrapper: { 15 | fontFamily: theme.typography.fontFamily, 16 | position: 'relative', 17 | marginRight: theme.spacing.unit * 2, 18 | marginLeft: theme.spacing.unit, 19 | borderRadius: 2, 20 | display: 'block', 21 | }, 22 | search: { 23 | width: 'auto', 24 | height: '100%', 25 | position: 'absolute', 26 | pointerEvents: 'none', 27 | display: 'flex', 28 | alignItems: 'center', 29 | justifyContent: 'center', 30 | }, 31 | input: { 32 | font: 'inherit', 33 | padding: `${theme.spacing.unit}px ${theme.spacing.unit}px ${theme.spacing.unit}px ${theme.spacing.unit * 4}px`, 34 | border: 0, 35 | display: 'block', 36 | verticalAlign: 'middle', 37 | whiteSpace: 'normal', 38 | background: 'none', 39 | margin: 0, // Reset for Safari 40 | color: 'inherit', 41 | width: '100%', 42 | '&:focus': { 43 | outline: 0, 44 | }, 45 | }, 46 | }); 47 | 48 | export default styles; 49 | -------------------------------------------------------------------------------- /src/app/components/Sidebar/OtherMenu.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { NavLink } from 'react-router-dom'; 4 | import ListItem from '@material-ui/core/ListItem'; 5 | import ListItemText from '@material-ui/core/ListItemText'; 6 | import OtherMenuContent from 'ba-utils/otherMenu'; 7 | 8 | class OtherMenu extends React.Component { 9 | render() { 10 | const { toggleDrawerOpen } = this.props; 11 | const getOtherMenu = menuArray => menuArray.map((item, index) => { 12 | const keyIndex = index.toString(); 13 | return ( 14 |
15 | 21 | 22 | 23 |
24 | ); 25 | }); 26 | 27 | return ( 28 |
29 | {getOtherMenu(OtherMenuContent)} 30 |
31 | ); 32 | } 33 | } 34 | 35 | OtherMenu.propTypes = { 36 | toggleDrawerOpen: PropTypes.func.isRequired, 37 | }; 38 | 39 | export default OtherMenu; 40 | -------------------------------------------------------------------------------- /src/app/components/Tables/CrudTable.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import MainTable from './tableParts/MainTable'; 4 | 5 | class CrudTable extends React.Component { 6 | componentDidMount() { 7 | this.props.fetchData(this.props.dataInit, this.props.branch); 8 | } 9 | 10 | render() { 11 | const { 12 | title, 13 | dataTable, 14 | addEmptyRow, 15 | removeRow, 16 | updateRow, 17 | editRow, 18 | finishEditRow, 19 | anchor, 20 | branch 21 | } = this.props; 22 | return ( 23 | 34 | ); 35 | } 36 | } 37 | 38 | CrudTable.propTypes = { 39 | title: PropTypes.string.isRequired, 40 | anchor: PropTypes.array.isRequired, 41 | dataInit: PropTypes.array.isRequired, 42 | dataTable: PropTypes.object.isRequired, 43 | fetchData: PropTypes.func.isRequired, 44 | addEmptyRow: PropTypes.func.isRequired, 45 | removeRow: PropTypes.func.isRequired, 46 | updateRow: PropTypes.func.isRequired, 47 | editRow: PropTypes.func.isRequired, 48 | finishEditRow: PropTypes.func.isRequired, 49 | branch: PropTypes.string.isRequired, 50 | }; 51 | 52 | export default CrudTable; 53 | -------------------------------------------------------------------------------- /src/app/components/Tables/EmptyData.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import tableStyles from 'ba-components/Table.scss'; 3 | import TableIcon from '@material-ui/icons/Apps'; 4 | 5 | function EmptyData() { 6 | return ( 7 |
8 | 9 | No Data 10 |
11 | ); 12 | } 13 | 14 | export default EmptyData; 15 | -------------------------------------------------------------------------------- /src/app/components/Tables/tableParts/SelectableCell.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import Select from '@material-ui/core/Select'; 4 | import MenuItem from '@material-ui/core/MenuItem'; 5 | import TableCell from '@material-ui/core/TableCell'; 6 | import css from 'ba-components/Table.scss'; 7 | 8 | class SelectableCell extends React.Component { 9 | handleChange = event => { 10 | this.props.updateRow(event, this.props.branch); 11 | this.setState({ [event.target.name]: event.target.value }); 12 | }; 13 | render() { 14 | const { 15 | cellData, 16 | edited, 17 | options, 18 | } = this.props; 19 | return ( 20 | 21 | 33 | 34 | ); 35 | } 36 | } 37 | 38 | SelectableCell.propTypes = { 39 | options: PropTypes.array.isRequired, 40 | cellData: PropTypes.object.isRequired, 41 | updateRow: PropTypes.func.isRequired, 42 | edited: PropTypes.bool.isRequired, 43 | branch: PropTypes.string.isRequired, 44 | }; 45 | 46 | export default SelectableCell; 47 | -------------------------------------------------------------------------------- /src/app/components/Tables/tableParts/ToggleCell.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import TableCell from '@material-ui/core/TableCell'; 4 | import classNames from 'classnames'; 5 | import FormControlLabel from '@material-ui/core/FormControlLabel'; 6 | import Switch from '@material-ui/core/Switch'; 7 | import css from 'ba-components/Table.scss'; 8 | 9 | class ToggleCell extends React.Component { 10 | state = { 11 | isChecked: this.props.cellData.value 12 | }; 13 | handleChange = event => { 14 | this.setState({ isChecked: event.target.checked }); 15 | this.props.updateRow(event, this.props.branch); 16 | }; 17 | render() { 18 | const { 19 | cellData, 20 | edited, 21 | } = this.props; 22 | return ( 23 | 24 |
25 | 35 | } 36 | /> 37 | 38 | ); 39 | } 40 | } 41 | 42 | ToggleCell.propTypes = { 43 | cellData: PropTypes.object.isRequired, 44 | updateRow: PropTypes.func.isRequired, 45 | edited: PropTypes.bool.isRequired, 46 | branch: PropTypes.string.isRequired, 47 | }; 48 | 49 | export default ToggleCell; 50 | -------------------------------------------------------------------------------- /src/app/components/Tables/tableParts/tableStyle-jss.js: -------------------------------------------------------------------------------- 1 | import { lighten } from '@material-ui/core/styles/colorManipulator'; 2 | const styles = theme => ({ 3 | root: { 4 | paddingRight: theme.spacing.unit, 5 | }, 6 | rootTable: { 7 | width: '100%', 8 | marginTop: theme.spacing.unit * 3, 9 | overflowX: 'auto', 10 | }, 11 | highlight: 12 | theme.palette.type === 'light' ? { 13 | color: theme.palette.secondary.main, 14 | backgroundColor: lighten(theme.palette.secondary.light, 0.85), 15 | } : { 16 | color: theme.palette.text.primary, 17 | backgroundColor: theme.palette.secondary.dark, 18 | }, 19 | spacer: { 20 | flex: '1 1 100%', 21 | }, 22 | actionsToolbar: { 23 | color: theme.palette.text.secondary, 24 | flex: '1 0 auto', 25 | }, 26 | titleToolbar: { 27 | flex: '0 0 auto', 28 | }, 29 | filterBtn: { 30 | top: -5, 31 | }, 32 | textField: { 33 | flexBasis: 200, 34 | width: 300 35 | }, 36 | table: { 37 | minWidth: 900, 38 | }, 39 | actions: { 40 | color: theme.palette.text.secondary, 41 | margin: 10 42 | }, 43 | toolbar: { 44 | backgroundColor: theme.palette.grey[800], 45 | }, 46 | title: { 47 | flex: '0 0 auto', 48 | '& h2': { 49 | color: theme.palette.common.white 50 | } 51 | }, 52 | button: { 53 | margin: theme.spacing.unit, 54 | }, 55 | iconSmall: { 56 | fontSize: 20, 57 | }, 58 | leftIcon: { 59 | marginRight: theme.spacing.unit, 60 | }, 61 | }); 62 | 63 | export default styles; 64 | -------------------------------------------------------------------------------- /src/app/config/codePreview.js: -------------------------------------------------------------------------------- 1 | export default { 2 | enable: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/app/config/default.js: -------------------------------------------------------------------------------- 1 | import isUndefined from 'lodash/isUndefined'; 2 | 3 | const env = process.env.NODE_ENV; 4 | const ssl = !isUndefined(process.env.SSL) && +(process.env.SSL) === 1 ? 1 : 0; 5 | const prefix = 'http' + (ssl ? 's' : '') + '://'; 6 | const host = prefix + (process.env.HOST || 'localhost'); 7 | const port = !isUndefined(process.env.PORT) ? +(process.env.PORT) : ''; 8 | const apiSsl = !isUndefined(process.env.APISSL) && +(process.env.APISSL) === 1 ? 1 : 0; 9 | const prefixHost = 'http' + (apiSsl ? 's' : '') + '://'; 10 | const apiPort = !isUndefined(process.env.APIPORT) ? +(process.env.APIPORT) : ''; 11 | const apiHost = prefixHost + (!isUndefined(process.env.APIHOST) ? process.env.APIHOST : 'localhost') + (apiPort ? ':' + apiPort : ''); 12 | const ssr = !isUndefined(process.env.SSR) && +(process.env.SSR) === 1; 13 | const googleAnaliticsId = process.env.GOOGLE_ANALITICS_ID !== 'undefined' ? process.env.GOOGLE_ANALITICS_ID : ''; 14 | 15 | export default { 16 | env, 17 | ssl, 18 | host: host + (port ? `:${port}` : ''), 19 | port, 20 | apiSsl, 21 | apiPort, 22 | apiHost, 23 | ssr, 24 | googleAnaliticsId, 25 | 26 | server: { 27 | ssl, 28 | host, 29 | port: port || 8080, 30 | apiSsl, 31 | apiPort, 32 | apiHost 33 | }, 34 | 35 | webpack: { 36 | server: { 37 | ssl, 38 | host, 39 | port: port || 3001, 40 | apiSsl, 41 | apiPort, 42 | apiHost 43 | } 44 | } 45 | }; 46 | -------------------------------------------------------------------------------- /src/app/config/environment.js: -------------------------------------------------------------------------------- 1 | export default { 2 | development: { 3 | isProd: false 4 | }, 5 | production: { 6 | isProd: true 7 | } 8 | }[process.env.NODE_ENV || 'development']; 9 | -------------------------------------------------------------------------------- /src/app/config/index.js: -------------------------------------------------------------------------------- 1 | import config from './default'; 2 | import env from './environment'; 3 | 4 | export default { 5 | ...config, 6 | ...env 7 | }; 8 | -------------------------------------------------------------------------------- /src/app/redux/helpers/dateTimeHelper.js: -------------------------------------------------------------------------------- 1 | export function getDate() { 2 | let today = new Date(); 3 | let dd = today.getDate(); 4 | const monthNames = [ 5 | 'January', 'February', 'March', 'April', 'May', 'June', 6 | 'July', 'August', 'September', 'October', 'November', 'December' 7 | ]; 8 | const mm = monthNames[today.getMonth()]; // January is 0! 9 | const yyyy = today.getFullYear(); 10 | 11 | if (dd < 10) { 12 | dd = '0' + dd; 13 | } 14 | 15 | today = mm + ', ' + dd + ' ' + yyyy; 16 | 17 | return today; 18 | } 19 | 20 | export function getTime() { 21 | let now = new Date(); 22 | let h = now.getHours(); 23 | let m = now.getMinutes(); 24 | 25 | if (h < 10) { 26 | h = '0' + h; 27 | } 28 | 29 | if (m < 10) { 30 | m = '0' + m; 31 | } 32 | 33 | now = h + ':' + m; 34 | return now; 35 | } 36 | -------------------------------------------------------------------------------- /src/app/redux/middleware/clientMiddleware.js: -------------------------------------------------------------------------------- 1 | import { fromJS } from 'immutable'; 2 | 3 | export default function clientMiddleware(client) { 4 | return ({ dispatch, getState }) => 5 | next => (action) => { 6 | if (typeof action === 'function') { 7 | return action(dispatch, getState); 8 | } 9 | const { promise, types, ...rest } = action; // eslint-disable-line no-redeclare 10 | if (!promise) { 11 | return next(action); 12 | } 13 | 14 | const [REQUEST, SUCCESS, FAILURE] = types; 15 | next({ ...rest, type: REQUEST }); 16 | 17 | const actionPromise = promise(client); 18 | actionPromise.then( 19 | result => next({ ...rest, result: fromJS(result.data), type: SUCCESS }), 20 | ({ response = {} }) => next({ ...rest, error: fromJS(response.data), type: FAILURE }) 21 | ).catch(({ response = {} }) => { 22 | console.error('MIDDLEWARE ERROR:', response); 23 | next({ ...rest, error: fromJS(response.data), type: FAILURE }); 24 | }); 25 | return actionPromise; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /src/app/redux/modules/initForm.js: -------------------------------------------------------------------------------- 1 | import { fromJS, Map } from 'immutable'; 2 | import { INIT, CLEAR } from '../../actions/actionTypes'; 3 | 4 | const initialState = { 5 | formValues: Map() 6 | }; 7 | 8 | const initialImmutableState = fromJS(initialState); 9 | export default function reducer(state = initialImmutableState, action = {}) { 10 | switch (action.type) { 11 | case INIT: 12 | return state.withMutations((mutableState) => { 13 | mutableState.set('formValues', action.data); 14 | }); 15 | case CLEAR: 16 | return state.withMutations((mutableState) => { 17 | mutableState.set('formValues', []); 18 | }); 19 | default: 20 | return state; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/redux/modules/login.js: -------------------------------------------------------------------------------- 1 | import { Map, fromJS } from 'immutable'; 2 | import { INIT } from '../../actions/actionTypes'; 3 | 4 | const initialState = { 5 | usersLogin: Map({ 6 | email: 'johndoe@mail.com', 7 | password: '12345678', 8 | remember: false 9 | }) 10 | }; 11 | const initialImmutableState = fromJS(initialState); 12 | export default function reducer(state = initialImmutableState, action = {}) { 13 | switch (action.type) { 14 | case INIT: 15 | return state; 16 | default: 17 | return state; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/app/redux/modules/treeTable.js: -------------------------------------------------------------------------------- 1 | import { fromJS, List } from 'immutable'; 2 | import { TOGGLE_TREE } from '../../actions/actionTypes'; 3 | 4 | const initialState = { 5 | treeOpen: List([]), 6 | arrowMore: List([]) 7 | }; 8 | 9 | const initialImmutableState = fromJS(initialState); 10 | 11 | // Collect existing child and parent id's 12 | function collectId(id, listedId, collapsed, arrowLess) { 13 | arrowLess.push(id); 14 | for (let i = 0; i < listedId.size; i += 1) { 15 | if (listedId.getIn([i]).startsWith(id + '_')) { 16 | collapsed.push(listedId.getIn([i])); 17 | arrowLess.push(listedId.getIn([i])); 18 | } 19 | } 20 | } 21 | 22 | export default function reducer(state = initialImmutableState, action = {}) { 23 | const { branch } = action; 24 | switch (action.type) { 25 | case `${branch}/${TOGGLE_TREE}`: 26 | return state.withMutations((mutableState) => { 27 | const listedId = state.get('treeOpen'); 28 | const collapsed = []; 29 | const arrowLess = []; 30 | 31 | // Collect existing id 32 | collectId(action.keyID, listedId, collapsed, arrowLess); 33 | 34 | // Collapse and Expand row 35 | if (collapsed.length > 0) { // Collapse tree table 36 | mutableState.update('treeOpen', treeOpen => treeOpen.filter(x => collapsed.indexOf(x) < 0)); 37 | mutableState.update('arrowMore', arrowMore => arrowMore.filter(x => arrowLess.indexOf(x) < 0)); 38 | } else { // Expand tree table 39 | mutableState.update('arrowMore', arrowMore => arrowMore.push(action.keyID)); 40 | action.child.map(item => { 41 | mutableState.update('treeOpen', treeOpen => treeOpen.push(item.id)); 42 | return true; 43 | }); 44 | } 45 | }); 46 | default: 47 | return state; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/app/redux/reducer.js: -------------------------------------------------------------------------------- 1 | import { reducer as form } from 'redux-form/immutable'; 2 | import { combineReducers } from 'redux-immutablejs'; 3 | import { routerReducer as router } from 'react-router-redux'; 4 | 5 | import ui from './modules/ui'; 6 | import treeTable from './modules/treeTable'; 7 | import crudTable from './modules/crudTable'; 8 | import initval from './modules/initForm'; 9 | import login from './modules/login'; 10 | import ecommerce from './modules/ecommerce'; 11 | import contact from './modules/contact'; 12 | import calendar from './modules/calendar'; 13 | 14 | function branchReducer(reducerFunction, reducerName) { 15 | return (state, action) => { 16 | const { branch } = action; 17 | const isInitializationCall = state === undefined; 18 | if (branch !== reducerName && !isInitializationCall) { 19 | return state; 20 | } 21 | return reducerFunction(state, action); 22 | }; 23 | } 24 | 25 | export default function createReducer() { 26 | return combineReducers({ 27 | form, 28 | router, 29 | ui, 30 | initval, 31 | login, 32 | calendar, 33 | ecommerce, 34 | contact, 35 | treeTableArrow: branchReducer(treeTable, 'treeTableArrow'), 36 | treeTablePM: branchReducer(treeTable, 'treeTablePM'), 37 | crudTableDemo: branchReducer(crudTable, 'crudTableDemo'), 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /src/app/redux/store.js: -------------------------------------------------------------------------------- 1 | import { fromJS } from 'immutable'; 2 | import { createStore, applyMiddleware, compose } from 'redux'; 3 | import { routerMiddleware } from 'react-router-redux'; 4 | import createReducer from './reducer'; 5 | import createMiddleware from './middleware/clientMiddleware'; 6 | 7 | export default function configureStore(history, client, initialState = {}) { 8 | const reducer = createReducer(); 9 | const middlewares = [createMiddleware(client), routerMiddleware(history)]; 10 | 11 | const composeEnhancers = 12 | (global.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ && 13 | global.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ 14 | // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize... 15 | })) || compose; 16 | 17 | const enhancer = composeEnhancers( 18 | applyMiddleware(...middlewares) 19 | ); 20 | 21 | const initialValues = fromJS(initialState).set('router', history); 22 | 23 | const store = createStore( 24 | reducer, 25 | initialValues, 26 | enhancer 27 | ); 28 | 29 | if (module.hot) { 30 | module.hot.accept('./reducer', () => { 31 | const createNextReducer = require('./reducer').default; 32 | const nextReducer = createNextReducer(); 33 | store.replaceReducer(nextReducer); 34 | }); 35 | } 36 | 37 | return store; 38 | } 39 | -------------------------------------------------------------------------------- /src/app/routes/Charts/PieCharts.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { 6 | PieSimple, 7 | PieCustomShape, 8 | PieCustomLabel, 9 | } from './demos'; 10 | 11 | class PieCharts extends React.Component { 12 | render() { 13 | const title = brand.name + ' - Chart'; 14 | const description = brand.desc; 15 | const docSrc = 'routes/Charts/demos/'; 16 | return ( 17 |
18 | 19 | {title} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
31 |
32 | 33 |
34 | 35 | 36 |
37 |
38 | 39 |
40 | 41 | 42 |
43 |
44 |
45 | ); 46 | } 47 | } 48 | 49 | export default PieCharts; 50 | -------------------------------------------------------------------------------- /src/app/routes/Charts/RadarCharts.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { 6 | RadarSimple, 7 | DoubleRadar 8 | } from './demos'; 9 | 10 | class RadarCharts extends React.Component { 11 | render() { 12 | const title = brand.name + ' - Chart'; 13 | const description = brand.desc; 14 | const docSrc = 'routes/Charts/demos/'; 15 | return ( 16 |
17 | 18 | {title} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 |
30 |
31 | 32 |
33 | 34 | 35 |
36 |
37 |
38 | ); 39 | } 40 | } 41 | 42 | export default RadarCharts; 43 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/AreaNegativePositive.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | AreaChart, 6 | Area, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip 11 | } from 'recharts'; 12 | import { data2 } from './sampleData'; 13 | 14 | const theme = createMuiTheme(ThemePallete.redTheme); 15 | const color = ({ 16 | primary: theme.palette.primary.main, 17 | secondary: theme.palette.secondary.main, 18 | }); 19 | 20 | const gradientOffset = () => { 21 | const dataMax = Math.max(...data2.map((i) => i.uv)); 22 | const dataMin = Math.min(...data2.map((i) => i.uv)); 23 | 24 | if (dataMax <= 0) { 25 | return 0; 26 | } else if (dataMin >= 0) { 27 | return 1; 28 | } 29 | return dataMax / (dataMax - dataMin); 30 | }; 31 | 32 | const off = gradientOffset(); 33 | 34 | function AreaNegativePositive() { 35 | return ( 36 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | ); 60 | } 61 | 62 | export default AreaNegativePositive; 63 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/AreaSimple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | AreaChart, 6 | Area, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip 11 | } from 'recharts'; 12 | import { data2 } from './sampleData'; 13 | 14 | const theme = createMuiTheme(ThemePallete.greenTheme); 15 | const color = ({ 16 | main: theme.palette.primary.main, 17 | dark: theme.palette.primary.dark, 18 | }); 19 | 20 | function AreaSimple() { 21 | return ( 22 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ); 40 | } 41 | 42 | export default AreaSimple; 43 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/AreaStacked.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | AreaChart, 6 | Area, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip 11 | } from 'recharts'; 12 | import green from '@material-ui/core/colors/green'; 13 | import { data1 } from './sampleData'; 14 | 15 | const theme = createMuiTheme(ThemePallete.redTheme); 16 | const color = ({ 17 | primary: theme.palette.primary.main, 18 | primarydark: theme.palette.primary.dark, 19 | secondary: theme.palette.secondary.main, 20 | secondarydark: theme.palette.secondary.dark, 21 | third: green[500], 22 | thirddark: green[900], 23 | }); 24 | 25 | function AreaStacked() { 26 | return ( 27 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | ); 47 | } 48 | 49 | export default AreaStacked; 50 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/BarMix.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | BarChart, 6 | Bar, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip, 11 | Legend 12 | } from 'recharts'; 13 | import green from '@material-ui/core/colors/green'; 14 | import { data2 } from './sampleData'; 15 | 16 | const theme = createMuiTheme(ThemePallete.blueTheme); 17 | const color = ({ 18 | primary: theme.palette.primary.main, 19 | secondary: theme.palette.secondary.main, 20 | third: green[500] 21 | }); 22 | 23 | function BarMix() { 24 | return ( 25 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | ); 46 | } 47 | 48 | export default BarMix; 49 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/BarPositiveNegative.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | BarChart, 6 | Bar, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip, 11 | Legend, 12 | ReferenceLine 13 | } from 'recharts'; 14 | import { data3 } from './sampleData'; 15 | 16 | const theme = createMuiTheme(ThemePallete.greenTheme); 17 | const color = ({ 18 | primary: theme.palette.primary.main, 19 | secondary: theme.palette.secondary.main, 20 | }); 21 | 22 | function BarPositiveNegative() { 23 | return ( 24 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | ); 45 | } 46 | 47 | export default BarPositiveNegative; 48 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/BarResponsive.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { createMuiTheme, withStyles } from '@material-ui/core/styles'; 4 | import ThemePallete from 'ba-utils/themePalette'; 5 | import { 6 | BarChart, 7 | Bar, 8 | XAxis, 9 | YAxis, 10 | CartesianGrid, 11 | Tooltip, 12 | Legend, 13 | ResponsiveContainer 14 | } from 'recharts'; 15 | import { data1 } from './sampleData'; 16 | 17 | const theme = createMuiTheme(ThemePallete.greenNatureTheme); 18 | const color = ({ 19 | primary: theme.palette.primary.main, 20 | secondary: theme.palette.secondary.main, 21 | }); 22 | 23 | const styles = { 24 | chartFluid: { 25 | width: '100%', 26 | height: 450 27 | } 28 | }; 29 | 30 | function BarResponsive(props) { 31 | const { classes } = props; 32 | return ( 33 |
34 | 35 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 |
56 | ); 57 | } 58 | 59 | BarResponsive.propTypes = { 60 | classes: PropTypes.object.isRequired, 61 | }; 62 | 63 | export default withStyles(styles)(BarResponsive); 64 | 65 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/BarSimple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | BarChart, 6 | Bar, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip, 11 | Legend 12 | } from 'recharts'; 13 | import { data1 } from './sampleData'; 14 | 15 | const theme = createMuiTheme(ThemePallete.redTheme); 16 | const color = ({ 17 | primary: theme.palette.primary.main, 18 | secondary: theme.palette.secondary.main, 19 | }); 20 | 21 | function BarSimple() { 22 | return ( 23 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | 45 | export default BarSimple; 46 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/BarStacked.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | BarChart, 6 | Bar, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip, 11 | Legend 12 | } from 'recharts'; 13 | import { data1 } from './sampleData'; 14 | 15 | const theme = createMuiTheme(ThemePallete.orangeTheme); 16 | const color = ({ 17 | primary: theme.palette.primary.main, 18 | secondary: theme.palette.secondary.main, 19 | }); 20 | 21 | function BarStacked() { 22 | return ( 23 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ); 43 | } 44 | 45 | export default BarStacked; 46 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/CompossedLineBarArea.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import green from '@material-ui/core/colors/green'; 5 | import { 6 | ComposedChart, 7 | Line, 8 | Area, 9 | Bar, 10 | XAxis, 11 | YAxis, 12 | CartesianGrid, 13 | Tooltip, 14 | Legend 15 | } from 'recharts'; 16 | import { data1 } from './sampleData'; 17 | 18 | const theme = createMuiTheme(ThemePallete.orangeTheme); 19 | const color = ({ 20 | main: theme.palette.primary.main, 21 | maindark: theme.palette.primary.dark, 22 | secondary: theme.palette.secondary.main, 23 | third: green[500], 24 | }); 25 | 26 | function CompossedLineBarArea() { 27 | return ( 28 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | ); 49 | } 50 | 51 | export default CompossedLineBarArea; 52 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/CompossedSameData.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | ComposedChart, 6 | Line, 7 | Bar, 8 | XAxis, 9 | YAxis, 10 | CartesianGrid, 11 | Tooltip, 12 | Legend 13 | } from 'recharts'; 14 | import { data1 } from './sampleData'; 15 | 16 | const theme = createMuiTheme(ThemePallete.blueTheme); 17 | const color = ({ 18 | main: theme.palette.primary.main, 19 | secondary: theme.palette.secondary.main, 20 | }); 21 | 22 | function CompossedSameData() { 23 | return ( 24 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | ); 44 | } 45 | 46 | export default CompossedSameData; 47 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/CompossedVertical.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import green from '@material-ui/core/colors/green'; 5 | import { 6 | ComposedChart, 7 | Line, 8 | Area, 9 | Bar, 10 | XAxis, 11 | YAxis, 12 | CartesianGrid, 13 | Tooltip, 14 | Legend 15 | } from 'recharts'; 16 | import { data1 } from './sampleData'; 17 | 18 | const theme = createMuiTheme(ThemePallete.blueTheme); 19 | const color = ({ 20 | main: theme.palette.primary.main, 21 | maindark: theme.palette.primary.dark, 22 | secondary: theme.palette.secondary.main, 23 | third: green[500], 24 | }); 25 | 26 | function CompossedVertical() { 27 | return ( 28 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | ); 50 | } 51 | 52 | export default CompossedVertical; 53 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/DoubleRadar.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | Radar, 6 | RadarChart, 7 | PolarGrid, 8 | PolarAngleAxis, 9 | PolarRadiusAxis, 10 | Legend 11 | } from 'recharts'; 12 | import { data7 } from './sampleData'; 13 | 14 | const theme = createMuiTheme(ThemePallete.redTheme); 15 | const color = ({ 16 | main: theme.palette.primary.main, 17 | maindark: theme.palette.primary.dark, 18 | secondary: theme.palette.secondary.main, 19 | secondarydark: theme.palette.secondary.dark, 20 | }); 21 | 22 | function DoubleRadar() { 23 | return ( 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | ); 33 | } 34 | 35 | export default DoubleRadar; 36 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/LineCustomLabel.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { createMuiTheme } from '@material-ui/core/styles'; 4 | import ThemePallete from 'ba-utils/themePalette'; 5 | import { 6 | LineChart, 7 | Line, 8 | XAxis, 9 | YAxis, 10 | CartesianGrid, 11 | Tooltip, 12 | Legend 13 | } from 'recharts'; 14 | import { data1 } from './sampleData'; 15 | 16 | const theme = createMuiTheme(ThemePallete.redTheme); 17 | const color = ({ 18 | primary: theme.palette.primary.main, 19 | secondary: theme.palette.secondary.main, 20 | }); 21 | 22 | const CustomizedLabel = props => { 23 | const { 24 | x, 25 | y, 26 | stroke, 27 | value 28 | } = props; 29 | return ( 30 | 31 | { value } 32 | 33 | ); 34 | }; 35 | 36 | CustomizedLabel.propTypes = { 37 | x: PropTypes.number, 38 | y: PropTypes.number, 39 | value: PropTypes.number, 40 | stroke: PropTypes.string, 41 | }; 42 | 43 | CustomizedLabel.defaultProps = { 44 | x: 0, 45 | y: 0, 46 | value: 0, 47 | stroke: '#000' 48 | }; 49 | 50 | function LineCustomLabel() { 51 | return ( 52 | 63 | 64 | 65 | 66 | 67 | 68 | } /> 69 | } /> 70 | 71 | ); 72 | } 73 | 74 | export default LineCustomLabel; 75 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/LineResponsive.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import { 5 | LineChart, 6 | Line, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip, 11 | Legend, 12 | ResponsiveContainer 13 | } from 'recharts'; 14 | import { data1 } from './sampleData'; 15 | 16 | const styles = { 17 | chartFluid: { 18 | width: '100%', 19 | height: 450 20 | } 21 | }; 22 | 23 | function LineResponsive(props) { 24 | const { classes } = props; 25 | return ( 26 |
27 | 28 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | ); 50 | } 51 | 52 | LineResponsive.propTypes = { 53 | classes: PropTypes.object.isRequired, 54 | }; 55 | 56 | export default withStyles(styles)(LineResponsive); 57 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/LineSimple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { 3 | LineChart, 4 | Line, 5 | XAxis, 6 | YAxis, 7 | CartesianGrid, 8 | Tooltip, 9 | Legend 10 | } from 'recharts'; 11 | import { data1 } from './sampleData'; 12 | 13 | function LineSimple() { 14 | return ( 15 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | ); 35 | } 36 | 37 | export default LineSimple; 38 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/LineVertical.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | LineChart, 6 | Line, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip, 11 | Legend 12 | } from 'recharts'; 13 | import { data1 } from './sampleData'; 14 | 15 | const theme = createMuiTheme(ThemePallete.cyanTheme); 16 | const color = ({ 17 | primary: theme.palette.primary.main, 18 | secondary: theme.palette.secondary.main, 19 | }); 20 | 21 | function LineVertical() { 22 | return ( 23 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | ); 44 | } 45 | 46 | export default LineVertical; 47 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/PieSimple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | PieChart, 6 | Pie, 7 | Tooltip 8 | } from 'recharts'; 9 | import { data4, data5 } from './sampleData'; 10 | 11 | const theme = createMuiTheme(ThemePallete.purpleTheme); 12 | const color = ({ 13 | primary: theme.palette.primary.main, 14 | secondary: theme.palette.secondary.main, 15 | }); 16 | 17 | function PieSimple() { 18 | return ( 19 | 29 | 30 | 31 | 32 | 33 | ); 34 | } 35 | 36 | export default PieSimple; 37 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/RadarSimple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | Radar, 6 | RadarChart, 7 | PolarGrid, 8 | PolarAngleAxis, 9 | PolarRadiusAxis 10 | } from 'recharts'; 11 | import { data7 } from './sampleData'; 12 | 13 | const theme = createMuiTheme(ThemePallete.purpleTheme); 14 | const color = ({ 15 | main: theme.palette.primary.main, 16 | dark: theme.palette.primary.dark, 17 | }); 18 | 19 | function RadarSimple() { 20 | return ( 21 | 22 | 23 | 24 | 25 | 26 | 27 | ); 28 | } 29 | 30 | export default RadarSimple; 31 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/ScatterCustom.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | ScatterChart, 6 | Scatter, 7 | XAxis, 8 | YAxis, 9 | ZAxis, 10 | CartesianGrid, 11 | Tooltip, 12 | Legend 13 | } from 'recharts'; 14 | import { data8, data9 } from './sampleData'; 15 | 16 | const theme = createMuiTheme(ThemePallete.orangeTheme); 17 | const color = ({ 18 | primary: theme.palette.primary.main, 19 | secondary: theme.palette.secondary.main, 20 | }); 21 | 22 | function ScatterCustom() { 23 | return ( 24 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | ); 44 | } 45 | 46 | export default ScatterCustom; 47 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/ScatterJoinLine.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | ScatterChart, 6 | Scatter, 7 | XAxis, 8 | YAxis, 9 | ZAxis, 10 | CartesianGrid, 11 | Tooltip, 12 | Legend 13 | } from 'recharts'; 14 | import { data8, data9 } from './sampleData'; 15 | 16 | const theme = createMuiTheme(ThemePallete.blueTheme); 17 | const color = ({ 18 | primary: theme.palette.primary.main, 19 | secondary: theme.palette.secondary.main, 20 | }); 21 | 22 | function ScatterJoinLine() { 23 | return ( 24 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | ); 44 | } 45 | 46 | export default ScatterJoinLine; 47 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/ScatterMultiple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | ScatterChart, 6 | Scatter, 7 | XAxis, 8 | YAxis, 9 | ZAxis, 10 | CartesianGrid, 11 | Tooltip, 12 | Legend 13 | } from 'recharts'; 14 | import { data8, data9 } from './sampleData'; 15 | 16 | const theme = createMuiTheme(ThemePallete.greenTheme); 17 | const color = ({ 18 | primary: theme.palette.primary.main, 19 | secondary: theme.palette.secondary.main, 20 | }); 21 | 22 | function ScatterMultiple() { 23 | return ( 24 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | ); 44 | } 45 | 46 | export default ScatterMultiple; 47 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/ScatterResponsive.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { createMuiTheme, withStyles } from '@material-ui/core/styles'; 4 | import ThemePallete from 'ba-utils/themePalette'; 5 | import { 6 | ScatterChart, 7 | Scatter, 8 | XAxis, 9 | YAxis, 10 | ZAxis, 11 | CartesianGrid, 12 | Tooltip, 13 | Legend, 14 | ResponsiveContainer 15 | } from 'recharts'; 16 | import { data8, data9 } from './sampleData'; 17 | 18 | const theme = createMuiTheme(ThemePallete.skyBlueTheme); 19 | const color = ({ 20 | primary: theme.palette.primary.main, 21 | secondary: theme.palette.secondary.main, 22 | }); 23 | 24 | const styles = { 25 | chartFluid: { 26 | width: '100%', 27 | height: 450 28 | } 29 | }; 30 | 31 | function ScatterResponsive(props) { 32 | const { classes } = props; 33 | return ( 34 |
35 | 36 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
57 | ); 58 | } 59 | 60 | ScatterResponsive.propTypes = { 61 | classes: PropTypes.object.isRequired, 62 | }; 63 | 64 | export default withStyles(styles)(ScatterResponsive); 65 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/ScatterSimple.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { createMuiTheme } from '@material-ui/core/styles'; 3 | import ThemePallete from 'ba-utils/themePalette'; 4 | import { 5 | ScatterChart, 6 | Scatter, 7 | XAxis, 8 | YAxis, 9 | CartesianGrid, 10 | Tooltip, 11 | } from 'recharts'; 12 | import { data8 } from './sampleData'; 13 | 14 | const theme = createMuiTheme(ThemePallete.cyanTheme); 15 | const color = ({ 16 | primary: theme.palette.primary.main, 17 | }); 18 | 19 | function ScatterSimple() { 20 | return ( 21 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | ); 38 | } 39 | 40 | export default ScatterSimple; 41 | -------------------------------------------------------------------------------- /src/app/routes/Charts/demos/index.js: -------------------------------------------------------------------------------- 1 | export LineSimple from './LineSimple'; 2 | export LineVertical from './LineVertical'; 3 | export LineCustomDot from './LineCustomDot'; 4 | export LineCustomLabel from './LineCustomLabel'; 5 | export LineResponsive from './LineResponsive'; 6 | export BarSimple from './BarSimple'; 7 | export BarMix from './BarMix'; 8 | export BarStacked from './BarStacked'; 9 | export BarCustom from './BarCustom'; 10 | export BarPositiveNegative from './BarPositiveNegative'; 11 | export BarCustomLabel from './BarCustomLabel'; 12 | export BarResponsive from './BarResponsive'; 13 | export AreaSimple from './AreaSimple'; 14 | export AreaStacked from './AreaStacked'; 15 | export AreaPercent from './AreaPercent'; 16 | export AreaNegativePositive from './AreaNegativePositive'; 17 | export AreaResponsive from './AreaResponsive'; 18 | export PieSimple from './PieSimple'; 19 | export PieCustomShape from './PieCustomShape'; 20 | export PieCustomLabel from './PieCustomLabel'; 21 | export RadarSimple from './RadarSimple'; 22 | export DoubleRadar from './DoubleRadar'; 23 | export ScatterSimple from './ScatterSimple'; 24 | export ScatterJoinLine from './ScatterJoinLine'; 25 | export ScatterMultiple from './ScatterMultiple'; 26 | export ScatterCustom from './ScatterCustom'; 27 | export ScatterResponsive from './ScatterResponsive'; 28 | export CompossedLineBarArea from './CompossedLineBarArea'; 29 | export CompossedSameData from './CompossedSameData'; 30 | export CompossedVertical from './CompossedVertical'; 31 | export CompossedResponsive from './CompossedResponsive'; 32 | -------------------------------------------------------------------------------- /src/app/routes/Dashboard/DashboardV2.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../components'; 6 | 7 | class DashboardV2 extends React.Component { 8 | render() { 9 | const title = brand.name + ' - Dashboard v2'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default DashboardV2; 28 | -------------------------------------------------------------------------------- /src/app/routes/Dashboard/dashboard-jss.js: -------------------------------------------------------------------------------- 1 | const styles = theme => ({ 2 | root: { 3 | flexGrow: 1, 4 | }, 5 | divider: { 6 | margin: `${theme.spacing.unit * 2}px 0`, 7 | background: 'none' 8 | }, 9 | sliderWrap: { 10 | position: 'relative', 11 | display: 'block', 12 | boxShadow: theme.shadows[1], 13 | width: '100%', 14 | borderRadius: 4 15 | }, 16 | dividerMini: { 17 | margin: `${theme.spacing.unit * 1.5}px 0`, 18 | background: 'none' 19 | }, 20 | noPadding: { 21 | paddingTop: '0 !important', 22 | paddingBottom: '0 !important', 23 | [theme.breakpoints.up('sm')]: { 24 | padding: '0 !important' 25 | } 26 | } 27 | }); 28 | 29 | export default styles; 30 | -------------------------------------------------------------------------------- /src/app/routes/Forms/Rating.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { withStyles } from '@material-ui/core/styles'; 6 | import { MarketingAds } from './../../components'; 7 | 8 | const styles = ({ 9 | root: { 10 | flexGrow: 1, 11 | } 12 | }); 13 | 14 | class DateTime extends React.Component { 15 | render() { 16 | const title = brand.name + ' - Form'; 17 | const description = brand.desc; 18 | return ( 19 |
20 | 21 | {title} 22 | 23 | 24 | 25 | 26 | 27 | 28 | 33 |
34 | ); 35 | } 36 | } 37 | 38 | export default withStyles(styles)(DateTime); 39 | -------------------------------------------------------------------------------- /src/app/routes/Forms/ReduxForm.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { withStyles } from '@material-ui/core/styles'; 5 | import { SourceReader, PapperBlock } from './../../components'; 6 | import { ReduxFormDemo } from './demos'; 7 | 8 | const styles = ({ 9 | root: { 10 | flexGrow: 1, 11 | } 12 | }); 13 | 14 | class ReduxForm extends React.Component { 15 | state = { 16 | valueForm: [] 17 | } 18 | 19 | showResult(values) { 20 | setTimeout(() => { 21 | this.setState({ valueForm: values }); 22 | window.alert(`You submitted:\n\n${this.state.valueForm}`); 23 | }, 500); // simulate server latency 24 | } 25 | 26 | render() { 27 | const title = brand.name + ' - Form'; 28 | const description = brand.desc; 29 | const docSrc = 'routes/Forms/demos/'; 30 | return ( 31 |
32 | 33 | {title} 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
42 | this.showResult(values)} /> 43 | 44 |
45 |
46 |
47 | ); 48 | } 49 | } 50 | 51 | export default withStyles(styles)(ReduxForm); 52 | -------------------------------------------------------------------------------- /src/app/routes/Forms/SliderRange.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { withStyles } from '@material-ui/core/styles'; 6 | import { MarketingAds } from './../../components'; 7 | 8 | const styles = ({ 9 | root: { 10 | flexGrow: 1, 11 | } 12 | }); 13 | 14 | class DateTime extends React.Component { 15 | render() { 16 | const title = brand.name + ' - Form'; 17 | const description = brand.desc; 18 | return ( 19 |
20 | 21 | {title} 22 | 23 | 24 | 25 | 26 | 27 | 28 | 33 |
34 | ); 35 | } 36 | } 37 | 38 | export default withStyles(styles)(DateTime); 39 | -------------------------------------------------------------------------------- /src/app/routes/Forms/Switches.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { withStyles } from '@material-ui/core/styles'; 5 | import { SourceReader, PapperBlock } from './../../components'; 6 | import { SwitchesInput } from './demos'; 7 | 8 | const styles = ({ 9 | root: { 10 | flexGrow: 1, 11 | } 12 | }); 13 | 14 | class DateTime extends React.Component { 15 | render() { 16 | const title = brand.name + ' - Form'; 17 | const description = brand.desc; 18 | const docSrc = 'routes/Forms/demos/'; 19 | return ( 20 |
21 | 22 | {title} 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 | 33 |
34 |
35 |
36 | ); 37 | } 38 | } 39 | 40 | export default withStyles(styles)(DateTime); 41 | -------------------------------------------------------------------------------- /src/app/routes/Forms/TextEditor.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { withStyles } from '@material-ui/core/styles'; 6 | import { MarketingAds } from './../../components'; 7 | 8 | const styles = ({ 9 | root: { 10 | flexGrow: 1, 11 | } 12 | }); 13 | 14 | class DateTime extends React.Component { 15 | render() { 16 | const title = brand.name + ' - Form'; 17 | const description = brand.desc; 18 | return ( 19 |
20 | 21 | {title} 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | ); 31 | } 32 | } 33 | 34 | export default withStyles(styles)(DateTime); 35 | -------------------------------------------------------------------------------- /src/app/routes/Forms/Upload.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { withStyles } from '@material-ui/core/styles'; 6 | import { MarketingAds } from './../../components'; 7 | 8 | const styles = ({ 9 | root: { 10 | flexGrow: 1, 11 | } 12 | }); 13 | 14 | class DateTime extends React.Component { 15 | render() { 16 | const title = brand.name + ' - Form'; 17 | const description = brand.desc; 18 | return ( 19 |
20 | 21 | {title} 22 | 23 | 24 | 25 | 26 | 27 | 28 | 33 |
34 | ); 35 | } 36 | } 37 | 38 | export default withStyles(styles)(DateTime); 39 | -------------------------------------------------------------------------------- /src/app/routes/Forms/demos/index.js: -------------------------------------------------------------------------------- 1 | // Redux Form 2 | export ReduxFormDemo from './ReduxFormDemo'; 3 | // Date Time Picker 4 | export DateInput from './DateInput'; 5 | export TimeInput from './TimeInput'; 6 | export DateTimeInput from './DateTimeInput'; 7 | // Checkbox and Radio 8 | export Checkboxes from './Checkboxes'; 9 | export RadioButton from './RadioButton'; 10 | // Switches 11 | export SwitchesInput from './SwitchesInput'; 12 | // Selectbox 13 | export SimpleSelectbox from './SimpleSelectbox'; 14 | export NativeSelectbox from './NativeSelectbox'; 15 | export MultipleSelectbox from './MultipleSelectbox'; 16 | export ControlledSelectbox from './ControlledSelectbox'; 17 | // Buttons 18 | export StandardButtons from './StandardButtons'; 19 | export FloatingButtons from './FloatingButtons'; 20 | export CustomButtons from './CustomButtons'; 21 | export ComplexButtons from './ComplexButtons'; 22 | // Textfield 23 | export TextFields from './TextFields'; 24 | export TextFieldsLayout from './TextFieldsLayout'; 25 | export InputAdornments from './InputAdornments'; 26 | export FormattedInputs from './FormattedInputs'; 27 | // Autocomplete 28 | export AutoSuggest from './AutoSuggest'; 29 | export TagSuggestions from './TagSuggestions'; 30 | export SelectSuggestions from './SelectSuggestions'; 31 | export SelectSuggestionTags from './SelectSuggestionTags'; 32 | export HighlightSuggest from './HighlightSuggest'; 33 | -------------------------------------------------------------------------------- /src/app/routes/Layouts/demos/Centered.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Paper from '@material-ui/core/Paper'; 5 | import Grid from '@material-ui/core/Grid'; 6 | 7 | const styles = theme => ({ 8 | root: { 9 | flexGrow: 1, 10 | }, 11 | paper: { 12 | padding: theme.spacing.unit * 2, 13 | textAlign: 'center', 14 | color: theme.palette.text.secondary, 15 | backgroundColor: theme.palette.secondary.light, 16 | }, 17 | }); 18 | 19 | function CenteredGrid(props) { 20 | const { classes } = props; 21 | 22 | return ( 23 |
24 | 25 | 26 | xs=12 27 | 28 | 29 | xs=6 30 | 31 | 32 | xs=6 33 | 34 | 35 | xs=3 36 | 37 | 38 | xs=3 39 | 40 | 41 | xs=3 42 | 43 | 44 | xs=3 45 | 46 | 47 |
48 | ); 49 | } 50 | 51 | CenteredGrid.propTypes = { 52 | classes: PropTypes.object.isRequired, 53 | }; 54 | 55 | export default withStyles(styles)(CenteredGrid); 56 | -------------------------------------------------------------------------------- /src/app/routes/Layouts/demos/FullWidth.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Paper from '@material-ui/core/Paper'; 5 | import Grid from '@material-ui/core/Grid'; 6 | 7 | const styles = theme => ({ 8 | root: { 9 | flexGrow: 1, 10 | }, 11 | paper: { 12 | padding: theme.spacing.unit * 2, 13 | textAlign: 'center', 14 | color: theme.palette.text.secondary, 15 | backgroundColor: theme.palette.secondary.light 16 | }, 17 | }); 18 | 19 | function FullWidthGrid(props) { 20 | const { classes } = props; 21 | 22 | return ( 23 |
24 | 25 | 26 | xs=12 27 | 28 | 29 | xs=12 sm=6 30 | 31 | 32 | xs=12 sm=6 33 | 34 | 35 | xs=6 sm=3 36 | 37 | 38 | xs=6 sm=3 39 | 40 | 41 | xs=6 sm=3 42 | 43 | 44 | xs=6 sm=3 45 | 46 | 47 |
48 | ); 49 | } 50 | 51 | FullWidthGrid.propTypes = { 52 | classes: PropTypes.object.isRequired, 53 | }; 54 | 55 | export default withStyles(styles)(FullWidthGrid); 56 | -------------------------------------------------------------------------------- /src/app/routes/Layouts/demos/MediaQueries.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Typography from '@material-ui/core/Typography'; 5 | import red from '@material-ui/core/colors/red'; 6 | import green from '@material-ui/core/colors/green'; 7 | import blue from '@material-ui/core/colors/indigo'; 8 | 9 | const styles = theme => ({ 10 | root: { 11 | padding: theme.spacing.unit, 12 | '& h3': { 13 | color: theme.palette.common.white, 14 | }, 15 | [theme.breakpoints.down('sm')]: { 16 | backgroundColor: red[500], 17 | }, 18 | [theme.breakpoints.up('md')]: { 19 | backgroundColor: blue[500], 20 | }, 21 | [theme.breakpoints.up('lg')]: { 22 | backgroundColor: green[500], 23 | }, 24 | }, 25 | }); 26 | 27 | function MediaQuery(props) { 28 | const { classes } = props; 29 | 30 | return ( 31 |
32 | down(sm): red 33 | up(md): blue 34 | up(lg): green 35 |
36 | ); 37 | } 38 | 39 | MediaQuery.propTypes = { 40 | classes: PropTypes.object.isRequired, 41 | }; 42 | 43 | export default withStyles(styles)(MediaQuery); 44 | -------------------------------------------------------------------------------- /src/app/routes/Layouts/demos/WIthWIdth.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import withWidth from '@material-ui/core/withWidth'; 4 | import Typography from '@material-ui/core/Typography'; 5 | 6 | const components = { 7 | sm: 'em', 8 | md: 'u', 9 | lg: 'del', 10 | }; 11 | 12 | function WithWidth(props) { 13 | const { width } = props; 14 | const Component = components[width] || 'span'; 15 | 16 | return ( 17 | 18 | {`Current width: ${width}`} 19 | 20 | ); 21 | } 22 | 23 | WithWidth.propTypes = { 24 | width: PropTypes.string.isRequired, 25 | }; 26 | 27 | export default withWidth()(WithWidth); 28 | -------------------------------------------------------------------------------- /src/app/routes/Layouts/demos/breakpoint.md: -------------------------------------------------------------------------------- 1 | 2 | | innerWidth |xs | sm | md | lg | xl | 3 | |--------|-----|----|----|----|----|----| 4 | | width | xs | sm | md | lg | xl | 5 | | smUp | show | hide | 6 | | mdDown | | | hide | show | 7 | -------------------------------------------------------------------------------- /src/app/routes/Layouts/demos/index.js: -------------------------------------------------------------------------------- 1 | export AutoLayout from './AutoLayout'; 2 | export Centered from './Centered'; 3 | export FullWidth from './FullWidth'; 4 | export GridLayout from './GridLayout'; 5 | export Interactive from './Interactive'; 6 | export Limitation from './Limitation'; 7 | export SidebarLayout from './SidebarLayout'; 8 | export SidebarLayoutRight from './SidebarLayoutRight'; 9 | export FullHeader from './FullHeader'; 10 | export Breakpoint from './Breakpoint'; 11 | export BreakpointGrid from './BreakpointGrid'; 12 | export MediaQueries from './MediaQueries'; 13 | export WIthWIdth from './WIthWIdth'; 14 | -------------------------------------------------------------------------------- /src/app/routes/Maps/Info.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Typography from '@material-ui/core/Typography'; 3 | import Type from 'ba-components/Typography.scss'; 4 | 5 | class Info extends React.Component { 6 | render() { 7 | return ( 8 | 9 | This demo may not working properly because it has not added Google Map api key. To add Your own Google Map api key please follow this link 10 |   https://developers.google.com/maps/documentation/javascript/get-api-key 11 | 12 | ); 13 | } 14 | } 15 | 16 | export default Info; 17 | -------------------------------------------------------------------------------- /src/app/routes/Maps/MapDirection.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { Direction } from './demos'; 6 | import Info from './Info'; 7 | 8 | class MapDirection extends React.Component { 9 | render() { 10 | const title = brand.name + ' - Map'; 11 | const description = brand.desc; 12 | const docSrc = 'routes/Maps/demos/'; 13 | return ( 14 |
15 | 16 | {title} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | ); 30 | } 31 | } 32 | 33 | export default MapDirection; 34 | -------------------------------------------------------------------------------- /src/app/routes/Maps/MapMarker.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { BasicMarker, PopoverMarker } from './demos'; 6 | import Info from './Info'; 7 | 8 | class MapMarker extends React.Component { 9 | render() { 10 | const title = brand.name + ' - Map'; 11 | const description = brand.desc; 12 | const docSrc = 'routes/Maps/demos/'; 13 | return ( 14 |
15 | 16 | {title} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
34 | ); 35 | } 36 | } 37 | 38 | export default MapMarker; 39 | -------------------------------------------------------------------------------- /src/app/routes/Maps/SearchMap.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { SearchLocation } from './demos'; 6 | import Info from './Info'; 7 | 8 | class SearchMap extends React.Component { 9 | render() { 10 | const title = brand.name + ' - Map'; 11 | const description = brand.desc; 12 | const docSrc = 'routes/Maps/demos/'; 13 | return ( 14 |
15 | 16 | {title} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | ); 30 | } 31 | } 32 | 33 | export default SearchMap; 34 | -------------------------------------------------------------------------------- /src/app/routes/Maps/StreetViewMap.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../components'; 6 | 7 | class StreetViewMap extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default StreetViewMap; 28 | -------------------------------------------------------------------------------- /src/app/routes/Maps/TrafficIndicator.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../components'; 6 | 7 | class TrafficIndicator extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default TrafficIndicator; 28 | -------------------------------------------------------------------------------- /src/app/routes/Maps/demos/BasicMarker.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { compose } from 'recompose'; 3 | import { 4 | withScriptjs, 5 | withGoogleMap, 6 | GoogleMap, 7 | Marker, 8 | } from 'react-google-maps'; 9 | 10 | const MapWithAMarker = compose( 11 | withScriptjs, 12 | withGoogleMap 13 | )(props => ( 14 | 19 | 22 | 23 | )); 24 | 25 | class BasicMarker extends React.Component { 26 | render() { 27 | return ( 28 | } 31 | containerElement={
} 32 | mapElement={
} 33 | /> 34 | ); 35 | } 36 | } 37 | 38 | export default BasicMarker; 39 | -------------------------------------------------------------------------------- /src/app/routes/Maps/demos/Direction.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-undef */ 2 | import React from 'react'; 3 | import { compose, withProps, lifecycle } from 'recompose'; 4 | import { 5 | withScriptjs, 6 | withGoogleMap, 7 | GoogleMap, 8 | DirectionsRenderer, 9 | } from 'react-google-maps'; 10 | 11 | const MapWithADirectionsRenderer = compose( 12 | withProps({ 13 | googleMapURL: 'https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places', 14 | loadingElement:
, 15 | containerElement:
, 16 | mapElement:
, 17 | }), 18 | withScriptjs, 19 | withGoogleMap, 20 | lifecycle({ 21 | componentDidMount() { 22 | const DirectionsService = new google.maps.DirectionsService(); 23 | 24 | DirectionsService.route({ 25 | origin: new google.maps.LatLng(41.8507300, -87.6512600), 26 | destination: new google.maps.LatLng(41.8525800, -87.6514100), 27 | travelMode: google.maps.TravelMode.DRIVING, 28 | }, (result, status) => { 29 | if (status === google.maps.DirectionsStatus.OK) { 30 | this.setState({ 31 | directions: result, 32 | }); 33 | } else { 34 | console.error(`error fetching directions ${result}`); 35 | } 36 | }); 37 | } 38 | }) 39 | )(props => ( 40 | 44 | {props.directions && } 45 | 46 | )); 47 | 48 | class Direction extends React.Component { 49 | render() { 50 | return ( 51 | 52 | ); 53 | } 54 | } 55 | 56 | export default Direction; 57 | -------------------------------------------------------------------------------- /src/app/routes/Maps/demos/PopoverMarker.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { compose, withStateHandlers } from 'recompose'; 3 | import LocalDining from '@material-ui/icons/LocalDining'; 4 | import { 5 | withScriptjs, 6 | withGoogleMap, 7 | GoogleMap, 8 | Marker, 9 | InfoWindow 10 | } from 'react-google-maps'; 11 | 12 | const MapWithAMakredInfoWindow = compose( 13 | withStateHandlers(() => ({ 14 | isOpen: false, 15 | }), { 16 | onToggleOpen: ({ isOpen }) => () => ({ 17 | isOpen: !isOpen, 18 | }) 19 | }), 20 | withScriptjs, 21 | withGoogleMap 22 | )(props => ( 23 | 27 | 31 | {props.isOpen && 32 | 33 | 34 | A marked place 35 | 36 | 37 | } 38 | 39 | 40 | )); 41 | 42 | class PopoverMarker extends React.Component { 43 | render() { 44 | return ( 45 | } 48 | containerElement={
} 49 | mapElement={
} 50 | /> 51 | ); 52 | } 53 | } 54 | 55 | export default PopoverMarker; 56 | -------------------------------------------------------------------------------- /src/app/routes/Maps/demos/Traffic.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { compose, withProps } from 'recompose'; 3 | import { 4 | withScriptjs, 5 | withGoogleMap, 6 | GoogleMap, 7 | TrafficLayer, 8 | } from 'react-google-maps'; 9 | 10 | const MapWithATrafficLayer = compose( 11 | withProps({ 12 | googleMapURL: 'https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places', 13 | loadingElement:
, 14 | containerElement:
, 15 | mapElement:
, 16 | }), 17 | withScriptjs, 18 | withGoogleMap 19 | )(props => ( 20 | 25 | 26 | 27 | )); 28 | 29 | class Traffic extends React.Component { 30 | render() { 31 | return ( 32 | 33 | ); 34 | } 35 | } 36 | 37 | export default Traffic; 38 | -------------------------------------------------------------------------------- /src/app/routes/Maps/demos/index.js: -------------------------------------------------------------------------------- 1 | export BasicMarker from './BasicMarker'; 2 | export PopoverMarker from './PopoverMarker'; 3 | export Direction from './Direction'; 4 | export SearchLocation from './SearchLocation'; 5 | export Traffic from './Traffic'; 6 | export StreetView from './StreetView'; 7 | -------------------------------------------------------------------------------- /src/app/routes/NotFound/NotFound.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { Route } from 'react-router-dom'; 5 | import { ErrorWrap } from './../../components'; 6 | 7 | const title = brand.name + ' - Page Not Found'; 8 | const description = brand.desc; 9 | 10 | const NotFound = () => ( 11 | { 13 | if (staticContext) { 14 | staticContext.status = 404; // eslint-disable-line 15 | } 16 | return ( 17 |
18 | 19 | {title} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | ); 29 | }} 30 | /> 31 | ); 32 | 33 | export default NotFound; 34 | -------------------------------------------------------------------------------- /src/app/routes/Pages/BlankPage/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { PapperBlock } from './../../../components'; 5 | 6 | class BlankPage extends React.Component { 7 | render() { 8 | const title = brand.name + ' - Blank Page'; 9 | const description = brand.desc; 10 | return ( 11 |
12 | 13 | {title} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Content 22 | 23 |
24 | ); 25 | } 26 | } 27 | 28 | export default BlankPage; 29 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Chat/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Chat extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Chat; 28 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Email/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Email extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Email; 28 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Error/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { Route } from 'react-router-dom'; 5 | import { ErrorWrap } from './../../../components'; 6 | 7 | const title = brand.name + ' - Aplication Error'; 8 | const description = brand.desc; 9 | 10 | const Error = () => ( 11 | { 13 | if (staticContext) { 14 | staticContext.status = 404; // eslint-disable-line 15 | } 16 | return ( 17 |
18 | 19 | {title} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | ); 29 | }} 30 | /> 31 | ); 32 | 33 | export default Error; 34 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Maintenance/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Paginations extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Paginations; 28 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Photos/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Photos extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Photos; 28 | -------------------------------------------------------------------------------- /src/app/routes/Pages/SocialMedia/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Chat extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Chat; 28 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Standalone/LoginDedicated.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { PropTypes } from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Hidden from '@material-ui/core/Hidden'; 5 | import brand from 'ba-utils/brand'; 6 | import logo from 'ba-images/logo.svg'; 7 | import styles from './../../../components/App/appStyles-jss'; 8 | import Login from './../Users/Login'; 9 | 10 | class LoginDedicated extends React.Component { 11 | render() { 12 | const { classes } = this.props; 13 | return ( 14 |
15 |
16 | 17 |
18 | {brand.name} 19 |

{brand.name}

20 |
21 |
22 | 23 |
24 |
25 | ); 26 | } 27 | } 28 | 29 | LoginDedicated.propTypes = { 30 | classes: PropTypes.object.isRequired, 31 | }; 32 | 33 | export default (withStyles(styles)(LoginDedicated)); 34 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Standalone/NotFoundDedicated.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { PropTypes } from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import styles from './../../../components/App/appStyles-jss'; 5 | import Error from './../Error'; 6 | 7 | class NotFoundDedicated extends React.Component { 8 | render() { 9 | const { classes } = this.props; 10 | return ( 11 |
12 |
13 | 14 |
15 |
16 | ); 17 | } 18 | } 19 | 20 | NotFoundDedicated.propTypes = { 21 | classes: PropTypes.object.isRequired, 22 | }; 23 | 24 | export default (withStyles(styles)(NotFoundDedicated)); 25 | -------------------------------------------------------------------------------- /src/app/routes/Pages/UserProfile/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Chat extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Chat; 28 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Users/LockScreen.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Paginations extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Paginations; 28 | -------------------------------------------------------------------------------- /src/app/routes/Pages/Users/ResetPassword.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class Paginations extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Paginations; 28 | -------------------------------------------------------------------------------- /src/app/routes/Tables/AdvancedTable.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { withStyles } from '@material-ui/core/styles'; 6 | import { SourceReader, PapperBlock, MarketingAds } from './../../components'; 7 | import { AdvTableDemo } from './demos'; 8 | 9 | const styles = ({ 10 | root: { 11 | flexGrow: 1, 12 | } 13 | }); 14 | 15 | class AdvancedTable extends Component { 16 | render() { 17 | const title = brand.name + ' - Table'; 18 | const description = brand.desc; 19 | const docSrc = 'routes/Tables/demos/'; 20 | return ( 21 |
22 | 23 | {title} 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 |
35 |
36 | 37 |
38 | ); 39 | } 40 | } 41 | 42 | export default withStyles(styles)(AdvancedTable); 43 | -------------------------------------------------------------------------------- /src/app/routes/Tables/demos/EmptyTable.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Toolbar from '@material-ui/core/Toolbar'; 5 | import Typography from '@material-ui/core/Typography'; 6 | import Table from '@material-ui/core/Table'; 7 | import TableCell from '@material-ui/core/TableCell'; 8 | import TableHead from '@material-ui/core/TableHead'; 9 | import TableRow from '@material-ui/core/TableRow'; 10 | import Paper from '@material-ui/core/Paper'; 11 | import { EmptyData } from './../../../components'; 12 | 13 | const styles = theme => ({ 14 | root: { 15 | width: '100%', 16 | marginTop: theme.spacing.unit * 3, 17 | overflowX: 'auto', 18 | }, 19 | table: { 20 | minWidth: 700, 21 | }, 22 | }); 23 | 24 | function EmptyTable(props) { 25 | const { classes } = props; 26 | return ( 27 | 28 | 29 |
30 | Nutrition 31 |
32 |
33 | 34 | 35 | 36 | Dessert (100g serving) 37 | Calories 38 | Fat (g) 39 | Carbs (g) 40 | Protein (g) 41 | 42 | 43 |
44 | 45 |
46 | ); 47 | } 48 | 49 | EmptyTable.propTypes = { 50 | classes: PropTypes.object.isRequired, 51 | }; 52 | 53 | export default withStyles(styles)(EmptyTable); 54 | -------------------------------------------------------------------------------- /src/app/routes/Tables/demos/TrackingTable.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../../components'; 6 | 7 | class TrackingTable extends React.Component { 8 | render() { 9 | const title = brand.name + ' - Dashboard v2'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default TrackingTable; 28 | -------------------------------------------------------------------------------- /src/app/routes/Tables/demos/index.js: -------------------------------------------------------------------------------- 1 | export SimpleTable from './SimpleTable'; 2 | export StrippedTable from './StrippedTable'; 3 | export HoverTable from './HoverTable'; 4 | export BorderedTable from './BorderedTable'; 5 | export TreeTableDemo from './TreeTableDemo'; 6 | export CrudTableDemo from './CrudTableDemo'; 7 | export AdvTableDemo from './AdvTableDemo'; 8 | export StatusLabel from './StatusLabel'; 9 | export StatusColorRow from './StatusColorRow'; 10 | export EmptyTable from './EmptyTable'; 11 | export TrackingTable from './TrackingTable'; 12 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/Avatars.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { AvatarsDemo, AvatarsPractice } from './demos'; 6 | 7 | class Avatars extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | const docSrc = 'routes/UiElements/demos/Avatars/'; 12 | return ( 13 |
14 | 15 | {title} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 |
27 |
28 | 29 |
30 | 31 | 32 |
33 |
34 |
35 | ); 36 | } 37 | } 38 | 39 | export default Avatars; 40 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/Badges.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { CommonBadges, VariantBadges } from './demos'; 6 | 7 | class Badges extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | const docSrc = 'routes/UiElements/demos/Badges/'; 12 | return ( 13 |
14 | 15 | {title} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 |
27 |
28 | 29 |
30 | 31 | 32 |
33 |
34 |
35 | ); 36 | } 37 | } 38 | 39 | export default Badges; 40 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/Breadcrumbs.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { ClassicBreadcrumbs, PaperBreadcrumbs } from './demos'; 6 | 7 | class BreadCrumbs extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | const docSrc = 'routes/UiElements/demos/Breadcrumbs/'; 12 | return ( 13 |
14 | 15 | {title} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 |
27 |
28 | 29 |
30 | 31 | 32 |
33 |
34 |
35 | ); 36 | } 37 | } 38 | 39 | export default BreadCrumbs; 40 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/Dividers.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../components'; 6 | 7 | class Dividers extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Dividers; 28 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/Paginations.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import ss from 'ba-utils/screenshoot'; 5 | import { MarketingAds } from './../../components'; 6 | 7 | class Paginations extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | ); 24 | } 25 | } 26 | 27 | export default Paginations; 28 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/SliderCarousel.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import ss from 'ba-utils/screenshoot'; 4 | import brand from 'ba-utils/brand'; 5 | import { MarketingAds } from './../../components'; 6 | 7 | class SliderCarousel extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | return ( 12 |
13 | 14 | {title} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | ); 25 | } 26 | } 27 | 28 | export default SliderCarousel; 29 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/Tags.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet'; 3 | import brand from 'ba-utils/brand'; 4 | import { SourceReader, PapperBlock } from './../../components'; 5 | import { BasicTags, ArrayTags } from './demos'; 6 | 7 | class Tags extends React.Component { 8 | render() { 9 | const title = brand.name + ' - UI Elements'; 10 | const description = brand.desc; 11 | const docSrc = 'routes/UiElements/demos/Tags/'; 12 | return ( 13 |
14 | 15 | {title} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 |
27 |
28 | 29 |
30 | 31 | 32 |
33 |
34 |
35 | ); 36 | } 37 | } 38 | 39 | export default Tags; 40 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Cards/PaperSheet.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Paper from '@material-ui/core/Paper'; 5 | import Typography from '@material-ui/core/Typography'; 6 | 7 | const styles = theme => ({ 8 | root: theme.mixins.gutters({ 9 | paddingTop: 16, 10 | paddingBottom: 16, 11 | marginTop: theme.spacing.unit * 3, 12 | }), 13 | }); 14 | 15 | function PaperSheet(props) { 16 | const { classes } = props; 17 | return ( 18 |
19 | 20 | 21 | This is a sheet of paper. 22 | 23 | 24 | Paper can be used to build surface or other elements for your application. 25 | 26 | 27 |
28 | ); 29 | } 30 | 31 | PaperSheet.propTypes = { 32 | classes: PropTypes.object.isRequired, 33 | }; 34 | 35 | export default withStyles(styles)(PaperSheet); 36 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/ImageGrid/ImageGridList.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import GridList from '@material-ui/core/GridList'; 5 | import GridListTile from '@material-ui/core/GridListTile'; 6 | import imgData from 'ba-utils/imgData'; 7 | 8 | const styles = theme => ({ 9 | root: { 10 | display: 'flex', 11 | flexWrap: 'wrap', 12 | justifyContent: 'space-around', 13 | overflow: 'hidden', 14 | backgroundColor: theme.palette.background.paper, 15 | }, 16 | gridList: { 17 | width: 500, 18 | height: 450, 19 | }, 20 | subheader: { 21 | width: '100%', 22 | }, 23 | img: { 24 | maxWidth: 'none' 25 | } 26 | }); 27 | 28 | /** 29 | * The example data is structured as follows: 30 | * 31 | * import image from 'path/to/image.jpg'; 32 | * [etc...] 33 | * 34 | * const tileData = [ 35 | * { 36 | * img: image, 37 | * title: 'Image', 38 | * author: 'author', 39 | * cols: 2, 40 | * }, 41 | * { 42 | * [etc...] 43 | * }, 44 | * ]; 45 | */ 46 | function ImageGridList(props) { 47 | const { classes } = props; 48 | 49 | return ( 50 |
51 | 52 | {imgData.map((tile, index) => ( 53 | 54 | {tile.title} 55 | 56 | ))} 57 | 58 |
59 | ); 60 | } 61 | 62 | ImageGridList.propTypes = { 63 | classes: PropTypes.object.isRequired, 64 | }; 65 | 66 | export default withStyles(styles)(ImageGridList); 67 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Progress/CircularIndeterminate.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import CircularProgress from '@material-ui/core/CircularProgress'; 5 | import purple from '@material-ui/core/colors/purple'; 6 | 7 | const styles = theme => ({ 8 | progress: { 9 | margin: theme.spacing.unit * 2, 10 | }, 11 | }); 12 | 13 | function CircularIndeterminate(props) { 14 | const { classes } = props; 15 | return ( 16 |
17 | 18 | 19 | 20 | 21 |
22 | ); 23 | } 24 | 25 | CircularIndeterminate.propTypes = { 26 | classes: PropTypes.object.isRequired, 27 | }; 28 | 29 | export default withStyles(styles)(CircularIndeterminate); 30 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Progress/CircularStatic.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import CircularProgress from '@material-ui/core/CircularProgress'; 5 | 6 | const styles = theme => ({ 7 | progress: { 8 | margin: theme.spacing.unit * 2, 9 | }, 10 | }); 11 | 12 | function CircularStatic(props) { 13 | const { classes } = props; 14 | return ( 15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 | ); 23 | } 24 | 25 | CircularStatic.propTypes = { 26 | classes: PropTypes.object.isRequired, 27 | }; 28 | 29 | export default withStyles(styles)(CircularStatic); 30 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Progress/LinearBuffer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import LinearProgress from '@material-ui/core/LinearProgress'; 5 | 6 | const styles = { 7 | root: { 8 | flexGrow: 1, 9 | }, 10 | }; 11 | 12 | class LinearBuffer extends React.Component { 13 | state = { 14 | completed: 0, 15 | buffer: 10, 16 | }; 17 | 18 | componentDidMount() { 19 | this.timer = setInterval(this.progress, 500); 20 | } 21 | 22 | componentWillUnmount() { 23 | clearInterval(this.timer); 24 | } 25 | 26 | timer = null; 27 | 28 | progress = () => { 29 | const { completed } = this.state; 30 | if (completed > 100) { 31 | this.setState({ completed: 0, buffer: 10 }); 32 | } else { 33 | const diff = Math.random() * 10; 34 | const diff2 = Math.random() * 10; 35 | this.setState({ completed: completed + diff, buffer: completed + diff + diff2 }); 36 | } 37 | }; 38 | 39 | render() { 40 | const { classes } = this.props; 41 | const { completed, buffer } = this.state; 42 | return ( 43 |
44 | 45 |
46 | 47 |
48 | ); 49 | } 50 | } 51 | 52 | LinearBuffer.propTypes = { 53 | classes: PropTypes.object.isRequired, 54 | }; 55 | 56 | export default withStyles(styles)(LinearBuffer); 57 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Progress/LinearDeterminate.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import LinearProgress from '@material-ui/core/LinearProgress'; 5 | 6 | const styles = { 7 | root: { 8 | flexGrow: 1, 9 | }, 10 | }; 11 | 12 | class LinearDeterminate extends React.Component { 13 | state = { 14 | completed: 0, 15 | }; 16 | 17 | componentDidMount() { 18 | this.timer = setInterval(this.progress, 500); 19 | } 20 | 21 | componentWillUnmount() { 22 | clearInterval(this.timer); 23 | } 24 | 25 | timer = null; 26 | 27 | progress = () => { 28 | const { completed } = this.state; 29 | if (completed === 100) { 30 | this.setState({ completed: 0 }); 31 | } else { 32 | const diff = Math.random() * 10; 33 | this.setState({ completed: Math.min(completed + diff, 100) }); 34 | } 35 | }; 36 | 37 | render() { 38 | const { classes } = this.props; 39 | return ( 40 |
41 | 42 |
43 | 44 |
45 | ); 46 | } 47 | } 48 | 49 | LinearDeterminate.propTypes = { 50 | classes: PropTypes.object.isRequired, 51 | }; 52 | 53 | export default withStyles(styles)(LinearDeterminate); 54 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Progress/LinearIndeterminate.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import LinearProgress from '@material-ui/core/LinearProgress'; 5 | 6 | const styles = { 7 | root: { 8 | flexGrow: 1, 9 | }, 10 | }; 11 | 12 | function LinearIndeterminate(props) { 13 | const { classes } = props; 14 | return ( 15 |
16 | 17 |
18 | 19 |
20 | ); 21 | } 22 | 23 | LinearIndeterminate.propTypes = { 24 | classes: PropTypes.object.isRequired, 25 | }; 26 | 27 | export default withStyles(styles)(LinearIndeterminate); 28 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Progress/LinearQuery.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import LinearProgress from '@material-ui/core/LinearProgress'; 5 | 6 | const styles = { 7 | root: { 8 | flexGrow: 1, 9 | }, 10 | }; 11 | 12 | function LinearQuery(props) { 13 | const { classes } = props; 14 | return ( 15 |
16 | 17 |
18 | 19 |
20 | ); 21 | } 22 | 23 | LinearQuery.propTypes = { 24 | classes: PropTypes.object.isRequired, 25 | }; 26 | 27 | export default withStyles(styles)(LinearQuery); 28 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Progress/LinearStatic.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import LinearProgress from '@material-ui/core/LinearProgress'; 5 | 6 | const styles = { 7 | root: { 8 | flexGrow: 1, 9 | }, 10 | }; 11 | 12 | function LinearIndeterminate(props) { 13 | const { classes } = props; 14 | return ( 15 |
16 | 17 |
18 | 19 |
20 | ); 21 | } 22 | 23 | LinearIndeterminate.propTypes = { 24 | classes: PropTypes.object.isRequired, 25 | }; 26 | 27 | export default withStyles(styles)(LinearIndeterminate); 28 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Tabs/CenteredTabs.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import Paper from '@material-ui/core/Paper'; 5 | import Tabs from '@material-ui/core/Tabs'; 6 | import Tab from '@material-ui/core/Tab'; 7 | 8 | const styles = { 9 | root: { 10 | flexGrow: 1, 11 | }, 12 | }; 13 | 14 | class CenteredTabs extends React.Component { 15 | state = { 16 | value: 0, 17 | }; 18 | 19 | handleChange = (event, value) => { 20 | this.setState({ value }); 21 | }; 22 | 23 | render() { 24 | const { classes } = this.props; 25 | 26 | return ( 27 | 28 | 35 | 36 | 37 | 38 | 39 | 40 | ); 41 | } 42 | } 43 | 44 | CenteredTabs.propTypes = { 45 | classes: PropTypes.object.isRequired, 46 | }; 47 | 48 | export default withStyles(styles)(CenteredTabs); 49 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Tabs/DisabledTab.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Paper from '@material-ui/core/Paper'; 3 | import Tabs from '@material-ui/core/Tabs'; 4 | import Tab from '@material-ui/core/Tab'; 5 | 6 | class DisabledTab extends React.Component { 7 | state = { 8 | value: 2, 9 | }; 10 | 11 | handleChange = (event, value) => { 12 | this.setState({ value }); 13 | }; 14 | 15 | render() { 16 | return ( 17 | 18 | 24 | 25 | 26 | 27 | 28 | 29 | ); 30 | } 31 | } 32 | 33 | export default DisabledTab; 34 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Tabs/SimpleTabs.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import AppBar from '@material-ui/core/AppBar'; 5 | import Tabs from '@material-ui/core/Tabs'; 6 | import Tab from '@material-ui/core/Tab'; 7 | import Typography from '@material-ui/core/Typography'; 8 | 9 | function TabContainer(props) { 10 | return ( 11 | 12 | {props.children} 13 | 14 | ); 15 | } 16 | 17 | TabContainer.propTypes = { 18 | children: PropTypes.node.isRequired, 19 | }; 20 | 21 | const styles = theme => ({ 22 | root: { 23 | flexGrow: 1, 24 | backgroundColor: theme.palette.background.paper, 25 | }, 26 | }); 27 | 28 | class SimpleTabs extends React.Component { 29 | state = { 30 | value: 0, 31 | }; 32 | 33 | handleChange = (event, value) => { 34 | this.setState({ value }); 35 | }; 36 | 37 | render() { 38 | const { classes } = this.props; 39 | const { value } = this.state; 40 | 41 | return ( 42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | {value === 0 && Item One} 51 | {value === 1 && Item Two} 52 | {value === 2 && Item Three} 53 |
54 | ); 55 | } 56 | } 57 | 58 | SimpleTabs.propTypes = { 59 | classes: PropTypes.object.isRequired, 60 | }; 61 | 62 | export default withStyles(styles)(SimpleTabs); 63 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Typography/ColouredTypo.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Typography from '@material-ui/core/Typography'; 3 | import Type from 'ba-components/Typography.scss'; 4 | 5 | class ColouredTypo extends React.Component { 6 | render() { 7 | return ( 8 |
9 | 10 | Ut sed eros finibus 11 | 12 | 13 | Nulla eget lobortis lacus. Aliquam venenatis magna et odio lobortis maximus. 14 | 15 | 16 | Aliquam nec ex aliquet 17 | 18 | 19 | Aenean facilisis vitae purus facilisis semper 20 | 21 | 22 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sed urna in justo euismod condimentum. 23 | 24 | 25 | Vivamus et luctus mauris. Maecenas nisl libero, tincidunt id odio id, feugiat vulputate quam. 26 | 27 | 28 | Curabitur egestas consequat lorem, vel fermentum augue porta id. 29 | 30 |
31 | ); 32 | } 33 | } 34 | 35 | export default ColouredTypo; 36 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Typography/Heading.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Typography from '@material-ui/core/Typography'; 3 | 4 | class Heading extends React.Component { 5 | render() { 6 | return ( 7 |
8 | 9 | Disp 4 10 | 11 | 12 | Display 3 13 | 14 | 15 | Display 2 16 | 17 | 18 | Display 1 19 | 20 | 21 | Headline 22 | 23 | 24 | Title 25 | 26 | 27 | Subheading 28 | 29 | 30 | {` 31 | Lorem ipsum dolor sit amet, consectetur adipisicing elit, 32 | sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 33 | `} 34 | 35 |
36 | ); 37 | } 38 | } 39 | 40 | export default Heading; 41 | -------------------------------------------------------------------------------- /src/app/routes/UiElements/demos/Typography/QuotesDemo.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { withStyles } from '@material-ui/core/styles'; 4 | import { Quote } from './../../../../components'; 5 | 6 | const styles = theme => ({ 7 | divider: { 8 | margin: `${theme.spacing.unit * 3}px 0`, 9 | } 10 | }); 11 | 12 | class QuotesDemo extends React.Component { 13 | render() { 14 | const { classes } = this.props; 15 | return ( 16 |
17 |
18 | 19 |
20 |
21 | 22 |
23 |
24 | ); 25 | } 26 | } 27 | 28 | QuotesDemo.propTypes = { 29 | classes: PropTypes.object.isRequired, 30 | }; 31 | 32 | export default withStyles(styles)(QuotesDemo); 33 | -------------------------------------------------------------------------------- /src/app/routes/withTracker.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { object } from 'prop-types'; 3 | import GoogleAnalytics from 'react-ga'; 4 | import { googleAnaliticsId } from '../config'; 5 | 6 | if (googleAnaliticsId) { 7 | GoogleAnalytics.initialize(googleAnaliticsId); 8 | } 9 | 10 | export default function withTracker(WrappedComponent, options = {}) { 11 | const trackPage = (page) => { 12 | GoogleAnalytics.set({ 13 | page, 14 | ...options 15 | }); 16 | GoogleAnalytics.pageview(page); 17 | }; 18 | 19 | const HOC = class extends Component { 20 | static propTypes = { 21 | location: object.isRequired, 22 | }; 23 | 24 | componentDidMount() { 25 | if (googleAnaliticsId) { 26 | const page = this.props.location.pathname; 27 | trackPage(page); 28 | } 29 | } 30 | 31 | componentWillReceiveProps(nextProps) { 32 | if (googleAnaliticsId) { 33 | const currentPage = this.props.location.pathname; 34 | const nextPage = nextProps.location.pathname; 35 | 36 | if (currentPage !== nextPage) { 37 | trackPage(nextPage); 38 | } 39 | } 40 | } 41 | 42 | render() { 43 | return ; 44 | } 45 | }; 46 | 47 | if (typeof WrappedComponent.fetchData !== 'undefined') { 48 | HOC.fetchData = WrappedComponent.fetchData; 49 | } 50 | 51 | return HOC; 52 | } 53 | -------------------------------------------------------------------------------- /src/app/styles/components/Code.scss: -------------------------------------------------------------------------------- 1 | .codePre{ 2 | code{ 3 | color: #4f00ff; 4 | padding: 3px; 5 | border: #c1c1c1 1px solid; 6 | border-radius: 3px; 7 | font-size: 13px; 8 | } 9 | } -------------------------------------------------------------------------------- /src/app/styles/components/Form.scss: -------------------------------------------------------------------------------- 1 | @import "./../mixins"; 2 | $sm: "(max-width: 600px)"; 3 | .bodyForm{ 4 | position: relative; 5 | background: $white; 6 | padding: 24px; 7 | @media #{$sm} { 8 | padding: 15px 10px; 9 | } 10 | max-height: 450px; 11 | overflow: auto; 12 | } 13 | .buttonArea{ 14 | background: material-color('grey', '100'); 15 | position: relative; 16 | bottom: 0; 17 | left: 0; 18 | width: 100%; 19 | text-align: right; 20 | padding: 8px 24px; 21 | button{ 22 | margin-right: 5px; 23 | } 24 | } -------------------------------------------------------------------------------- /src/app/styles/components/Progress.scss: -------------------------------------------------------------------------------- 1 | @import "../../styles/mixins"; 2 | 3 | // Fill Background 4 | .bgInfo div{ 5 | background: material-color('blue', '300') 6 | } 7 | .bgSuccess div{ 8 | background: material-color('green', '300') 9 | } 10 | .bgWarning div{ 11 | background: material-color('orange', '300') 12 | } 13 | .bgError div{ 14 | background: material-color('red', '300') 15 | } 16 | .bgDefault div{ 17 | background: material-color('grey', '700') 18 | } -------------------------------------------------------------------------------- /src/app/styles/components/TextEditor.scss: -------------------------------------------------------------------------------- 1 | @import "../../styles/mixins"; 2 | 3 | .TextEditor{ 4 | background: #fff; 5 | min-height: 200px; 6 | border: 1px solid material-color('grey', '300'); 7 | padding: 0 10px; 8 | } 9 | 10 | .ToolbarEditor{ 11 | background: material-color('grey', '50'); 12 | border: none; 13 | } 14 | 15 | .textPreview{ 16 | width: 100%; 17 | resize: none; 18 | height: 305px; 19 | border-width: 1px; 20 | border-style: solid; 21 | border-color: material-color('grey', '300'); 22 | border-image: initial; 23 | padding: 5px; 24 | } -------------------------------------------------------------------------------- /src/app/styles/components/vendors/react-loading-bar/index.css: -------------------------------------------------------------------------------- 1 | .Loading__loading___1m_fZ { 2 | pointer-events: none; 3 | transition: 400ms linear all; 4 | } 5 | 6 | .Loading__bar___21yOt { 7 | position: fixed; 8 | top: 0; 9 | left: 0; 10 | z-index: 10002; 11 | display: none; 12 | width: 100%; 13 | height: 2px; 14 | background: #29d; 15 | border-radius: 0 1px 1px 0; 16 | transition: width 350ms; 17 | } 18 | 19 | .Loading__peg___3Y_28 { 20 | position: absolute; 21 | top: 0; 22 | right: 0; 23 | width: 70px; 24 | height: 2px; 25 | border-radius: 50%; 26 | opacity: .45; 27 | box-shadow: #29d 1px 0 6px 1px; 28 | } 29 | 30 | .Loading__spinner___11Pm4 { 31 | position: fixed; 32 | top: 5px; 33 | left: 5px; 34 | z-index: 10002; 35 | pointer-events: none; 36 | transition: 350ms linear all; 37 | } 38 | 39 | .Loading__icon___3OOyu { 40 | width: 14px; 41 | height: 14px; 42 | border: solid #29d; 43 | border-width: 0 2px 2px 0; 44 | border-radius: 50%; 45 | -webkit-animation: Loading__loading-bar-spinner___1hKY9 400ms linear infinite; 46 | animation: Loading__loading-bar-spinner___1hKY9 400ms linear infinite; 47 | } 48 | 49 | @-webkit-keyframes Loading__loading-bar-spinner___1hKY9 { 50 | 0% { 51 | -webkit-transform: rotate(0); 52 | transform: rotate(0); 53 | } 54 | 55 | 100% { 56 | -webkit-transform: rotate(360deg); 57 | transform: rotate(360deg); 58 | } 59 | } 60 | 61 | @keyframes Loading__loading-bar-spinner___1hKY9 { 62 | 0% { 63 | -webkit-transform: rotate(0); 64 | transform: rotate(0); 65 | } 66 | 67 | 100% { 68 | -webkit-transform: rotate(360deg); 69 | transform: rotate(360deg); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/app/styles/components/vendors/slick-carousel/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/src/app/styles/components/vendors/slick-carousel/ajax-loader.gif -------------------------------------------------------------------------------- /src/app/styles/components/vendors/slick-carousel/fonts/slick.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/src/app/styles/components/vendors/slick-carousel/fonts/slick.eot -------------------------------------------------------------------------------- /src/app/styles/components/vendors/slick-carousel/fonts/slick.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/src/app/styles/components/vendors/slick-carousel/fonts/slick.ttf -------------------------------------------------------------------------------- /src/app/styles/components/vendors/slick-carousel/fonts/slick.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/src/app/styles/components/vendors/slick-carousel/fonts/slick.woff -------------------------------------------------------------------------------- /src/app/styles/layout/_base.scss: -------------------------------------------------------------------------------- 1 | // Bitters 1.7.0 2 | // http://bitters.bourbon.io 3 | // Copyright 2013-2017 thoughtbot, inc. 4 | // MIT License 5 | 6 | @import "../variables"; 7 | @import "variables"; 8 | 9 | @import "buttons"; 10 | @import "forms"; 11 | @import "layout"; 12 | @import "lists"; 13 | @import "media"; 14 | @import "tables"; 15 | @import "typography"; 16 | -------------------------------------------------------------------------------- /src/app/styles/layout/_buttons.scss: -------------------------------------------------------------------------------- 1 | $_button-background-color: $action-color; 2 | $_button-background-color-hover: shade($action-color, 20%); 3 | 4 | #{$all-buttons} { 5 | appearance: none; 6 | background-color: $_button-background-color; 7 | border: 0; 8 | border-radius: $base-border-radius; 9 | color: contrast-switch($_button-background-color); 10 | cursor: pointer; 11 | display: inline-block; 12 | font-family: $base-font-family; 13 | font-size: 16px; 14 | -webkit-font-smoothing: antialiased; 15 | font-weight: 600; 16 | line-height: 1; 17 | padding: $small-spacing $base-spacing; 18 | text-align: center; 19 | text-decoration: none; 20 | transition: background-color $base-duration $base-timing; 21 | user-select: none; 22 | vertical-align: middle; 23 | white-space: nowrap; 24 | 25 | &:focus { 26 | outline: none; 27 | outline-offset: inherit; 28 | } 29 | 30 | &:disabled { 31 | cursor: not-allowed; 32 | opacity: 0.5; 33 | 34 | &:hover { 35 | background-color: $_button-background-color; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/app/styles/layout/_forms.scss: -------------------------------------------------------------------------------- 1 | $_form-background-color: #fff; 2 | $_form-box-shadow: inset 0 1px 3px rgba(#000, 0.06); 3 | $_form-box-shadow-focus: $_form-box-shadow, 0 0 5px rgba($action-color, 0.7); 4 | 5 | fieldset { 6 | background-color: transparent; 7 | border: 0; 8 | margin: 0; 9 | padding: 0; 10 | } 11 | 12 | legend { 13 | font-weight: 600; 14 | margin-bottom: $small-spacing / 2; 15 | padding: 0; 16 | } 17 | 18 | textarea { 19 | resize: vertical; 20 | } 21 | 22 | [type="checkbox"], 23 | [type="radio"] { 24 | display: inline; 25 | margin-right: $small-spacing / 2; 26 | } 27 | 28 | [type="file"] { 29 | margin-bottom: $small-spacing; 30 | width: 100%; 31 | } 32 | 33 | select { 34 | margin-bottom: $small-spacing; 35 | width: 100%; 36 | } 37 | 38 | [type="checkbox"], 39 | [type="radio"], 40 | [type="file"], 41 | select { 42 | &:focus { 43 | outline: $focus-outline; 44 | outline-offset: $focus-outline-offset; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/app/styles/layout/_layout.scss: -------------------------------------------------------------------------------- 1 | html { 2 | background-color: $viewport-background-color; 3 | box-sizing: border-box; 4 | } 5 | 6 | *, 7 | *::before, 8 | *::after { 9 | box-sizing: inherit; 10 | } 11 | 12 | html, 13 | body { 14 | height: 100%; 15 | } 16 | 17 | body { 18 | margin: 0; 19 | } 20 | -------------------------------------------------------------------------------- /src/app/styles/layout/_lists.scss: -------------------------------------------------------------------------------- 1 | ul, 2 | ol { 3 | list-style-type: none; 4 | margin: 0; 5 | padding: 0; 6 | } 7 | 8 | dl { 9 | margin: 0; 10 | } 11 | 12 | dt { 13 | font-weight: 600; 14 | margin: 0; 15 | } 16 | 17 | dd { 18 | margin: 0; 19 | } 20 | -------------------------------------------------------------------------------- /src/app/styles/layout/_media.scss: -------------------------------------------------------------------------------- 1 | figure { 2 | margin: 0; 3 | } 4 | 5 | img, 6 | picture { 7 | margin: 0; 8 | max-width: 100%; 9 | } 10 | -------------------------------------------------------------------------------- /src/app/styles/layout/_tables.scss: -------------------------------------------------------------------------------- 1 | table { 2 | border-collapse: collapse; 3 | margin: $base-spacing 0; 4 | text-align: left; 5 | width: 100%; 6 | } 7 | 8 | thead { 9 | line-height: $heading-line-height; 10 | vertical-align: bottom; 11 | } 12 | 13 | tbody { 14 | vertical-align: top; 15 | } 16 | 17 | tr { 18 | border-bottom: $base-border; 19 | } 20 | 21 | th { 22 | font-weight: 600; 23 | } 24 | 25 | th, 26 | td { 27 | padding: $small-spacing $base-spacing; 28 | @media screen and (max-width: 1400px) { 29 | padding: $small-spacing; 30 | padding-left: $base-spacing 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/app/styles/layout/_typography.scss: -------------------------------------------------------------------------------- 1 | @import "../../styles/mixins"; 2 | 3 | html { 4 | color: $base-font-color; 5 | font-family: $base-font-family; 6 | font-size: 100%; 7 | line-height: $base-line-height; 8 | } 9 | 10 | h1, 11 | h2, 12 | h3, 13 | h4, 14 | h5, 15 | h6 { 16 | font-family: $heading-font-family; 17 | font-size: modular-scale(1); 18 | line-height: $heading-line-height; 19 | margin: 0 0 $small-spacing; 20 | } 21 | 22 | p { 23 | margin: 0 0 $small-spacing; 24 | } 25 | 26 | a { 27 | color: material-color('blue', '500'); 28 | text-decoration-skip: ink; 29 | transition: color $base-duration $base-timing; 30 | 31 | &:focus { 32 | outline: none; 33 | outline-offset: none; 34 | } 35 | } 36 | 37 | hr { 38 | border-bottom: $base-border; 39 | border-left: 0; 40 | border-right: 0; 41 | border-top: 0; 42 | margin: $base-spacing 0; 43 | } 44 | 45 | 46 | [textalign="center"]{text-align: center !important} 47 | [textalign="left"]{text-align: left} 48 | [textalign="right"]{text-align: right} 49 | [textalign="justify"]{text-align: justify} -------------------------------------------------------------------------------- /src/app/styles/layout/_variables.scss: -------------------------------------------------------------------------------- 1 | // Typography 2 | $base-font-family: $font-stack-system; 3 | $heading-font-family: $base-font-family; 4 | 5 | // Line height 6 | $base-line-height: 1.5; 7 | $heading-line-height: 1.2; 8 | 9 | // Other Sizes 10 | $base-border-radius: 3px; 11 | $base-spacing: 1.5em; 12 | $big-spacing: $base-spacing * 2; 13 | $small-spacing: $base-spacing / 2; 14 | $base-z-index: 0; 15 | 16 | // Colors 17 | $white: #FFF; 18 | $grey-light: #F5F5F5; 19 | $grey: #E0E0E0; 20 | $grey-dark: #424242; 21 | 22 | // Font Colors 23 | $base-font-color: $grey-dark; 24 | $action-color: $grey; 25 | 26 | // Border 27 | $base-border-color: $grey; 28 | $base-border: 1px solid $base-border-color; 29 | 30 | // Background Colors 31 | $viewport-background-color: #fff; 32 | 33 | // Focus 34 | $focus-outline-color: transparentize($action-color, 0.4); 35 | $focus-outline-width: 3px; 36 | $focus-outline: $focus-outline-width solid $focus-outline-color; 37 | $focus-outline-offset: 2px; 38 | 39 | // Animations 40 | $base-duration: 150ms; 41 | $base-timing: ease; 42 | -------------------------------------------------------------------------------- /src/app/styles/mixins.scss: -------------------------------------------------------------------------------- 1 | @import "mixins/bourbon"; 2 | @import "mixins/neat"; 3 | @import "mixins/pallete"; 4 | -------------------------------------------------------------------------------- /src/app/styles/mixins/bourbon.scss: -------------------------------------------------------------------------------- 1 | @import "node_modules/bourbon/app/assets/stylesheets/_bourbon.scss"; 2 | -------------------------------------------------------------------------------- /src/app/styles/mixins/neat.scss: -------------------------------------------------------------------------------- 1 | @import "node_modules/bourbon-neat/app/assets/stylesheets/_neat.scss"; 2 | -------------------------------------------------------------------------------- /src/app/styles/mixins/pallete.scss: -------------------------------------------------------------------------------- 1 | // See the material colot pallete list here https://material-ui-next.com/style/color/ 2 | @import '../../../../node_modules/sass-material-colors/sass/sass-material-colors'; 3 | 4 | // Colors 5 | $white: #FFF; 6 | $grey-light: #F5F5F5; 7 | $grey: #E0E0E0; 8 | $grey-dark: #424242; -------------------------------------------------------------------------------- /src/app/styles/variables.scss: -------------------------------------------------------------------------------- 1 | @import "variables/bitters"; 2 | @import "variables/neat"; 3 | @import "variables/custom_pallete"; 4 | -------------------------------------------------------------------------------- /src/app/styles/variables/bitters.scss: -------------------------------------------------------------------------------- 1 | $font-stack-system: "Roboto", "Helvetica", "Arial", sans-serif; 2 | $heading-font-family: "Roboto", "Helvetica", "Arial", sans-serif; 3 | $all-buttons: 'button, input[type="button"], input[type="submit"]'; 4 | $all-text-inputs: 'input[type="text"], input[type="password"], input[type="email"], input[type="tel"]'; 5 | -------------------------------------------------------------------------------- /src/app/styles/variables/custom_pallete.scss: -------------------------------------------------------------------------------- 1 | @function grey(){ 2 | @return material-color('blue-grey', '400'); 3 | } 4 | 5 | @function greyLight(){ 6 | @return material-color('blue-grey', '200'); 7 | } 8 | 9 | @function greyLigther(){ 10 | @return material-color('blue-grey', '100'); 11 | } 12 | 13 | @function greyDark(){ 14 | @return material-color('blue-grey', '600'); 15 | } 16 | 17 | @function greyDarker(){ 18 | @return material-color('blue-grey', '800'); 19 | } 20 | 21 | @function black(){ 22 | @return material-color('blue-grey', '900'); 23 | } 24 | 25 | @function white(){ 26 | @return "#FFFFFF"; 27 | } 28 | 29 | @function primaryColor(){ 30 | @return material-color('indigo', '900'); 31 | } -------------------------------------------------------------------------------- /src/app/styles/variables/neat.scss: -------------------------------------------------------------------------------- 1 | $border-box-sizing: false; 2 | -------------------------------------------------------------------------------- /src/app/utils/avatars.js: -------------------------------------------------------------------------------- 1 | const avatars = [ 2 | '/images/avatars/pp_girl.svg', 3 | '/images/avatars/pp_girl.svg', 4 | '/images/avatars/pp_girl2.svg', 5 | '/images/avatars/pp_girl3.svg', 6 | '/images/avatars/pp_girl4.svg', 7 | '/images/avatars/pp_girl5.svg', 8 | '/images/avatars/pp_boy.svg', 9 | '/images/avatars/pp_boy2.svg', 10 | '/images/avatars/pp_boy3.svg', 11 | '/images/avatars/pp_boy4.svg', 12 | '/images/avatars/pp_boy5.svg', 13 | ]; 14 | 15 | export default avatars; 16 | -------------------------------------------------------------------------------- /src/app/utils/brand.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'Boss Lite', 3 | desc: 'Boss Lite - Material Admin Dashboard', 4 | prefix: 'boss', 5 | footerText: 'Boss Lite All Rights Reserved 2018', 6 | logoText: 'Boss Lite', 7 | needLogin: false 8 | }; 9 | -------------------------------------------------------------------------------- /src/app/utils/carouselData.js: -------------------------------------------------------------------------------- 1 | const carouselData = [ 2 | { 3 | background: '#E91E63', 4 | title: 'Feature', 5 | desc: 'Vestibulum tempor, sem et molestie egestas, dui tortor laoreet tellus.', 6 | icon: 'flag', 7 | }, 8 | { 9 | background: '#0091EA', 10 | title: 'Unlimited', 11 | desc: 'Aliquam nec ex aliquet, aliquam neque non, gravida est.', 12 | icon: 'all_inclusive', 13 | }, 14 | { 15 | background: '#00BFA5', 16 | title: 'Complete', 17 | desc: 'Vestibulum bibendum nisi eget magna malesuada', 18 | icon: 'done', 19 | }, 20 | { 21 | background: '#F57F17', 22 | title: 'Easy', 23 | desc: 'Vestibulum tempor, sem et molestie egestas, dui tortor laoreet tellus.', 24 | icon: 'extension', 25 | }, 26 | { 27 | background: '#7CB342', 28 | title: 'Satisfy', 29 | desc: 'Aliquam nec ex aliquet, aliquam neque non, gravida est.', 30 | icon: 'mood', 31 | }, 32 | { 33 | background: '#546E7A', 34 | title: 'Public', 35 | desc: 'Quisque a consequat ante, at volutpat enim. Aenean sit amet magna vel magna', 36 | icon: 'public', 37 | }, 38 | { 39 | background: '#00ACC1', 40 | title: 'Awesome', 41 | desc: 'Vestibulum tempor, sem et molestie egestas, dui tortor laoreet tellus.', 42 | icon: 'thumb_up', 43 | }, 44 | { 45 | background: '#C51162', 46 | title: 'Safeguard', 47 | desc: 'Quisque a consequat ante, at volutpat enim. Aenean sit amet magna vel magna', 48 | icon: 'lock', 49 | }, 50 | { 51 | background: '#7C4DFF', 52 | title: 'Favorite', 53 | desc: ' Aenean facilisis vitae purus facilisis semper.', 54 | icon: 'favorite', 55 | }, 56 | ]; 57 | 58 | export default carouselData; 59 | -------------------------------------------------------------------------------- /src/app/utils/chartMiniData.js: -------------------------------------------------------------------------------- 1 | export const data1 = [ 2 | { 3 | name: 'Page A', 4 | uv: 4000, 5 | pv: 2400, 6 | amt: 2400 7 | }, 8 | { 9 | name: 'Page B', 10 | uv: 3000, 11 | pv: 1398, 12 | amt: 2210 13 | }, 14 | { 15 | name: 'Page C', 16 | uv: 2000, 17 | pv: 9800, 18 | amt: 2290 19 | }, 20 | { 21 | name: 'Page D', 22 | uv: 2780, 23 | pv: 3908, 24 | amt: 2000 25 | }, 26 | { 27 | name: 'Page E', 28 | uv: 1890, 29 | pv: 4800, 30 | amt: 2181 31 | }, 32 | ]; 33 | 34 | export const data2 = [ 35 | { 36 | name: 'Group A', 37 | value: 400 38 | }, { 39 | name: 'Group B', 40 | value: 300 41 | }, 42 | { 43 | name: 'Group C', 44 | value: 300 45 | }, { 46 | name: 'Group D', 47 | value: 200 48 | } 49 | ]; 50 | -------------------------------------------------------------------------------- /src/app/utils/connectionData.js: -------------------------------------------------------------------------------- 1 | import imgApi from 'ba-utils/images'; 2 | import avatarApi from 'ba-utils/avatars'; 3 | const connectionData = [ 4 | { 5 | cover: imgApi[41], 6 | avatar: avatarApi[6], 7 | name: 'John Doe', 8 | title: 'UX Designer', 9 | connection: 203, 10 | verified: false 11 | }, 12 | { 13 | cover: imgApi[4], 14 | avatar: avatarApi[2], 15 | name: 'Jane Doe', 16 | title: 'Administrator', 17 | connection: 10, 18 | verified: true 19 | }, 20 | { 21 | cover: imgApi[42], 22 | avatar: avatarApi[7], 23 | name: 'James Doe', 24 | title: 'Marketing', 25 | connection: 18, 26 | verified: false 27 | }, 28 | { 29 | cover: imgApi[8], 30 | avatar: avatarApi[10], 31 | name: 'Mickey Joe', 32 | title: 'Teacher Lecture', 33 | connection: 6, 34 | verified: true 35 | }, 36 | { 37 | cover: imgApi[39], 38 | avatar: avatarApi[5], 39 | name: 'Janet Doe', 40 | title: 'UI Designer', 41 | connection: 18, 42 | verified: false 43 | }, 44 | { 45 | cover: imgApi[49], 46 | avatar: avatarApi[1], 47 | name: 'Michele Joe', 48 | title: 'Designer', 49 | connection: 100, 50 | verified: true 51 | }, 52 | { 53 | cover: imgApi[50], 54 | avatar: avatarApi[9], 55 | name: 'James Doe', 56 | title: 'Programmer', 57 | connection: 20, 58 | verified: true 59 | }, 60 | { 61 | cover: imgApi[45], 62 | avatar: avatarApi[8], 63 | name: 'Jimmy Doe', 64 | title: 'Interior Designer', 65 | connection: 1, 66 | verified: false 67 | }, 68 | { 69 | cover: imgApi[43], 70 | avatar: avatarApi[3], 71 | name: 'Maya Joe', 72 | title: 'Contributor', 73 | connection: 100, 74 | verified: false 75 | }, 76 | ]; 77 | 78 | export default connectionData; 79 | -------------------------------------------------------------------------------- /src/app/utils/dummyContents.js: -------------------------------------------------------------------------------- 1 | import avatarApi from './avatars'; 2 | module.exports = { 3 | user: { 4 | name: 'John Doe', 5 | title: 'Administrator', 6 | avatar: avatarApi[6] 7 | }, 8 | text: { 9 | title: 'Lorem ipsum', 10 | subtitle: 'Ut a lorem eu odio cursus laoreet.', 11 | sentences: 'Donec lacus sem, scelerisque sed ligula nec, iaculis porttitor mauris.', 12 | paragraph: 'Sed rutrum augue libero, id faucibus quam aliquet sed. Phasellus interdum orci quam, volutpat ornare eros rhoncus sed. Donec vestibulum leo a auctor convallis. In dignissim consectetur molestie. Vivamus interdum tempor dui, nec posuere augue consequat sit amet. Suspendisse quis semper quam. Nullam nec neque sem.', 13 | date: 'Jan 9, 2018' 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /src/app/utils/imgData.js: -------------------------------------------------------------------------------- 1 | import imgApi from './images'; 2 | const imgData = [ 3 | { 4 | img: imgApi[3], 5 | thumb: imgApi[3], 6 | title: 'Breakfast', 7 | author: 'jill111', 8 | cols: 2, 9 | featured: true, 10 | }, 11 | { 12 | img: imgApi[5], 13 | thumb: imgApi[5], 14 | title: 'Tasty burger', 15 | author: 'director90', 16 | }, 17 | { 18 | img: imgApi[33], 19 | thumb: imgApi[33], 20 | title: 'Camera', 21 | author: 'Danson67', 22 | }, 23 | { 24 | img: imgApi[35], 25 | thumb: imgApi[35], 26 | title: 'Morning', 27 | author: 'fancycrave1', 28 | featured: true, 29 | }, 30 | { 31 | img: imgApi[41], 32 | thumb: imgApi[41], 33 | title: 'Hats', 34 | author: 'Hans', 35 | }, 36 | { 37 | img: imgApi[43], 38 | thumb: imgApi[43], 39 | title: 'Honey', 40 | author: 'fancycravel', 41 | }, 42 | { 43 | img: imgApi[7], 44 | thumb: imgApi[7], 45 | title: 'Vegetables', 46 | author: 'jill111', 47 | cols: 2, 48 | }, 49 | { 50 | img: imgApi[9], 51 | thumb: imgApi[9], 52 | title: 'Water plant', 53 | author: 'BkrmadtyaKarki', 54 | }, 55 | { 56 | img: imgApi[17], 57 | thumb: imgApi[17], 58 | title: 'Mushrooms', 59 | author: 'PublicDomainPictures', 60 | }, 61 | { 62 | img: imgApi[13], 63 | thumb: imgApi[13], 64 | title: 'Olive oil', 65 | author: 'congerdesign', 66 | }, 67 | { 68 | img: imgApi[19], 69 | thumb: imgApi[19], 70 | title: 'Sea star', 71 | cols: 2, 72 | author: '821292', 73 | }, 74 | { 75 | img: imgApi[47], 76 | thumb: imgApi[47], 77 | title: 'Bike', 78 | author: 'danfador', 79 | }, 80 | ]; 81 | 82 | export default imgData; 83 | -------------------------------------------------------------------------------- /src/app/utils/imgDataMasonry.js: -------------------------------------------------------------------------------- 1 | import imgApi from './images'; 2 | const imgData = [ 3 | { 4 | img: imgApi[41], 5 | title: 'Breakfast', 6 | author: 'jill111', 7 | }, 8 | { 9 | img: imgApi[42], 10 | title: 'Tasty burger', 11 | author: 'director90', 12 | }, 13 | { 14 | img: imgApi[50], 15 | title: 'Camera', 16 | author: 'Danson67', 17 | }, 18 | { 19 | img: imgApi[39], 20 | title: 'Morning', 21 | author: 'fancycrave1', 22 | featured: true, 23 | }, 24 | { 25 | img: imgApi[2], 26 | title: 'Hats', 27 | author: 'Hans', 28 | }, 29 | { 30 | img: imgApi[22], 31 | title: 'Honey', 32 | author: 'fancycravel', 33 | }, 34 | { 35 | img: imgApi[46], 36 | title: 'Vegetables', 37 | author: 'jill111', 38 | cols: 2, 39 | }, 40 | { 41 | img: imgApi[20], 42 | title: 'Water plant', 43 | author: 'BkrmadtyaKarki', 44 | }, 45 | { 46 | img: imgApi[10], 47 | title: 'Mushrooms', 48 | author: 'PublicDomainPictures', 49 | }, 50 | { 51 | img: imgApi[27], 52 | title: 'Olive oil', 53 | author: 'congerdesign', 54 | }, 55 | { 56 | img: imgApi[13], 57 | title: 'Sea star', 58 | cols: 2, 59 | author: '821292', 60 | }, 61 | { 62 | img: imgApi[30], 63 | title: 'Bike', 64 | author: 'danfador', 65 | }, 66 | ]; 67 | 68 | export default imgData; 69 | -------------------------------------------------------------------------------- /src/app/utils/notifMessage.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | saved: 'Data has been saved', 3 | updated: 'Data has been updated', 4 | removed: 'Item has been removed', 5 | posted: 'Your post has been submitted', 6 | commented: 'Your comment has been submitted', 7 | discard: 'Action canceled', 8 | addCart: 'Item added to cart', 9 | checkout: 'Thank you for shopping', 10 | sent: 'Email sent', 11 | labeled: 'You just changed email label', 12 | }; 13 | -------------------------------------------------------------------------------- /src/app/utils/otherMenu.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | key: 'settings', 4 | name: 'Settings', 5 | link: '/#' 6 | }, 7 | { 8 | key: 'help_support', 9 | name: 'Help & Support', 10 | link: '/#' 11 | }, 12 | ]; 13 | -------------------------------------------------------------------------------- /src/app/utils/themePalette.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | magentaTheme: { 3 | palette: { 4 | primary: { 5 | light: '#FCE4EC', 6 | main: '#EC407A', 7 | dark: '#D81B60', 8 | contrastText: '#fff', 9 | }, 10 | secondary: { 11 | light: '#E0F7FA', 12 | main: '#00BCD4', 13 | dark: '#0097A7', 14 | contrastText: '#fff', 15 | }, 16 | }, 17 | }, 18 | blueTheme: { 19 | palette: { 20 | primary: { 21 | light: '#E8EAF6', 22 | main: '#3F51B5', 23 | dark: '#283593', 24 | contrastText: '#fff', 25 | }, 26 | secondary: { 27 | light: '#B3E5FC', 28 | main: '#03A9F4', 29 | dark: '#0277BD', 30 | contrastText: '#fff', 31 | }, 32 | }, 33 | }, 34 | skyBlueTheme: { 35 | palette: { 36 | primary: { 37 | light: '#E3F2FD', 38 | main: '#2196F3', 39 | dark: '#1565C0', 40 | contrastText: '#fff', 41 | }, 42 | secondary: { 43 | light: '#A7FFEB', 44 | main: '#00BFA5', 45 | dark: '#00796B', 46 | contrastText: '#fff', 47 | }, 48 | }, 49 | } 50 | }; 51 | -------------------------------------------------------------------------------- /src/client/root.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { object, oneOfType, array } from 'prop-types'; 3 | import { Provider } from 'react-redux'; 4 | import { renderRoutes } from 'react-router-config'; 5 | import { ConnectedRouter } from 'react-router-redux'; 6 | import {} from './normalize.scss'; 7 | import {} from './../app/styles/layout/_base.scss'; 8 | 9 | const Root = ({ 10 | history, 11 | routes, 12 | store 13 | }) => ( 14 | 15 | 16 | {renderRoutes(routes)} 17 | 18 | 19 | ); 20 | 21 | Root.propTypes = { 22 | history: object.isRequired, 23 | store: object.isRequired, 24 | routes: oneOfType([ 25 | array, 26 | object, 27 | ]).isRequired 28 | }; 29 | 30 | export default Root; 31 | -------------------------------------------------------------------------------- /src/helpers/ApiClient.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import config from './../app/config'; 3 | 4 | const methods = ['get', 'post', 'put', 'patch', 'del']; 5 | function formatUrl(path, directUrl = false) { 6 | if (directUrl) return path; 7 | const adjustedPath = path[0] !== '/' ? `/${path}` : path; 8 | if (path.indexOf('http') === 0) { 9 | return path; 10 | } 11 | return config.apiHost + adjustedPath; 12 | } 13 | 14 | class _ApiClient { 15 | constructor() { // we can get an access to req 16 | const _this = this; 17 | methods.forEach((method) => { 18 | _this[method] = (path, { 19 | params, 20 | data, 21 | headers, 22 | attachments, 23 | directUrl, 24 | handleProgress, 25 | } = {}) => { 26 | const requestConfig = { 27 | method, 28 | url: formatUrl(path, directUrl) 29 | }; 30 | 31 | if (params) { 32 | requestConfig.params = { ...params }; 33 | } 34 | 35 | if (headers) { 36 | requestConfig.headers = { ...headers }; 37 | } 38 | 39 | if (attachments) { 40 | if (attachments && typeof attachments === 'object') { 41 | const _data = new FormData(); 42 | Object.keys(attachments).forEach((c) => { 43 | _data.append(c, attachments[c]); 44 | }); 45 | requestConfig.data = _data; 46 | } 47 | } 48 | 49 | if (data && !attachments) { 50 | requestConfig.data = { ...data }; 51 | } 52 | 53 | if (handleProgress) { 54 | requestConfig.onUploadProgress = handleProgress; 55 | } 56 | 57 | return axios(requestConfig); 58 | }; 59 | }); 60 | } 61 | } 62 | 63 | const ApiClient = _ApiClient; 64 | 65 | export default ApiClient; 66 | -------------------------------------------------------------------------------- /src/server/env.js: -------------------------------------------------------------------------------- 1 | import dotenv from 'dotenv'; 2 | 3 | export default dotenv.config(); 4 | -------------------------------------------------------------------------------- /src/server/rawdocs.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | export default function rawdoc(componentName) { 4 | const dir = 'src/app/'; 5 | const content = fs.readFileSync(dir + componentName.src, 'utf8'); 6 | return content.toString(); 7 | } 8 | 9 | -------------------------------------------------------------------------------- /src/server/rawicons.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | export default function rawdoc(fileName) { 4 | const dir = 'src/helpers/'; 5 | const content = fs.readFileSync(dir + fileName.src, 'utf8'); 6 | return content.toString(); 7 | } 8 | -------------------------------------------------------------------------------- /src/server/start.js: -------------------------------------------------------------------------------- 1 | import { server } from 'universal-webpack'; 2 | import settings from './../../webpack/universal-webpack-settings.json'; 3 | import config from './../../webpack/webpack.config'; 4 | 5 | /** 6 | * Define isomorphic constants. 7 | */ 8 | global.__CLIENT__ = false; 9 | global.__SERVER__ = true; 10 | 11 | server(config, settings); 12 | -------------------------------------------------------------------------------- /static/favicons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/android-icon-144x144.png -------------------------------------------------------------------------------- /static/favicons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/android-icon-192x192.png -------------------------------------------------------------------------------- /static/favicons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/android-icon-36x36.png -------------------------------------------------------------------------------- /static/favicons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/android-icon-48x48.png -------------------------------------------------------------------------------- /static/favicons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/android-icon-72x72.png -------------------------------------------------------------------------------- /static/favicons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/android-icon-96x96.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-114x114.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-120x120.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-144x144.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-152x152.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-180x180.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-57x57.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-60x60.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-72x72.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-76x76.png -------------------------------------------------------------------------------- /static/favicons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /static/favicons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/apple-icon.png -------------------------------------------------------------------------------- /static/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /static/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /static/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /static/favicons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/favicon-96x96.png -------------------------------------------------------------------------------- /static/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/favicon.ico -------------------------------------------------------------------------------- /static/favicons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /static/favicons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/ms-icon-144x144.png -------------------------------------------------------------------------------- /static/favicons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/ms-icon-150x150.png -------------------------------------------------------------------------------- /static/favicons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/ms-icon-310x310.png -------------------------------------------------------------------------------- /static/favicons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/favicons/ms-icon-70x70.png -------------------------------------------------------------------------------- /static/images/avatars/pp_boy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/images/avatars/pp_girl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /static/images/material_bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /static/images/pp_boy.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/images/pp_girl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /static/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/images/spinner.gif -------------------------------------------------------------------------------- /static/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ilhammeidi/boss-lite/f96e950f111ab65e711293e2218731c391cc0a28/static/logo.jpg -------------------------------------------------------------------------------- /webpack/universal-webpack-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": { 3 | "input": "./src/server/server.js", 4 | "output": "./static/server/server.js" 5 | } 6 | } -------------------------------------------------------------------------------- /webpack/webpack-dev-server.js: -------------------------------------------------------------------------------- 1 | import Express from 'express'; 2 | import webpack from 'webpack'; 3 | import webpackDevMiddleware from 'webpack-dev-middleware'; 4 | import webpackHotMiddleware from 'webpack-hot-middleware'; 5 | import config from './webpack.config.client.development'; 6 | import appConfig from '../src/app/config'; 7 | 8 | const app = new Express(); 9 | const compiler = webpack(config); 10 | const { port } = appConfig.webpack.server; 11 | 12 | const options = { 13 | quiet: true, 14 | noInfo: true, 15 | hot: true, 16 | publicPath: config.output.publicPath, 17 | headers: { 'Access-Control-Allow-Origin': '*' }, 18 | stats: { colors: true } 19 | }; 20 | 21 | app.use(webpackDevMiddleware(compiler, options)); 22 | app.use(webpackHotMiddleware(compiler)); 23 | 24 | app.listen(port, (error) => { 25 | if (error) { 26 | console.error(error.stack || error); 27 | throw error; 28 | } 29 | 30 | console.info('Webpack development server listening on port %s', port); 31 | }); 32 | -------------------------------------------------------------------------------- /webpack/webpack.config.client.development.js: -------------------------------------------------------------------------------- 1 | import webpack from 'webpack'; 2 | import merge from 'webpack-merge'; 3 | import getBaseConfig from './webpack.config.client'; 4 | import appConfig from '../src/app/config'; 5 | 6 | const { host, port } = appConfig.webpack.server; 7 | const baseConfig = getBaseConfig({ 8 | development: true, 9 | css_bundle: true 10 | }); 11 | 12 | const config = { 13 | devtool: 'eval', 14 | 15 | performance: { hints: false }, 16 | 17 | entry: { 18 | main: [ 19 | `webpack-hot-middleware/client?path=${host}:${port}/__webpack_hmr`, 20 | 'react-hot-loader/patch', 21 | baseConfig.entry.main 22 | ] 23 | }, 24 | 25 | output: { 26 | publicPath: `${host}:${port}${baseConfig.output.publicPath}` 27 | }, 28 | 29 | module: { 30 | rules: [ 31 | { 32 | test: /\.js?$/, 33 | exclude: /node_modules/, 34 | loader: 'babel-loader' 35 | } 36 | ] 37 | }, 38 | 39 | plugins: [ 40 | new webpack.HotModuleReplacementPlugin(), 41 | new webpack.NamedModulesPlugin(), 42 | new webpack.DefinePlugin({ 43 | 'process.env': { 44 | NODE_ENV: JSON.stringify('development'), 45 | SSR: process.env.SSR, 46 | SSL: process.env.SSL, 47 | APISSL: process.env.APISSL, 48 | APIHOST: `"${process.env.APIHOST}"`, 49 | APIPORT: process.env.APIPORT, 50 | GOOGLE_ANALITICS_ID: `"${process.env.GOOGLE_ANALITICS_ID}"` 51 | }, 52 | __CLIENT__: true, 53 | __SERVER__: false 54 | }) 55 | ] 56 | }; 57 | 58 | export default merge(baseConfig, config); 59 | -------------------------------------------------------------------------------- /webpack/webpack.config.client.js: -------------------------------------------------------------------------------- 1 | import { clientConfiguration } from 'universal-webpack'; 2 | import settings from './universal-webpack-settings.json'; 3 | import config from './webpack.config'; 4 | 5 | export default function (options) { 6 | return clientConfiguration(config, settings, options); 7 | } 8 | -------------------------------------------------------------------------------- /webpack/webpack.config.server.development.babel.js: -------------------------------------------------------------------------------- 1 | import cloneDeep from 'lodash/cloneDeep'; 2 | import baseConfig from './webpack.config.server'; 3 | import appConfig from '../src/app/config'; 4 | 5 | const { host, port } = appConfig.webpack.server; 6 | const config = cloneDeep(baseConfig); 7 | 8 | config.output.publicPath = `${host}:${port}${config.output.publicPath}`; 9 | 10 | export default config; 11 | -------------------------------------------------------------------------------- /webpack/webpack.config.server.js: -------------------------------------------------------------------------------- 1 | import { serverConfiguration } from 'universal-webpack'; 2 | import settings from './universal-webpack-settings.json'; 3 | import config from './webpack.config'; 4 | 5 | export default serverConfiguration(config, settings); 6 | -------------------------------------------------------------------------------- /webpack/webpack.config.server.production.babel.js: -------------------------------------------------------------------------------- 1 | import baseConfiguration from './webpack.config.server'; 2 | export default baseConfiguration; 3 | --------------------------------------------------------------------------------