From e13e630cd6e4fc0b1ff92098a28a770794c7bb9a Mon Sep 17 00:00:00 2001 From: gabrhr <73925454+gabrhr@users.noreply.github.com> Date: Wed, 20 Apr 2022 10:19:29 -0500 Subject: =?UTF-8?q?A=C3=B1adir=20plantilla?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Base para front --- front/odiparpack/app/components/.DS_Store | Bin 0 -> 8196 bytes .../app/components/Badges/LimitedBadges.js | 27 + .../app/components/BreadCrumb/BreadCrumb.js | 55 + .../app/components/BreadCrumb/breadCrumb-jss.js | 29 + .../odiparpack/app/components/Calendar/AddEvent.js | 49 + .../app/components/Calendar/AddEventForm.js | 178 ++ .../app/components/Calendar/DetailEvent.js | 167 ++ .../app/components/Calendar/EventCalendar.js | 70 + .../app/components/Calendar/calendar-jss.js | 118 ++ .../app/components/CardPaper/GeneralCard.js | 52 + .../app/components/CardPaper/IdentityCard.js | 70 + .../app/components/CardPaper/NewsCard.js | 46 + .../app/components/CardPaper/PlayerCard.js | 66 + .../app/components/CardPaper/PostCard.js | 142 ++ .../app/components/CardPaper/ProductCard.js | 134 ++ .../app/components/CardPaper/ProfileCard.js | 99 ++ .../app/components/CardPaper/VideoCard.js | 90 + .../app/components/CardPaper/cardStyle-jss.js | 188 ++ front/odiparpack/app/components/Cart/Cart.js | 137 ++ front/odiparpack/app/components/Cart/cart-jss.js | 38 + front/odiparpack/app/components/Chat/ChatHeader.js | 122 ++ front/odiparpack/app/components/Chat/ChatRoom.js | 106 ++ .../odiparpack/app/components/Chat/MessageField.js | 69 + .../app/components/Chat/chatStyle-jss.js | 148 ++ .../app/components/Chat/svg/trigger-opaque.svg | 66 + .../components/Chat/svg/trigger-transparent.svg | 68 + .../app/components/Contact/AddContact.js | 82 + .../app/components/Contact/AddContactForm.js | 273 +++ .../app/components/Contact/ContactDetail.js | 195 +++ .../app/components/Contact/ContactHeader.js | 62 + .../app/components/Contact/ContactList.js | 112 ++ .../app/components/Contact/contact-jss.js | 282 +++ .../app/components/Counter/CounterWidget.js | 80 + .../app/components/Divider/divider-jss.js | 70 + front/odiparpack/app/components/Divider/index.js | 148 ++ .../app/components/Email/ComposeEmail.js | 65 + .../app/components/Email/ComposeEmailForm.js | 262 +++ .../odiparpack/app/components/Email/EmailHeader.js | 49 + front/odiparpack/app/components/Email/EmailList.js | 314 ++++ .../app/components/Email/EmailSidebar.js | 162 ++ front/odiparpack/app/components/Email/email-jss.js | 238 +++ front/odiparpack/app/components/Error/ErrorWrap.js | 75 + front/odiparpack/app/components/Forms/LockForm.js | 123 ++ front/odiparpack/app/components/Forms/LoginForm.js | 147 ++ .../app/components/Forms/MaterialDropZone.js | 202 +++ .../app/components/Forms/ReduxFormMUI.js | 69 + .../app/components/Forms/RegisterForm.js | 174 ++ front/odiparpack/app/components/Forms/ResetForm.js | 71 + .../app/components/Forms/helpers/helpers.js | 8 + front/odiparpack/app/components/Forms/user-jss.js | 179 ++ .../app/components/Gallery/PhotoGallery.js | 83 + .../app/components/Gallery/ProductDetail.js | 195 +++ .../app/components/Gallery/ProductGallery.js | 152 ++ .../odiparpack/app/components/Gallery/photo-jss.js | 79 + .../app/components/Gallery/product-jss.js | 87 + front/odiparpack/app/components/Header/Header.js | 63 + front/odiparpack/app/components/Header/UserMenu.js | 177 ++ .../odiparpack/app/components/Header/header-jss.js | 166 ++ .../app/components/ImageLightbox/ImageLightbox.js | 1794 ++++++++++++++++++++ .../app/components/ImageLightbox/constant.js | 39 + .../app/components/ImageLightbox/util.js | 46 + front/odiparpack/app/components/Loading/index.js | 20 + .../app/components/Notification/Notification.js | 59 + .../app/components/Pagination/Pagination.js | 189 +++ .../app/components/Panel/FloatingPanel.js | 90 + front/odiparpack/app/components/Panel/panel-jss.js | 95 ++ .../app/components/PapperBlock/PapperBlock.js | 55 + .../app/components/PapperBlock/papperStyle-jss.js | 58 + front/odiparpack/app/components/Profile/About.js | 243 +++ front/odiparpack/app/components/Profile/Albums.js | 152 ++ .../app/components/Profile/Connection.js | 45 + .../odiparpack/app/components/Profile/Favorites.js | 130 ++ .../app/components/Profile/profile-jss.js | 155 ++ front/odiparpack/app/components/Quote/Quote.js | 81 + front/odiparpack/app/components/Rating/Rating.js | 144 ++ .../app/components/Search/SearchProduct.js | 84 + .../odiparpack/app/components/Search/search-jss.js | 48 + .../odiparpack/app/components/Sidebar/MainMenu.js | 130 ++ .../odiparpack/app/components/Sidebar/OtherMenu.js | 44 + front/odiparpack/app/components/Sidebar/Sidebar.js | 122 ++ .../app/components/Sidebar/sidebar-jss.js | 205 +++ .../app/components/SocialMedia/Comment.js | 135 ++ .../odiparpack/app/components/SocialMedia/Cover.js | 103 ++ .../app/components/SocialMedia/SideSection.js | 209 +++ .../app/components/SocialMedia/Timeline.js | 177 ++ .../app/components/SocialMedia/WritePost.js | 169 ++ .../app/components/SocialMedia/jss/cover-jss.js | 55 + .../components/SocialMedia/jss/socialMedia-jss.js | 89 + .../app/components/SocialMedia/jss/timeline-jss.js | 95 ++ .../components/SocialMedia/jss/writePost-jss.js | 73 + .../app/components/SourceReader/SourceReader.js | 114 ++ front/odiparpack/app/components/Tables/AdvTable.js | 206 +++ .../odiparpack/app/components/Tables/CrudTable.js | 52 + .../app/components/Tables/CrudTableForm.js | 70 + .../odiparpack/app/components/Tables/EmptyData.js | 14 + .../odiparpack/app/components/Tables/TreeTable.js | 190 +++ .../components/Tables/tableParts/DatePickerCell.js | 59 + .../components/Tables/tableParts/EditableCell.js | 86 + .../app/components/Tables/tableParts/Form.js | 71 + .../app/components/Tables/tableParts/MainTable.js | 104 ++ .../components/Tables/tableParts/MainTableForm.js | 97 ++ .../app/components/Tables/tableParts/Row.js | 167 ++ .../components/Tables/tableParts/RowReadOnly.js | 76 + .../components/Tables/tableParts/SelectableCell.js | 46 + .../components/Tables/tableParts/TableHeader.js | 74 + .../components/Tables/tableParts/TableToolbar.js | 123 ++ .../components/Tables/tableParts/TimePickerCell.js | 66 + .../app/components/Tables/tableParts/ToggleCell.js | 50 + .../components/Tables/tableParts/tableStyle-jss.js | 63 + .../app/components/TemplateSettings/ThemeThumb.js | 74 + .../app/components/TemplateSettings/index.js | 93 + .../components/TemplateSettings/themeStyles-jss.js | 106 ++ .../app/components/Widget/AlbumWidget.js | 55 + .../app/components/Widget/AreaChartWidget.js | 147 ++ .../app/components/Widget/BigChartWidget.js | 142 ++ .../app/components/Widget/CarouselWidget.js | 117 ++ .../app/components/Widget/CounterGroupWidget.js | 101 ++ .../app/components/Widget/CounterIconsWidget.js | 74 + .../odiparpack/app/components/Widget/MapWidget.js | 60 + .../app/components/Widget/ProfileWidget.js | 54 + .../app/components/Widget/ProgressWidget.js | 39 + .../app/components/Widget/SliderWidget.js | 69 + .../app/components/Widget/TableWidget.js | 124 ++ .../odiparpack/app/components/Widget/TaskWidget.js | 83 + .../odiparpack/app/components/Widget/widget-jss.js | 294 ++++ front/odiparpack/app/components/index.js | 87 + 126 files changed, 15358 insertions(+) create mode 100644 front/odiparpack/app/components/.DS_Store create mode 100644 front/odiparpack/app/components/Badges/LimitedBadges.js create mode 100644 front/odiparpack/app/components/BreadCrumb/BreadCrumb.js create mode 100644 front/odiparpack/app/components/BreadCrumb/breadCrumb-jss.js create mode 100644 front/odiparpack/app/components/Calendar/AddEvent.js create mode 100644 front/odiparpack/app/components/Calendar/AddEventForm.js create mode 100644 front/odiparpack/app/components/Calendar/DetailEvent.js create mode 100644 front/odiparpack/app/components/Calendar/EventCalendar.js create mode 100644 front/odiparpack/app/components/Calendar/calendar-jss.js create mode 100644 front/odiparpack/app/components/CardPaper/GeneralCard.js create mode 100644 front/odiparpack/app/components/CardPaper/IdentityCard.js create mode 100644 front/odiparpack/app/components/CardPaper/NewsCard.js create mode 100644 front/odiparpack/app/components/CardPaper/PlayerCard.js create mode 100644 front/odiparpack/app/components/CardPaper/PostCard.js create mode 100644 front/odiparpack/app/components/CardPaper/ProductCard.js create mode 100644 front/odiparpack/app/components/CardPaper/ProfileCard.js create mode 100644 front/odiparpack/app/components/CardPaper/VideoCard.js create mode 100644 front/odiparpack/app/components/CardPaper/cardStyle-jss.js create mode 100644 front/odiparpack/app/components/Cart/Cart.js create mode 100644 front/odiparpack/app/components/Cart/cart-jss.js create mode 100644 front/odiparpack/app/components/Chat/ChatHeader.js create mode 100644 front/odiparpack/app/components/Chat/ChatRoom.js create mode 100644 front/odiparpack/app/components/Chat/MessageField.js create mode 100644 front/odiparpack/app/components/Chat/chatStyle-jss.js create mode 100644 front/odiparpack/app/components/Chat/svg/trigger-opaque.svg create mode 100644 front/odiparpack/app/components/Chat/svg/trigger-transparent.svg create mode 100644 front/odiparpack/app/components/Contact/AddContact.js create mode 100644 front/odiparpack/app/components/Contact/AddContactForm.js create mode 100644 front/odiparpack/app/components/Contact/ContactDetail.js create mode 100644 front/odiparpack/app/components/Contact/ContactHeader.js create mode 100644 front/odiparpack/app/components/Contact/ContactList.js create mode 100644 front/odiparpack/app/components/Contact/contact-jss.js create mode 100644 front/odiparpack/app/components/Counter/CounterWidget.js create mode 100644 front/odiparpack/app/components/Divider/divider-jss.js create mode 100644 front/odiparpack/app/components/Divider/index.js create mode 100644 front/odiparpack/app/components/Email/ComposeEmail.js create mode 100644 front/odiparpack/app/components/Email/ComposeEmailForm.js create mode 100644 front/odiparpack/app/components/Email/EmailHeader.js create mode 100644 front/odiparpack/app/components/Email/EmailList.js create mode 100644 front/odiparpack/app/components/Email/EmailSidebar.js create mode 100644 front/odiparpack/app/components/Email/email-jss.js create mode 100644 front/odiparpack/app/components/Error/ErrorWrap.js create mode 100644 front/odiparpack/app/components/Forms/LockForm.js create mode 100644 front/odiparpack/app/components/Forms/LoginForm.js create mode 100644 front/odiparpack/app/components/Forms/MaterialDropZone.js create mode 100644 front/odiparpack/app/components/Forms/ReduxFormMUI.js create mode 100644 front/odiparpack/app/components/Forms/RegisterForm.js create mode 100644 front/odiparpack/app/components/Forms/ResetForm.js create mode 100644 front/odiparpack/app/components/Forms/helpers/helpers.js create mode 100644 front/odiparpack/app/components/Forms/user-jss.js create mode 100644 front/odiparpack/app/components/Gallery/PhotoGallery.js create mode 100644 front/odiparpack/app/components/Gallery/ProductDetail.js create mode 100644 front/odiparpack/app/components/Gallery/ProductGallery.js create mode 100644 front/odiparpack/app/components/Gallery/photo-jss.js create mode 100644 front/odiparpack/app/components/Gallery/product-jss.js create mode 100644 front/odiparpack/app/components/Header/Header.js create mode 100644 front/odiparpack/app/components/Header/UserMenu.js create mode 100644 front/odiparpack/app/components/Header/header-jss.js create mode 100644 front/odiparpack/app/components/ImageLightbox/ImageLightbox.js create mode 100644 front/odiparpack/app/components/ImageLightbox/constant.js create mode 100644 front/odiparpack/app/components/ImageLightbox/util.js create mode 100644 front/odiparpack/app/components/Loading/index.js create mode 100644 front/odiparpack/app/components/Notification/Notification.js create mode 100644 front/odiparpack/app/components/Pagination/Pagination.js create mode 100644 front/odiparpack/app/components/Panel/FloatingPanel.js create mode 100644 front/odiparpack/app/components/Panel/panel-jss.js create mode 100644 front/odiparpack/app/components/PapperBlock/PapperBlock.js create mode 100644 front/odiparpack/app/components/PapperBlock/papperStyle-jss.js create mode 100644 front/odiparpack/app/components/Profile/About.js create mode 100644 front/odiparpack/app/components/Profile/Albums.js create mode 100644 front/odiparpack/app/components/Profile/Connection.js create mode 100644 front/odiparpack/app/components/Profile/Favorites.js create mode 100644 front/odiparpack/app/components/Profile/profile-jss.js create mode 100644 front/odiparpack/app/components/Quote/Quote.js create mode 100644 front/odiparpack/app/components/Rating/Rating.js create mode 100644 front/odiparpack/app/components/Search/SearchProduct.js create mode 100644 front/odiparpack/app/components/Search/search-jss.js create mode 100644 front/odiparpack/app/components/Sidebar/MainMenu.js create mode 100644 front/odiparpack/app/components/Sidebar/OtherMenu.js create mode 100644 front/odiparpack/app/components/Sidebar/Sidebar.js create mode 100644 front/odiparpack/app/components/Sidebar/sidebar-jss.js create mode 100644 front/odiparpack/app/components/SocialMedia/Comment.js create mode 100644 front/odiparpack/app/components/SocialMedia/Cover.js create mode 100644 front/odiparpack/app/components/SocialMedia/SideSection.js create mode 100644 front/odiparpack/app/components/SocialMedia/Timeline.js create mode 100644 front/odiparpack/app/components/SocialMedia/WritePost.js create mode 100644 front/odiparpack/app/components/SocialMedia/jss/cover-jss.js create mode 100644 front/odiparpack/app/components/SocialMedia/jss/socialMedia-jss.js create mode 100644 front/odiparpack/app/components/SocialMedia/jss/timeline-jss.js create mode 100644 front/odiparpack/app/components/SocialMedia/jss/writePost-jss.js create mode 100644 front/odiparpack/app/components/SourceReader/SourceReader.js create mode 100644 front/odiparpack/app/components/Tables/AdvTable.js create mode 100644 front/odiparpack/app/components/Tables/CrudTable.js create mode 100644 front/odiparpack/app/components/Tables/CrudTableForm.js create mode 100644 front/odiparpack/app/components/Tables/EmptyData.js create mode 100644 front/odiparpack/app/components/Tables/TreeTable.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/DatePickerCell.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/EditableCell.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/Form.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/MainTable.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/MainTableForm.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/Row.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/RowReadOnly.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/SelectableCell.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/TableHeader.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/TableToolbar.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/TimePickerCell.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/ToggleCell.js create mode 100644 front/odiparpack/app/components/Tables/tableParts/tableStyle-jss.js create mode 100644 front/odiparpack/app/components/TemplateSettings/ThemeThumb.js create mode 100644 front/odiparpack/app/components/TemplateSettings/index.js create mode 100644 front/odiparpack/app/components/TemplateSettings/themeStyles-jss.js create mode 100644 front/odiparpack/app/components/Widget/AlbumWidget.js create mode 100644 front/odiparpack/app/components/Widget/AreaChartWidget.js create mode 100644 front/odiparpack/app/components/Widget/BigChartWidget.js create mode 100644 front/odiparpack/app/components/Widget/CarouselWidget.js create mode 100644 front/odiparpack/app/components/Widget/CounterGroupWidget.js create mode 100644 front/odiparpack/app/components/Widget/CounterIconsWidget.js create mode 100644 front/odiparpack/app/components/Widget/MapWidget.js create mode 100644 front/odiparpack/app/components/Widget/ProfileWidget.js create mode 100644 front/odiparpack/app/components/Widget/ProgressWidget.js create mode 100644 front/odiparpack/app/components/Widget/SliderWidget.js create mode 100644 front/odiparpack/app/components/Widget/TableWidget.js create mode 100644 front/odiparpack/app/components/Widget/TaskWidget.js create mode 100644 front/odiparpack/app/components/Widget/widget-jss.js create mode 100644 front/odiparpack/app/components/index.js (limited to 'front/odiparpack/app/components') diff --git a/front/odiparpack/app/components/.DS_Store b/front/odiparpack/app/components/.DS_Store new file mode 100644 index 0000000..a82440f Binary files /dev/null and b/front/odiparpack/app/components/.DS_Store differ diff --git a/front/odiparpack/app/components/Badges/LimitedBadges.js b/front/odiparpack/app/components/Badges/LimitedBadges.js new file mode 100644 index 0000000..a0e0ecd --- /dev/null +++ b/front/odiparpack/app/components/Badges/LimitedBadges.js @@ -0,0 +1,27 @@ +import React, { PureComponent } from 'react'; +import PropTypes from 'prop-types'; +import { Badge } from '@material-ui/core'; + +class LimitedBadges extends PureComponent { + render() { + const { + children, + limit, + value, + ...rest + } = this.props; + return ( + limit ? limit + '+' : value} {...rest}> + { children } + + ); + } +} + +LimitedBadges.propTypes = { + children: PropTypes.node.isRequired, + value: PropTypes.number.isRequired, + limit: PropTypes.number.isRequired, +}; + +export default LimitedBadges; diff --git a/front/odiparpack/app/components/BreadCrumb/BreadCrumb.js b/front/odiparpack/app/components/BreadCrumb/BreadCrumb.js new file mode 100644 index 0000000..0d11753 --- /dev/null +++ b/front/odiparpack/app/components/BreadCrumb/BreadCrumb.js @@ -0,0 +1,55 @@ +import React, { Fragment } from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import classNames from 'classnames'; +import { Link, Route } from 'react-router-dom'; +import styles from './breadCrumb-jss'; + +const Breadcrumbs = (props) => { + const { + classes, + theme, + separator, + location + } = props; + return ( +
+ { + let parts = location.pathname.split('/'); + const place = parts[parts.length - 1]; + parts = parts.slice(1, parts.length - 1); + return ( +

+ You are here: + + { + parts.map((part, partIndex) => { + const path = ['', ...parts.slice(0, partIndex + 1)].join('/'); + return ( + + {part} + { separator } + + ); + }) + } +  {place} + +

+ ); + }} + /> +
+ ); +}; + +Breadcrumbs.propTypes = { + classes: PropTypes.object.isRequired, + location: PropTypes.object.isRequired, + theme: PropTypes.string.isRequired, + separator: PropTypes.string.isRequired, +}; + +export default withStyles(styles)(Breadcrumbs); diff --git a/front/odiparpack/app/components/BreadCrumb/breadCrumb-jss.js b/front/odiparpack/app/components/BreadCrumb/breadCrumb-jss.js new file mode 100644 index 0000000..fe2dc47 --- /dev/null +++ b/front/odiparpack/app/components/BreadCrumb/breadCrumb-jss.js @@ -0,0 +1,29 @@ +const styles = theme => ({ + dark: {}, + breadcrumbs: { + position: 'relative', + display: 'block', + fontSize: 12, + color: 'rgba(255, 255, 255, 0.5)', + '& p': { + display: 'block', + '& span': { + textTransform: 'capitalize', + marginLeft: 5, + }, + '& a': { + color: theme.palette.common.white, + textDecoration: 'none', + margin: '0 5px' + } + }, + '&$dark': { + color: theme.palette.grey[900], + '& a': { + color: theme.palette.grey[900] + } + } + } +}); + +export default styles; diff --git a/front/odiparpack/app/components/Calendar/AddEvent.js b/front/odiparpack/app/components/Calendar/AddEvent.js new file mode 100644 index 0000000..ef1f5a5 --- /dev/null +++ b/front/odiparpack/app/components/Calendar/AddEvent.js @@ -0,0 +1,49 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import Add from '@material-ui/icons/Add'; +import { Fab, Tooltip } from '@material-ui/core'; +import FloatingPanel from '../Panel/FloatingPanel'; +import AddEventForm from './AddEventForm'; +import styles from './calendar-jss.js'; + + +class AddEvent extends React.Component { + showResult(values) { + setTimeout(() => { + this.props.submit(values); + }, 500); // simulate server latency + } + + render() { + const { + classes, + openForm, + closeForm, + addEvent + } = this.props; + const branch = ''; + return ( +
+ + addEvent()} className={classes.addBtn}> + + + + closeForm()}> + this.showResult(values)} /> + +
+ ); + } +} + +AddEvent.propTypes = { + classes: PropTypes.object.isRequired, + openForm: PropTypes.bool.isRequired, + addEvent: PropTypes.func.isRequired, + closeForm: PropTypes.func.isRequired, + submit: PropTypes.func.isRequired, +}; + +export default withStyles(styles)(AddEvent); diff --git a/front/odiparpack/app/components/Calendar/AddEventForm.js b/front/odiparpack/app/components/Calendar/AddEventForm.js new file mode 100644 index 0000000..9edccca --- /dev/null +++ b/front/odiparpack/app/components/Calendar/AddEventForm.js @@ -0,0 +1,178 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import { KeyboardDatePicker, MuiPickersUtilsProvider } from '@material-ui/pickers'; +import MomentUtils from '@date-io/moment'; +import { reduxForm, Field } from 'redux-form/immutable'; +import { connect } from 'react-redux'; +import css from 'ba-styles/Form.scss'; +import { Button, Radio, RadioGroup, FormLabel, FormControlLabel } from '@material-ui/core'; +import { TextFieldRedux } from '../Forms/ReduxFormMUI'; +import styles from './calendar-jss'; + + +// validation functions +const required = value => (value == null ? 'Required' : undefined); + +const DateTimePickerRow = props => { + const { + showErrorsInline, + dispatch, + input: { onChange, value }, + meta: { touched, error }, + ...other + } = props; + + const showError = showErrorsInline || touched; + return ( + + + + ); +}; + +DateTimePickerRow.propTypes = { + showErrorsInline: PropTypes.bool, + dispatch: PropTypes.func, + input: PropTypes.object.isRequired, + meta: PropTypes.object.isRequired, +}; + +const renderRadioGroup = ({ input, ...rest }) => ( + input.onChange(value)} + /> +); + +renderRadioGroup.propTypes = { + input: PropTypes.object.isRequired, +}; + +DateTimePickerRow.defaultProps = { + showErrorsInline: false, + dispatch: () => {}, +}; + +class AddEventForm extends React.Component { + state = { + selectedDate: new Date(), + } + + onChangeDate = date => { + this.setState({ selectedDate: date }); + } + + saveRef = ref => { + this.ref = ref; + return this.ref; + }; + + render() { + const { + classes, + reset, + pristine, + submitting, + handleSubmit, + } = this.props; + const { selectedDate } = this.state; + return ( +
+
+
+
+ +
+
+ +
+
+ +
+
+ Label Color + + } label="Red" /> + } label="Green" /> + } label="Blue" /> + } label="Violet" /> + } label="Orange" /> + +
+
+
+ + +
+
+
+ ); + } +} + +AddEventForm.propTypes = { + classes: PropTypes.object.isRequired, + handleSubmit: PropTypes.func.isRequired, + reset: PropTypes.func.isRequired, + pristine: PropTypes.bool.isRequired, + submitting: PropTypes.bool.isRequired, +}; + +const AddEventFormRedux = reduxForm({ + form: 'immutableAddCalendar', + enableReinitialize: true, +})(AddEventForm); + +const reducer = 'calendar'; +const AddEventInit = connect( + state => ({ + force: state, + initialValues: state.getIn([reducer, 'formValues']) + }), +)(AddEventFormRedux); + +export default withStyles(styles)(AddEventInit); diff --git a/front/odiparpack/app/components/Calendar/DetailEvent.js b/front/odiparpack/app/components/Calendar/DetailEvent.js new file mode 100644 index 0000000..b25d8b9 --- /dev/null +++ b/front/odiparpack/app/components/Calendar/DetailEvent.js @@ -0,0 +1,167 @@ +import React, { Fragment } from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import MoreVertIcon from '@material-ui/icons/MoreVert'; +import Today from '@material-ui/icons/Today'; +import { Typography, IconButton, Menu, MenuItem, Divider, Popover } from '@material-ui/core'; +import styles from './calendar-jss'; + + +const ITEM_HEIGHT = 48; + +class DetailEvent extends React.Component { + state = { + anchorElOpt: null, + }; + + handleClickOpt = event => { + this.setState({ anchorElOpt: event.currentTarget }); + }; + + handleCloseOpt = () => { + this.setState({ anchorElOpt: null }); + }; + + handleDeleteEvent = (event) => { + this.setState({ anchorElOpt: null }); + this.props.remove(event); + this.props.close(); + }; + + render() { + const getDate = date => { + if (date._isAMomentObject) { + return date.format('MMMM Do YYYY'); + } + let dd = date.getDate(); + const monthNames = [ + 'January', 'February', 'March', 'April', 'May', 'June', + 'July', 'August', 'September', 'October', 'November', 'December' + ]; + const mm = monthNames[date.getMonth()]; // January is 0! + const yyyy = date.getFullYear(); + + if (dd < 10) { + dd = '0' + dd; + } + + const convertedDate = mm + ', ' + dd + ' ' + yyyy; + + return convertedDate; + }; + + const getTime = time => { + if (time._isAMomentObject) { + return time.format('LT'); + } + let h = time.getHours(); + let m = time.getMinutes(); + + if (h < 10) { + h = '0' + h; + } + + if (m < 10) { + m = '0' + m; + } + + const convertedTime = h + ':' + m; + return convertedTime; + }; + + const { + classes, + anchorEl, + event, + close, + anchorPos + } = this.props; + const { anchorElOpt } = this.state; + return ( + + + + + {event !== null + && ( + + + this.handleDeleteEvent(event)}> + Delete Event + + + + + {' '} + {event.title} + +
+ +Start: + {getDate(event.start)} + {' '} +- + {getTime(event.start)} + + + +End: + {getDate(event.end)} + {' '} +- + {getTime(event.end)} + +
+
+ ) + } +
+ ); + } +} + +DetailEvent.propTypes = { + classes: PropTypes.object.isRequired, + anchorEl: PropTypes.bool.isRequired, + anchorPos: PropTypes.object.isRequired, + event: PropTypes.object, + close: PropTypes.func.isRequired, + remove: PropTypes.func.isRequired, +}; + +DetailEvent.defaultProps = { + event: null, +}; + +export default withStyles(styles)(DetailEvent); diff --git a/front/odiparpack/app/components/Calendar/EventCalendar.js b/front/odiparpack/app/components/Calendar/EventCalendar.js new file mode 100644 index 0000000..fe7b76e --- /dev/null +++ b/front/odiparpack/app/components/Calendar/EventCalendar.js @@ -0,0 +1,70 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import BigCalendar from 'react-big-calendar'; +import moment from 'moment'; +import { Paper } from '@material-ui/core'; +import styles from './calendar-jss'; + +BigCalendar.setLocalizer(BigCalendar.momentLocalizer(moment)); + +function Event(event) { + return ( + {event.title} + ); +} + +class EventCalendar extends React.Component { + eventStyleGetter = event => { + const backgroundColor = '#' + event.hexColor; + const style = { + backgroundColor, + }; + return { + style + }; + } + + render() { + const allViews = Object.keys(BigCalendar.Views).map(k => BigCalendar.Views[k]); + const { + classes, + events, + handleEventClick + } = this.props; + return ( + + handleEventClick(selectedEvent)} + eventPropGetter={(this.eventStyleGetter)} + onSelectSlot={slotInfo => console.log( + `selected slot: \n\nstart ${slotInfo.start.toLocaleString()} ` + + `\nend: ${slotInfo.end.toLocaleString()}` + + `\naction: ${slotInfo.action}` + ) + } + components={{ + event: Event + }} + /> + + ); + } +} + +EventCalendar.propTypes = { + classes: PropTypes.object.isRequired, + events: PropTypes.array.isRequired, + handleEventClick: PropTypes.func.isRequired, +}; + +export default withStyles(styles)(EventCalendar); diff --git a/front/odiparpack/app/components/Calendar/calendar-jss.js b/front/odiparpack/app/components/Calendar/calendar-jss.js new file mode 100644 index 0000000..36ed0a4 --- /dev/null +++ b/front/odiparpack/app/components/Calendar/calendar-jss.js @@ -0,0 +1,118 @@ +import { + pink as red, + lightGreen as green, + lightBlue as blue, + deepPurple as violet, + orange, +} from '@material-ui/core/colors'; + +const styles = theme => ({ + root: { + padding: 20, + [theme.breakpoints.down('sm')]: { + padding: '20px 8px' + }, + }, + calendarWrap: { + minHeight: 600 + }, + addBtn: { + position: 'fixed', + bottom: 30, + right: 30, + zIndex: 100 + }, + typography: { + margin: theme.spacing(2), + }, + divider: { + margin: '5px 0', + textAlign: 'center' + }, + button: { + margin: theme.spacing(1), + }, + eventName: { + padding: '50px 20px 10px 30px', + minWidth: 400, + color: 'rgba(0, 0, 0, 0.7)', + '& svg': { + top: -2, + position: 'relative' + } + }, + time: { + padding: 20 + }, + moreOpt: { + position: 'absolute', + top: 10, + right: 10 + }, + field: { + width: '100%', + marginBottom: 20 + }, + fieldBasic: { + width: '100%', + marginBottom: 20, + marginTop: 10 + }, + inlineWrap: { + display: 'flex', + flexDirection: 'row' + }, + redRadio: { + color: red[600], + '& svg': { + borderRadius: '50%', + background: red[100], + }, + '&$checked': { + color: red[500], + }, + }, + greenRadio: { + color: green[600], + '& svg': { + borderRadius: '50%', + background: green[100], + }, + '&$checked': { + color: green[500], + }, + }, + blueRadio: { + color: blue[600], + '& svg': { + borderRadius: '50%', + background: blue[100], + }, + '&$checked': { + color: blue[500], + }, + }, + violetRadio: { + color: violet[600], + '& svg': { + borderRadius: '50%', + background: violet[100], + }, + '&$checked': { + color: violet[500], + }, + }, + orangeRadio: { + color: orange[600], + '& svg': { + borderRadius: '50%', + background: orange[100], + }, + '&$checked': { + color: orange[500], + }, + }, + checked: {}, +}); + +export default styles; diff --git a/front/odiparpack/app/components/CardPaper/GeneralCard.js b/front/odiparpack/app/components/CardPaper/GeneralCard.js new file mode 100644 index 0000000..85f7787 --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/GeneralCard.js @@ -0,0 +1,52 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import FavoriteIcon from '@material-ui/icons/Favorite'; +import ShareIcon from '@material-ui/icons/Share'; +import Comment from '@material-ui/icons/Comment'; +import { Card, CardActions, CardContent, IconButton } from '@material-ui/core'; +import styles from './cardStyle-jss'; + + +class GeneralCard extends React.Component { + render() { + const { + classes, + children, + liked, + shared, + commented + } = this.props; + return ( + + + {children} + + + + 0 && classes.liked} /> + {liked} + + + 0 && classes.shared} /> + {shared} + + + + {commented} + + + + ); + } +} + +GeneralCard.propTypes = { + classes: PropTypes.object.isRequired, + children: PropTypes.node.isRequired, + liked: PropTypes.number.isRequired, + shared: PropTypes.number.isRequired, + commented: PropTypes.number.isRequired, +}; + +export default withStyles(styles)(GeneralCard); diff --git a/front/odiparpack/app/components/CardPaper/IdentityCard.js b/front/odiparpack/app/components/CardPaper/IdentityCard.js new file mode 100644 index 0000000..4f4bd6c --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/IdentityCard.js @@ -0,0 +1,70 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import LocalPhone from '@material-ui/icons/LocalPhone'; +import LocationOn from '@material-ui/icons/LocationOn'; +import { + Card, Typography, CardContent, + ListItem, ListItemText, ListItemAvatar, + Avatar, Divider +} from '@material-ui/core'; +import styles from './cardStyle-jss'; + + +class IdentityCard extends React.Component { + render() { + const { + classes, + title, + name, + avatar, + phone, + address, + } = this.props; + return ( + + + {title} + + + + + + + + + + + + + + + + + + + + + + + + + + ); + } +} + +IdentityCard.propTypes = { + classes: PropTypes.object.isRequired, + title: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + avatar: PropTypes.string.isRequired, + phone: PropTypes.string.isRequired, + address: PropTypes.string.isRequired, +}; + +export default withStyles(styles)(IdentityCard); diff --git a/front/odiparpack/app/components/CardPaper/NewsCard.js b/front/odiparpack/app/components/CardPaper/NewsCard.js new file mode 100644 index 0000000..f9994d8 --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/NewsCard.js @@ -0,0 +1,46 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import { Card, CardMedia, CardActions, CardContent, Button } from '@material-ui/core'; +import styles from './cardStyle-jss'; + + +class NewsCard extends React.Component { + render() { + const { + classes, + children, + title, + image, + } = this.props; + return ( + + + + {children} + + + + + + + ); + } +} + +NewsCard.propTypes = { + classes: PropTypes.object.isRequired, + children: PropTypes.node.isRequired, + title: PropTypes.string.isRequired, + image: PropTypes.string.isRequired, +}; + +export default withStyles(styles)(NewsCard); diff --git a/front/odiparpack/app/components/CardPaper/PlayerCard.js b/front/odiparpack/app/components/CardPaper/PlayerCard.js new file mode 100644 index 0000000..eabbb3a --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/PlayerCard.js @@ -0,0 +1,66 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import SkipPreviousIcon from '@material-ui/icons/SkipPrevious'; +import PlayArrowIcon from '@material-ui/icons/PlayArrow'; +import SkipNextIcon from '@material-ui/icons/SkipNext'; +import { Typography, Card, CardMedia, CardContent, IconButton } from '@material-ui/core'; +import styles from './cardStyle-jss'; + + +class PlayerCard extends React.Component { + state = { expanded: false }; + + handleExpandClick = () => { + this.setState({ expanded: !this.state.expanded }); + }; + + render() { + const { + classes, + theme, + title, + artist, + cover, + } = this.props; + + return ( + +
+ + {title} + + {artist} + + +
+ + {theme.direction === 'rtl' ? : } + + + + + + {theme.direction === 'rtl' ? : } + +
+
+ +
+ ); + } +} + +PlayerCard.propTypes = { + classes: PropTypes.object.isRequired, + theme: PropTypes.object.isRequired, + title: PropTypes.string.isRequired, + artist: PropTypes.string.isRequired, + cover: PropTypes.string.isRequired, +}; + +export default withStyles(styles, { withTheme: true })(PlayerCard); diff --git a/front/odiparpack/app/components/CardPaper/PostCard.js b/front/odiparpack/app/components/CardPaper/PostCard.js new file mode 100644 index 0000000..9c8f05b --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/PostCard.js @@ -0,0 +1,142 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import FavoriteIcon from '@material-ui/icons/Favorite'; +import ShareIcon from '@material-ui/icons/Share'; +import Comment from '@material-ui/icons/Comment'; +import MoreVertIcon from '@material-ui/icons/MoreVert'; +import { + Typography, + Card, + Menu, + MenuItem, + CardHeader, + CardMedia, + CardContent, + CardActions, + IconButton, + Avatar, +} from '@material-ui/core'; +import styles from './cardStyle-jss'; + + +const optionsOpt = [ + 'Report this post', + 'Hide this post', + 'Copy link', +]; + +const ITEM_HEIGHT = 48; + +class PostCard extends React.Component { + state = { anchorElOpt: null }; + + handleClickOpt = event => { + this.setState({ anchorElOpt: event.currentTarget }); + }; + + handleCloseOpt = () => { + this.setState({ anchorElOpt: null }); + }; + + render() { + const { + classes, + avatar, + name, + date, + image, + content, + liked, + shared, + commented + } = this.props; + const { anchorElOpt } = this.state; + return ( + + + } + action={( + + + + )} + title={name} + subheader={date} + /> + + {optionsOpt.map(option => ( + + {option} + + ))} + + { image !== '' + && ( + + ) + } + + + {content} + + + + + 0 && classes.liked} /> + {liked} + + + 0 && classes.shared} /> + {shared} + + + + {commented} + + + + ); + } +} + +PostCard.propTypes = { + classes: PropTypes.object.isRequired, + avatar: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + date: PropTypes.string.isRequired, + image: PropTypes.string, + content: PropTypes.string.isRequired, + liked: PropTypes.number.isRequired, + shared: PropTypes.number.isRequired, + commented: PropTypes.number.isRequired, +}; + +PostCard.defaultProps = { + image: '' +}; + +export default withStyles(styles)(PostCard); diff --git a/front/odiparpack/app/components/CardPaper/ProductCard.js b/front/odiparpack/app/components/CardPaper/ProductCard.js new file mode 100644 index 0000000..967e2fd --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/ProductCard.js @@ -0,0 +1,134 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import { isWidthUp } from '@material-ui/core/withWidth'; +import classNames from 'classnames'; +import AddShoppingCart from '@material-ui/icons/AddShoppingCart'; +import Type from 'ba-styles/Typography.scss'; +import { + Typography, + withWidth, + Card, + IconButton, + Tooltip, + CardMedia, + CardActions, + CardContent, + Chip, + Fab, + Button, +} from '@material-ui/core'; +import Rating from '../Rating/Rating'; +import styles from './cardStyle-jss'; + + +class ProductCard extends React.Component { + render() { + const { + classes, + discount, + soldout, + thumbnail, + name, + desc, + ratting, + price, + prevPrice, + list, + detailOpen, + addToCart, + width, + } = this.props; + return ( + +
+ {discount !== '' && ( + + )} + {soldout && ( + + )} +
+ + + {!soldout && ( + + + + + + )} + + {name} + + + {desc} + +
+ +
+
+ + + +$ + {price} + + + {prevPrice > 0 && ( + + +$ + {prevPrice} + + + )} +
+ + {!soldout && ( + + + + + + )} +
+
+
+ ); + } +} + +ProductCard.propTypes = { + classes: PropTypes.object.isRequired, + discount: PropTypes.string, + width: PropTypes.string.isRequired, + soldout: PropTypes.bool, + thumbnail: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + desc: PropTypes.string.isRequired, + ratting: PropTypes.number.isRequired, + price: PropTypes.number.isRequired, + prevPrice: PropTypes.number, + list: PropTypes.bool, + detailOpen: PropTypes.func, + addToCart: PropTypes.func, +}; + +ProductCard.defaultProps = { + discount: '', + soldout: false, + prevPrice: 0, + list: false, + detailOpen: () => (false), + addToCart: () => (false), +}; + +const ProductCardResponsive = withWidth()(ProductCard); +export default withStyles(styles)(ProductCardResponsive); diff --git a/front/odiparpack/app/components/CardPaper/ProfileCard.js b/front/odiparpack/app/components/CardPaper/ProfileCard.js new file mode 100644 index 0000000..7827941 --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/ProfileCard.js @@ -0,0 +1,99 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import Type from 'ba-styles/Typography.scss'; +import VerifiedUser from '@material-ui/icons/VerifiedUser'; +import SupervisorAccount from '@material-ui/icons/SupervisorAccount'; +import Favorite from '@material-ui/icons/Favorite'; +import PhotoLibrary from '@material-ui/icons/PhotoLibrary'; +import { + Typography, + Card, + CardMedia, + CardContent, + CardActions, + Button, + Avatar, + BottomNavigation, + BottomNavigationAction, + Divider, +} from '@material-ui/core'; +import styles from './cardStyle-jss'; + + +class ProfileCard extends React.Component { + state = { expanded: false }; + + handleExpandClick = () => { + this.setState({ expanded: !this.state.expanded }); + }; + + render() { + const { + classes, + cover, + avatar, + name, + title, + connection, + isVerified, + btnText + } = this.props; + + return ( + + + + + + {name} + {isVerified && } + + + {title} + + + {connection} + {' '} +connection + + + + + + + } /> + } /> + } /> + + + + ); + } +} + +ProfileCard.propTypes = { + classes: PropTypes.object.isRequired, + cover: PropTypes.string.isRequired, + avatar: PropTypes.string.isRequired, + name: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + connection: PropTypes.number.isRequired, + btnText: PropTypes.string.isRequired, + isVerified: PropTypes.bool +}; + +ProfileCard.defaultProps = { + isVerified: false +}; + +export default withStyles(styles)(ProfileCard); diff --git a/front/odiparpack/app/components/CardPaper/VideoCard.js b/front/odiparpack/app/components/CardPaper/VideoCard.js new file mode 100644 index 0000000..69aa60c --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/VideoCard.js @@ -0,0 +1,90 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import PlayArrowIcon from '@material-ui/icons/PlayArrow'; +import MoreVertIcon from '@material-ui/icons/MoreVert'; +import { red } from '@material-ui/core/colors'; + +import { Card, CardHeader, CardMedia, IconButton, Avatar } from '@material-ui/core'; + +const styles = theme => ({ + playIcon: { + height: 38, + width: 38, + }, + cardSocmed: { + maxWidth: 400, + }, + media: { + height: 0, + paddingTop: '56.25%', // 16:9 + position: 'relative', + }, + avatar: { + backgroundColor: red[500], + }, + playBtn: { + position: 'absolute', + top: '50%', + left: '50%', + width: 64, + height: 64, + transform: 'translate(-50%, -50%)', + '& svg': { + color: theme.palette.common.white, + fontSize: 64 + } + } +}); + +class VideoCard extends React.Component { + state = { expanded: false }; + + handleExpandClick = () => { + this.setState({ expanded: !this.state.expanded }); + }; + + render() { + const { + classes, + title, + cover, + date + } = this.props; + + return ( + + + + + + R + + )} + action={( + + + + )} + title={title} + subheader={date} + /> + + ); + } +} + +VideoCard.propTypes = { + classes: PropTypes.object.isRequired, + title: PropTypes.string.isRequired, + cover: PropTypes.string.isRequired, + date: PropTypes.string.isRequired, +}; + +export default withStyles(styles)(VideoCard); diff --git a/front/odiparpack/app/components/CardPaper/cardStyle-jss.js b/front/odiparpack/app/components/CardPaper/cardStyle-jss.js new file mode 100644 index 0000000..df367a0 --- /dev/null +++ b/front/odiparpack/app/components/CardPaper/cardStyle-jss.js @@ -0,0 +1,188 @@ +import { pink, lightGreen, blueGrey as dark } from '@material-ui/core/colors'; + +const styles = theme => ({ + divider: { + margin: `${theme.spacing(3)}px 0` + }, + card: { + minWidth: 275, + }, + liked: { + color: pink[500] + }, + shared: { + color: lightGreen[500] + }, + num: { + fontSize: 14, + marginLeft: 5 + }, + rightIcon: { + marginLeft: 'auto', + display: 'flex', + alignItems: 'center' + }, + button: { + marginRight: theme.spacing(1) + }, + media: { + height: 0, + paddingTop: '56.25%', // 16:9 + }, + cardPlayer: { + display: 'flex', + justifyContent: 'space-between' + }, + details: { + display: 'flex', + flexDirection: 'column', + }, + content: { + flex: '1 0 auto', + }, + cover: { + width: 150, + height: 150, + }, + controls: { + display: 'flex', + alignItems: 'center', + paddingLeft: theme.spacing(1), + paddingBottom: theme.spacing(1), + }, + playIcon: { + height: 38, + width: 38, + }, + cardSocmed: { + minWidth: 275, + }, + cardProduct: { + position: 'relative' + }, + mediaProduct: { + height: 0, + paddingTop: '60.25%', // 16:9 + }, + rightAction: { + '&:not(:first-child)': { + marginLeft: 'auto', + display: 'flex', + alignItems: 'center' + } + }, + floatingButtonWrap: { + position: 'relative', + paddingTop: 50 + }, + buttonAdd: { + position: 'absolute', + right: 20, + top: -20, + }, + buttonAddList: { + display: 'none', + marginLeft: 10 + }, + title: { + fontSize: 20, + height: 30, + }, + ratting: { + margin: '10px 0', + '& button': { + width: 24, + height: 24 + } + }, + status: { + position: 'absolute', + right: 0, + top: 0, + padding: 10, + '& > *': { + margin: 5 + } + }, + desc: { + height: 45, + overflow: 'hidden' + }, + chipDiscount: { + background: theme.palette.primary.light, + color: theme.palette.primary.dark, + }, + chipSold: { + background: dark[500], + color: theme.palette.getContrastText(dark[500]), + }, + contentProfle: { + flex: '1 0 auto', + textAlign: 'center' + }, + mediaProfile: { + height: 0, + paddingTop: '36.25%', // 16:9 + }, + actions: { + display: 'flex', + }, + avatarBig: { + width: 80, + height: 80, + margin: '-56px auto 10px', + background: theme.palette.secondary.dark + }, + name: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center' + }, + buttonProfile: { + margin: 20 + }, + bottomLink: { + width: '100%', + }, + price: { + padding: theme.spacing(2), + paddingBottom: 20 + }, + contentProfile: { + textAlign: 'center' + }, + verified: { + fontSize: 16, + color: theme.palette.primary.main + }, + cardList: { + display: 'flex', + justifyContent: 'space-between', + '& $buttonAddList': { + display: 'inline-block' + }, + '& $floatingButtonWrap': { + flex: 1, + }, + '& $buttonAdd': { + display: 'none' + }, + '& $status': { + right: 'auto', + left: 0, + }, + '& $mediaProduct': { + width: 300, + paddingTop: '21.25%' + }, + '& $price': { + flexDirection: 'column', + justifyContent: 'center', + '& button': { + marginTop: 20 + } + } + }, +}); + +export default styles; diff --git a/front/odiparpack/app/components/Cart/Cart.js b/front/odiparpack/app/components/Cart/Cart.js new file mode 100644 index 0000000..d477a51 --- /dev/null +++ b/front/odiparpack/app/components/Cart/Cart.js @@ -0,0 +1,137 @@ +import React, { Fragment } from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import DeleteIcon from '@material-ui/icons/Delete'; +import ShoppingCartIcon from '@material-ui/icons/ShoppingCart'; +import Type from 'ba-styles/Typography.scss'; +import { + Menu, + Typography, + Button, + ListSubheader, + List, + ListItem, + ListItemText, + ListItemSecondaryAction, + IconButton, + Divider, +} from '@material-ui/core'; +import styles from './cart-jss'; + + +class Cart extends React.Component { + render() { + const { + classes, + anchorEl, + close, + dataCart, + removeItem, + totalPrice, + checkout + } = this.props; + + const getCartItem = dataArray => dataArray.map((item, index) => ( + + +
+ thumb +
+ + + removeItem(item)}> + + + +
+
  • + +
  • +
    + )); + return ( + + + + {' '} +Total: + {' '} + {dataCart.size} + {' '} +Unique items in Cart + + )} + className={classes.cartWrap} + > + { + dataCart.size < 1 ? ( +
    + Empty Cart + Your shopping items will be listed here +
    + ) : ( + + {getCartItem(dataCart)} + + + Total : + {' '} + +$ + {totalPrice} + + + +
  • + +
  • + + + +
    + ) + } +
    +
    + ); + } +} + +Cart.propTypes = { + classes: PropTypes.object.isRequired, + dataCart: PropTypes.object.isRequired, + anchorEl: PropTypes.object, + close: PropTypes.func.isRequired, + removeItem: PropTypes.func.isRequired, + checkout: PropTypes.func.isRequired, + totalPrice: PropTypes.number.isRequired, +}; + +Cart.defaultProps = { + anchorEl: null, +}; + +export default withStyles(styles)(Cart); diff --git a/front/odiparpack/app/components/Cart/cart-jss.js b/front/odiparpack/app/components/Cart/cart-jss.js new file mode 100644 index 0000000..aef71cd --- /dev/null +++ b/front/odiparpack/app/components/Cart/cart-jss.js @@ -0,0 +1,38 @@ +const styles = theme => ({ + totalPrice: { + background: theme.palette.grey[200], + textAlign: 'right', + display: 'block' + }, + cartWrap: { + [theme.breakpoints.up('sm')]: { + width: 400, + }, + '&:focus': { + outline: 'none' + } + }, + itemText: { + marginRight: 30, + overflow: 'hidden', + whiteSpace: 'nowrap', + textOverflow: 'ellipsis', + width: 220 + }, + cartPanel: { + '& figure': { + width: 120, + height: 70, + overflow: 'hidden', + '& img': { + maxWidth: '100%' + } + } + }, + empty: { + textAlign: 'center', + padding: 20 + } +}); + +export default styles; diff --git a/front/odiparpack/app/components/Chat/ChatHeader.js b/front/odiparpack/app/components/Chat/ChatHeader.js new file mode 100644 index 0000000..b3456e9 --- /dev/null +++ b/front/odiparpack/app/components/Chat/ChatHeader.js @@ -0,0 +1,122 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import classNames from 'classnames'; +import MoreVertIcon from '@material-ui/icons/MoreVert'; +import ArrowBack from '@material-ui/icons/ArrowBack'; +import { Typography, AppBar, Menu, MenuItem, Avatar, IconButton, Toolbar } from '@material-ui/core'; +import styles from '../Contact/contact-jss'; + + +const optionsOpt = [ + 'Delete Conversation', + 'Option 1', + 'Option 2', + 'Option 3', +]; + +const ITEM_HEIGHT = 48; + +class ChatHeader extends React.Component { + state = { + anchorElOpt: null, + }; + + handleClickOpt = event => { + this.setState({ anchorElOpt: event.currentTarget }); + }; + + handleCloseOpt = () => { + this.setState({ anchorElOpt: null }); + }; + + handleRemove = (person) => { + this.props.remove(person); + } + + render() { + const { + classes, + chatSelected, + dataContact, + showMobileDetail, + hideDetail, + } = this.props; + const { anchorElOpt } = this.state; + return ( + + + {showMobileDetail && ( + hideDetail()} + className={classes.navIconHide} + > + + + )} + + + {dataContact.getIn([chatSelected, 'name'])} + + + {' '} +Online + + + + + + + + {optionsOpt.map(option => { + if (option === 'Delete Conversation') { + return ( + + {option} + + ); + } + return ( + + {option} + + ); + })} + + + ); + } +} + +ChatHeader.propTypes = { + classes: PropTypes.object.isRequired, + dataContact: PropTypes.object.isRequired, + showMobileDetail: PropTypes.bool.isRequired, + hideDetail: PropTypes.func.isRequired, + remove: PropTypes.func.isRequired, + chatSelected: PropTypes.number.isRequired, +}; + +export default withStyles(styles)(ChatHeader); diff --git a/front/odiparpack/app/components/Chat/ChatRoom.js b/front/odiparpack/app/components/Chat/ChatRoom.js new file mode 100644 index 0000000..9abef89 --- /dev/null +++ b/front/odiparpack/app/components/Chat/ChatRoom.js @@ -0,0 +1,106 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import classNames from 'classnames'; +import Send from '@material-ui/icons/Send'; +import dummyContents from 'ba-api/dummyContents'; +import Type from 'ba-styles/Typography.scss'; +import { Avatar, Typography, Paper, Tooltip, IconButton } from '@material-ui/core'; +import MessageField from './MessageField'; +import styles from './chatStyle-jss'; + + +class ChatRoom extends React.Component { + constructor() { + super(); + this.state = { message: '' }; + this.handleWrite = this.handleWrite.bind(this); + } + + handleWrite = (e, value) => { + this.setState({ message: value }); + }; + + resetInput = () => { + const ctn = document.getElementById('roomContainer'); + this.setState({ message: '' }); + this._field.setState({ value: '' }); + setTimeout(() => { + ctn.scrollTo(0, ctn.scrollHeight); + }, 300); + } + + sendMessageByEnter = (event, message) => { + if (event.key === 'Enter' && event.target.value !== '') { + this.props.sendMessage(message.__html); + this.resetInput(); + } + } + + sendMessage = message => { + this.props.sendMessage(message.__html); + this.resetInput(); + } + + render() { + const html = { __html: this.state.message }; + const { + classes, + dataChat, + chatSelected, + dataContact, + showMobileDetail, + } = this.props; + const { message } = this.state; + const getChat = dataArray => dataArray.map(data => { + const renderHTML = { __html: data.get('message') }; + return ( +
  • + + {data.get('from') === 'contact' + ? + : + } +
    +

    +
    +
  • + ); + }); + return ( +
    + + + { this._field = _field; return this._field; }} + placeholder="Type a message" + fieldType="input" + value={message} + onKeyPress={(event) => this.sendMessageByEnter(event, html)} + /> + +
    + this.sendMessage(html)} aria-label="send" className={classes.sendBtn}> + + +
    +
    +
    +
    + ); + } +} + +ChatRoom.propTypes = { + classes: PropTypes.object.isRequired, + dataChat: PropTypes.object.isRequired, + showMobileDetail: PropTypes.bool.isRequired, + chatSelected: PropTypes.number.isRequired, + dataContact: PropTypes.object.isRequired, + sendMessage: PropTypes.func.isRequired, +}; + +export default withStyles(styles)(ChatRoom); diff --git a/front/odiparpack/app/components/Chat/MessageField.js b/front/odiparpack/app/components/Chat/MessageField.js new file mode 100644 index 0000000..947bed4 --- /dev/null +++ b/front/odiparpack/app/components/Chat/MessageField.js @@ -0,0 +1,69 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; +import 'ba-styles/vendors/emoji-picker-react/emoji-picker-react.css'; + +class MessageField extends Component { + constructor(props) { + super(props); + + this.state = { + value: props.value || '', + }; + + this.onChange = this.onChange.bind(this); + } + + onChange(e) { + const { val } = this.state; + const { onChange } = this.props; + const value = e ? e.target.value : val; + + this.setState({ value }, () => { + if (typeof onChange === 'function') { + onChange(e, value); + } + }); + } + + onPickerkeypress(e) { + if (e.keyCode === 27 || e.which === 27 || e.key === 'Escape' || e.code === 'Escape') { + this.closePicker(); + } + } + + render() { + const { + onChange, + fieldType, + ...rest + } = this.props; + + const className = `emoji-text-field emoji-${fieldType}`; + const { value } = this.state; + const isInput = fieldType === 'input'; + const ref = (_field) => { + this._field = _field; + return this._field; + }; + + return ( +
    + { (isInput) && () } + { (!isInput) && (