From 394a7b6bafb5d8fdc619894511ec8237e6d1759a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=8Carodej?= Date: Wed, 16 Feb 2022 16:57:57 +0100 Subject: [PATCH] upload request prototype UI --- public/mix-manifest.json | 4 +- resources/css/tailwind.css | 8 + resources/js/App.vue | 233 ++- .../js/components/Admin/AppInputButton.vue | 5 +- .../js/components/Admin/AppInputSwitch.vue | 2 +- .../js/components/Admin/AppInputText.vue | 6 +- .../js/components/Admin/CardNavigation.vue | 3 +- .../js/components/Admin/ProgressLine.vue | 3 +- .../Admin/WidgetLatestRegistrations.vue | 38 +- .../Admin/WidgetLatestTransactions.vue | 21 +- resources/js/components/Auth/AuthButton.vue | 4 +- .../Auth/SocialiteAuthenticationButtons.vue | 5 +- .../FilePreview/FilePreviewMedia.vue | 102 +- .../FilePreview/FilePreviewToolbar.vue | 2 +- .../js/components/FilePreview/Media/Audio.vue | 7 +- .../components/FilePreview/Media/PdfFile.vue | 4 +- .../js/components/FilePreview/Media/Video.vue | 18 +- resources/js/components/FilesView/Alert.vue | 4 +- .../FilesView/DesktopSharepageToolbar.vue | 19 +- .../components/FilesView/DesktopToolbar.vue | 13 +- .../FilesView/DesktopUploadRequestToolbar.vue | 147 ++ resources/js/components/FilesView/DragUI.vue | 14 +- .../FilesView/FileActionsMobile.vue | 6 +- .../js/components/FilesView/FileBrowser.vue | 12 +- .../components/FilesView/FileFilterMobile.vue | 40 +- .../FilesView/FileIconThumbnail.vue | 13 +- .../FilesView/FileSortingOptions.vue | 28 +- .../FilesView/Icons/AlphabetIcon.vue | 5 +- .../FilesView/Icons/VueFolderIcon.vue | 9 +- .../FilesView/Icons/VueFolderTeamIcon.vue | 11 +- .../js/components/FilesView/InfoSidebar.vue | 48 +- .../js/components/FilesView/ItemGrid.vue | 8 +- .../js/components/FilesView/ItemHandler.vue | 7 +- .../js/components/FilesView/ItemList.vue | 46 +- .../js/components/FilesView/MemberAvatar.vue | 4 +- .../FilesView/MobileMultiSelectToolbar.vue | 7 +- .../js/components/FilesView/NavigationBar.vue | 97 +- resources/js/components/FilesView/Option.vue | 270 +++- .../js/components/FilesView/OptionGroup.vue | 20 +- .../js/components/FilesView/OptionUpload.vue | 31 +- .../js/components/FilesView/SearchBar.vue | 9 +- .../js/components/FilesView/ToolbarButton.vue | 28 +- .../components/FilesView/UploadProgress.vue | 8 +- .../Index/Components/PricingTables.vue | 4 +- .../js/components/Index/IndexGetStarted.vue | 13 +- .../components/Index/IndexHeroScreenshot.vue | 13 +- .../js/components/Index/IndexMainFeatures.vue | 7 +- .../js/components/Index/IndexNavigation.vue | 6 +- .../js/components/Index/IndexPageFooter.vue | 6 +- .../components/Index/IndexPricingTables.vue | 5 +- resources/js/components/Mobile/MenuMobile.vue | 30 +- .../js/components/Others/ConfirmPassword.vue | 8 +- .../js/components/Others/CookieDisclaimer.vue | 3 +- .../components/Others/CreateFolderPopup.vue | 14 +- .../js/components/Others/CreateLanguage.vue | 23 +- .../Others/CreatePersonalTokenPopup.vue | 16 +- resources/js/components/Others/Emoji.vue | 6 +- .../js/components/Others/EmojiPicker.vue | 35 +- .../components/Others/FilePreviewDetail.vue | 32 +- .../components/Others/Forms/AvatarInput.vue | 15 +- .../components/Others/Forms/CopyShareLink.vue | 11 +- .../js/components/Others/Forms/FormLabel.vue | 8 +- .../js/components/Others/Forms/ImageInput.vue | 133 +- .../js/components/Others/Forms/InfoBox.vue | 4 +- .../Others/Forms/MultiEmailInput.vue | 13 +- .../components/Others/Forms/SearchInput.vue | 9 +- .../Others/Forms/SelectBoxInput.vue | 8 +- .../components/Others/Forms/SelectInput.vue | 14 +- .../js/components/Others/MobileNavigation.vue | 114 +- .../js/components/Others/MoveItemPopup.vue | 23 +- .../components/Others/PlanPricingTables.vue | 11 +- .../components/Others/Popup/ConfirmPopup.vue | 8 +- .../components/Others/Popup/PopupContent.vue | 5 +- .../components/Others/Popup/PopupHeader.vue | 12 +- .../components/Others/Popup/PopupWrapper.vue | 73 +- .../js/components/Others/RenameItemPopup.vue | 23 +- .../Others/SelectSingleChargeMethodPopup.vue | 18 +- .../js/components/Others/ShareCreatePopup.vue | 78 +- .../js/components/Others/ShareEditPopup.vue | 84 +- resources/js/components/Others/TabWrapper.vue | 8 +- .../Others/Tables/DatatableWrapper.vue | 45 +- .../js/components/Others/ThumbnailItem.vue | 36 +- resources/js/components/Others/TreeMenu.vue | 37 +- .../components/Others/TreeMenuNavigator.vue | 14 +- resources/js/components/Others/Vignette.vue | 6 +- .../js/components/Sidebar/ContentGroup.vue | 7 +- .../js/components/Sidebar/ContentSidebar.vue | 5 +- .../components/Sidebar/SidebarNavigation.vue | 29 +- .../components/Spotlight/FilterSuggestion.vue | 6 +- .../js/components/Spotlight/Spotlight.vue | 301 ++-- .../Subscription/FixedTransactionRow.vue | 11 +- .../Subscription/MeteredTransactionRow.vue | 11 +- .../components/Subscription/PaymentCard.vue | 8 +- .../js/components/Subscription/PlanDetail.vue | 4 +- .../SelectPlanSubscriptionPopup.vue | 74 +- .../components/Subscription/UserBalance.vue | 24 +- .../Subscription/UserBillingAlerts.vue | 65 +- .../Subscription/UserEditSubscription.vue | 23 +- .../Subscription/UserEmptySubscription.vue | 8 +- .../Subscription/UserFailedPayments.vue | 15 +- .../Subscription/UserStoredPaymentMethods.vue | 14 +- .../UserTransactionsForFixedBilling.vue | 11 +- .../UserTransactionsForMeteredBilling.vue | 5 +- .../UserUpdatePaymentMethodsExternally.vue | 19 +- .../components/Teams/Components/TeamList.vue | 17 +- .../Teams/Components/TeamMembersButton.vue | 8 +- .../Teams/Components/TeamMembersPreview.vue | 16 +- .../Teams/CreateTeamFolderPopup.vue | 38 +- .../components/Teams/EditTeamFolderPopup.vue | 13 +- resources/js/components/UI/Bar.vue | 12 +- resources/js/components/UI/BarChart.vue | 4 +- resources/js/helpers/functionHelpers.js | 9 +- resources/js/helpers/itemHelpers.js | 13 +- resources/js/router.js | 14 +- resources/js/routes/routesAdmin.js | 115 +- resources/js/routes/routesAuth.js | 3 +- resources/js/routes/routesFile.js | 9 +- resources/js/routes/routesMaintenance.js | 12 +- resources/js/routes/routesUploadRequest.js | 23 + resources/js/store/index.js | 2 + resources/js/store/modules/app.js | 329 ++--- resources/js/store/modules/fileBrowser.js | 2 +- resources/js/store/modules/fileFunctions.js | 3 +- resources/js/store/modules/sharing.js | 5 +- resources/js/store/modules/teams.js | 10 +- resources/js/store/modules/uploadRequest.js | 28 + resources/js/store/modules/userAuth.js | 14 +- resources/js/views/Admin.vue | 110 +- .../AppSettings/AppSettingsTabs/Adsense.vue | 93 +- .../AppSettingsTabs/Appearance.vue | 31 +- .../AppSettings/AppSettingsTabs/Email.vue | 387 +++-- .../AppSettings/AppSettingsTabs/Index.vue | 198 ++- .../AppSettings/AppSettingsTabs/Others.vue | 37 +- .../AppSettings/AppSettingsTabs/Server.vue | 301 ++-- .../AppSettings/AppSettingsTabs/SignInUp.vue | 57 +- resources/js/views/Admin/Dashboard.vue | 71 +- resources/js/views/Admin/Invoices.vue | 26 +- .../js/views/Admin/Languages/Language.vue | 66 +- resources/js/views/Admin/Pages.vue | 16 +- resources/js/views/Admin/Pages/PageEdit.vue | 5 +- .../PaymentSettingsTab/Billings.vue | 12 +- .../PaymentSettingsTab/Payments.vue | 191 ++- resources/js/views/Admin/Plans.vue | 33 +- .../Admin/Plans/Create/CreateFixedPlan.vue | 51 +- .../Admin/Plans/Create/CreateMeteredPlan.vue | 94 +- .../js/views/Admin/Plans/Tabs/PlanDelete.vue | 16 +- .../Admin/Plans/Tabs/PlanFixedSettings.vue | 52 +- .../Admin/Plans/Tabs/PlanMeteredSettings.vue | 37 +- .../Admin/Plans/Tabs/PlanSubscribers.vue | 38 +- resources/js/views/Admin/Subscriptions.vue | 23 +- resources/js/views/Admin/Users.vue | 56 +- resources/js/views/Admin/Users/UserCreate.vue | 41 +- .../views/Admin/Users/UserTabs/UserDelete.vue | 8 +- .../views/Admin/Users/UserTabs/UserDetail.vue | 22 +- .../UserTabs/UserMeteredSubscription.vue | 22 +- .../Admin/Users/UserTabs/UserPassword.vue | 14 +- .../Admin/Users/UserTabs/UserStorage.vue | 34 +- .../Admin/Users/UserTabs/UserSubscription.vue | 27 +- resources/js/views/Auth/CreateNewPassword.vue | 47 +- resources/js/views/Auth/ForgottenPassword.vue | 19 +- resources/js/views/Auth/Headline.vue | 7 +- resources/js/views/Auth/SignIn.vue | 121 +- resources/js/views/Auth/SignUp.vue | 60 +- .../views/Auth/SuccessfullyEmailVerified.vue | 5 +- .../js/views/Auth/SuccessfullySendEmail.vue | 5 +- .../Components/NavigationSharePanel.vue | 111 +- .../Components/PanelNavigationFiles.vue | 13 +- resources/js/views/FileView/Files.vue | 100 +- resources/js/views/FileView/MySharedItems.vue | 51 +- resources/js/views/FileView/Public.vue | 69 +- resources/js/views/FileView/RecentUploads.vue | 33 +- resources/js/views/FileView/SharedWithMe.vue | 42 +- resources/js/views/FileView/TeamFolders.vue | 87 +- resources/js/views/FileView/Trash.vue | 41 +- .../js/views/FileView/UploadRequestFiles.vue | 198 +++ resources/js/views/Frontpage/ContactUs.vue | 23 +- resources/js/views/Frontpage/Homepage.vue | 4 +- resources/js/views/Platform.vue | 2 +- resources/js/views/Profile.vue | 10 +- resources/js/views/SetupWizard.vue | 15 +- .../js/views/SetupWizard/AdminAccount.vue | 152 +- resources/js/views/SetupWizard/AppSetup.vue | 350 +++-- resources/js/views/SetupWizard/Database.vue | 195 ++- .../js/views/SetupWizard/EnvironmentSetup.vue | 1264 ++++++++++------- .../js/views/SetupWizard/PurchaseCode.vue | 85 +- .../js/views/SetupWizard/StatusCheck.vue | 219 +-- resources/js/views/Shared.vue | 11 +- resources/js/views/SharedAuthentication.vue | 4 +- resources/js/views/SharedSingleFile.vue | 119 +- resources/js/views/Teams/Invitation.vue | 11 +- resources/js/views/TemporaryUnavailable.vue | 5 +- resources/js/views/UploadRequest.vue | 90 ++ resources/js/views/User/Password.vue | 35 +- resources/js/views/User/Settings.vue | 118 +- resources/js/views/User/Storage.vue | 7 +- routes/api.php | 4 + .../GetUploadRequestController.php | 25 + 197 files changed, 6927 insertions(+), 2738 deletions(-) create mode 100644 resources/js/components/FilesView/DesktopUploadRequestToolbar.vue create mode 100644 resources/js/routes/routesUploadRequest.js create mode 100644 resources/js/store/modules/uploadRequest.js create mode 100644 resources/js/views/FileView/UploadRequestFiles.vue create mode 100644 resources/js/views/UploadRequest.vue create mode 100644 src/Domain/UploadRequest/Controllers/GetUploadRequestController.php diff --git a/public/mix-manifest.json b/public/mix-manifest.json index b31f686a..f212c89f 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -68,5 +68,7 @@ "/js/chunks/shared-with-me.js": "/js/chunks/shared-with-me.js", "/js/chunks/invitation.js": "/js/chunks/invitation.js", "/css/tailwind.css": "/css/tailwind.css", - "/css/app.css": "/css/app.css" + "/css/app.css": "/css/app.css", + "/js/chunks/request-upload.js": "/js/chunks/request-upload.js", + "/js/chunks/request.js": "/js/chunks/request.js" } diff --git a/resources/css/tailwind.css b/resources/css/tailwind.css index e4e3f7b1..bceb341a 100644 --- a/resources/css/tailwind.css +++ b/resources/css/tailwind.css @@ -20,4 +20,12 @@ .is-inactive { @apply pointer-events-none opacity-40 +} + +.grid-view { + @apply grid grid-cols-3 content-start sm:grid-cols-4 lg:gap-2 xl:grid-cols-6 xl:gap-4; +} + +.grid-view-sidebar { + @apply grid grid-cols-3 content-start md:grid-cols-2 lg:grid-cols-3 lg:gap-2 xl:grid-cols-4 xl:gap-4 2xl:grid-cols-5; } \ No newline at end of file diff --git a/resources/js/App.vue b/resources/js/App.vue index 2463adf8..b3282af8 100644 --- a/resources/js/App.vue +++ b/resources/js/App.vue @@ -5,16 +5,16 @@ - + - + - + - + @@ -26,94 +26,93 @@ import Spinner from './components/FilesView/Spinner' import Vignette from './components/Others/Vignette' import Alert from './components/FilesView/Alert' import RestrictionWarningBar from './components/Subscription/RestrictionWarningBar' -import {mapGetters} from 'vuex' -import {events} from './bus' +import { mapGetters } from 'vuex' +import { events } from './bus' export default { - name: 'App', - components: { - RestrictionWarningBar, - CookieDisclaimer, - ToasterWrapper, - Vignette, - Spinner, - Alert, - }, - data() { - return { - isLoaded: false, - } - }, - computed: { - ...mapGetters(['config', 'user']), - }, - watch: { - 'config.defaultThemeMode': function () { - this.handleDarkMode() - }, - }, - methods: { - spotlightListener(e) { - if (e.key === 'k' && e.metaKey) { - events.$emit('spotlight:show') - } - }, - handleDarkMode() { - const app = document.getElementsByTagName('html')[0] - const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)') + name: 'App', + components: { + RestrictionWarningBar, + CookieDisclaimer, + ToasterWrapper, + Vignette, + Spinner, + Alert, + }, + data() { + return { + isLoaded: false, + } + }, + computed: { + ...mapGetters(['config', 'user']), + }, + watch: { + 'config.defaultThemeMode': function () { + this.handleDarkMode() + }, + }, + methods: { + spotlightListener(e) { + if (e.key === 'k' && e.metaKey) { + events.$emit('spotlight:show') + } + }, + handleDarkMode() { + const app = document.getElementsByTagName('html')[0] + const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)') - if (this.config.defaultThemeMode === 'dark') { - app.classList.add('dark') - this.$store.commit('UPDATE_DARK_MODE_STATUS', true) - } else if (this.config.defaultThemeMode === 'light') { - app.classList.remove('dark') - this.$store.commit('UPDATE_DARK_MODE_STATUS', false) - } else if (this.config.defaultThemeMode === 'system' && prefersDarkScheme.matches) { - app.classList.add('dark') - this.$store.commit('UPDATE_DARK_MODE_STATUS', true) - } else if (this.config.defaultThemeMode === 'system' && !prefersDarkScheme.matches) { - app.classList.remove('dark') - this.$store.commit('UPDATE_DARK_MODE_STATUS', false) - } - }, - }, - beforeMount() { - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { - this.handleDarkMode() - }) + if (this.config.defaultThemeMode === 'dark') { + app.classList.add('dark') + this.$store.commit('UPDATE_DARK_MODE_STATUS', true) + } else if (this.config.defaultThemeMode === 'light') { + app.classList.remove('dark') + this.$store.commit('UPDATE_DARK_MODE_STATUS', false) + } else if (this.config.defaultThemeMode === 'system' && prefersDarkScheme.matches) { + app.classList.add('dark') + this.$store.commit('UPDATE_DARK_MODE_STATUS', true) + } else if (this.config.defaultThemeMode === 'system' && !prefersDarkScheme.matches) { + app.classList.remove('dark') + this.$store.commit('UPDATE_DARK_MODE_STATUS', false) + } + }, + }, + beforeMount() { + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + this.handleDarkMode() + }) - // Commit config - this.$store.commit('INIT', { - config: this.$root.$data.config, - }) + // Commit config + this.$store.commit('INIT', { + config: this.$root.$data.config, + }) - // Get installation state - let installation = this.$root.$data.config.installation + // Get installation state + let installation = this.$root.$data.config.installation - // Redirect to setup wizard - if (installation === 'installation-needed') { - this.isLoaded = true + // Redirect to setup wizard + if (installation === 'installation-needed') { + this.isLoaded = true - if (window.location.pathname.split('/')[1] !== 'setup-wizard') { - this.$router.push({name: 'StatusCheck'}) - } - } else { - this.$store.dispatch('getLanguageTranslations', this.$root.$data.config.locale) - .then(() => { - this.isLoaded = true - }) - } - }, - created() { - if (this.$isWindows()) { - document.body.classList.add('windows') - } + if (window.location.pathname.split('/')[1] !== 'setup-wizard') { + this.$router.push({ name: 'StatusCheck' }) + } + } else { + this.$store.dispatch('getLanguageTranslations', this.$root.$data.config.locale).then(() => { + this.isLoaded = true + }) + } + }, + created() { + if (this.$isWindows()) { + document.body.classList.add('windows') + } - window.addEventListener('keydown', this.spotlightListener) - }, - destroyed() { - window.removeEventListener('keydown', this.spotlightListener) - }, + window.addEventListener('keydown', this.spotlightListener) + }, + destroyed() { + window.removeEventListener('keydown', this.spotlightListener) + }, } @@ -123,54 +122,54 @@ export default { @import '../sass/vuefilemanager/mixins'; input:-webkit-autofill { - transition-delay: 999999999999s; + transition-delay: 999999999999s; } [v-cloak], [v-cloak] > * { - display: none; + display: none; } * { - outline: 0; - margin: 0; - padding: 0; - font-family: 'Nunito', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - box-sizing: border-box; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - font-size: 16px; - text-decoration: none; - color: $text; + outline: 0; + margin: 0; + padding: 0; + font-family: 'Nunito', sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + box-sizing: border-box; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + font-size: 16px; + text-decoration: none; + color: $text; } .vue-feather { - path, - circle, - line, - rect, - polyline, - ellipse, - polygon { - color: inherit; - } + path, + circle, + line, + rect, + polyline, + ellipse, + polygon { + color: inherit; + } } // Dark mode .dark { - * { - color: $dark_mode_text_primary; - } + * { + color: $dark_mode_text_primary; + } - body, - html { - background: $dark_mode_background; - color: $dark_mode_text_primary; + body, + html { + background: $dark_mode_background; + color: $dark_mode_text_primary; - img { - opacity: 0.95; - } - } + img { + opacity: 0.95; + } + } } diff --git a/resources/js/components/Admin/AppInputButton.vue b/resources/js/components/Admin/AppInputButton.vue index 7e41f083..674f108f 100644 --- a/resources/js/components/Admin/AppInputButton.vue +++ b/resources/js/components/Admin/AppInputButton.vue @@ -1,5 +1,8 @@