From ea62aba183e52bd0aa515ec3bd56b328ae2402e0 Mon Sep 17 00:00:00 2001 From: muathye Date: Thu, 6 Jun 2024 01:37:04 +0300 Subject: [PATCH] :zap: init commit --- LICENSE.md | 21 ++++++++++ README.md | 78 +++++++++++++++++++++++++++++++++++++ art/Filament Excel.png | Bin 0 -> 107809 bytes art/banner-no-action.svg | 1 + composer.json | 30 ++++++++++++++ config/config.php | 18 +++++++++ lang/en/filament-excel.php | 5 +++ src/Actions/Import.php | 69 ++++++++++++++++++++++++++++++++ src/Concerns/HasHint.php | 23 +++++++++++ src/Concerns/HasImport.php | 23 +++++++++++ src/Concerns/HasType.php | 23 +++++++++++ src/ServiceProvider.php | 31 +++++++++++++++ 12 files changed, 322 insertions(+) create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 art/Filament Excel.png create mode 100644 art/banner-no-action.svg create mode 100644 composer.json create mode 100644 config/config.php create mode 100644 lang/en/filament-excel.php create mode 100644 src/Actions/Import.php create mode 100644 src/Concerns/HasHint.php create mode 100644 src/Concerns/HasImport.php create mode 100644 src/Concerns/HasType.php create mode 100644 src/ServiceProvider.php diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..669220b --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Dries Vints + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7490775 --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ +[![Stand With Palestine](https://raw.githubusercontent.com/TheBSD/StandWithPalestine/main/banner-no-action.svg)](https://TheBSD.github.io/StandWithPalestine/) + +![Filament Excel.png](https://banners.beyondco.de/Filament%20Excel.png?theme=light&packageManager=composer+require&packageName=yemenopensource%2Ffilament-excel&pattern=architect&style=style_1&description=The+easiest+way+to+work+with+%22Excel%22&md=1&showWatermark=1&fontSize=100px&images=table) + +# Filament Excel + +The easiest way to work with "Excel", you only need to get fimiliar with [Laravel Excel](https://github.com/SpartnerNL/Laravel-Excel) to supercharged Excel exports and imports on your filament projects. + + +## Installation + +You can install the package via Composer: + +```bash +composer require yemenopensource/filament-excel +``` + +## Usage +Create [Create a new Import](https://docs.laravel-excel.com/3.1/imports/) for your model for example 'Content' model. + +```php +php artisan make:import ContentsImport --model=Content +``` + +Use the `Import` action on your filament resouce list page for example 'ListContents' page is a page to list the records of 'ContentResource': + +```php +// app\Filament\Resources\ContentResource\Pages\ListContents.php + +use YOS\FilamentExcel\Actions\Import; + +protected function getHeaderActions(): array +{ + return [ + // ... other actions like 'CreateAction' + Import::make() + ->import(ContentsImport::class) + ->type(\Maatwebsite\Excel\Excel::XLSX) + ->label('Import from excel') + ->hint('Upload xlsx type') + ->icon(HeroIcons::C_ARROW_UP) + ->color('success'), + ]; +} +``` + +## Configuration + +The package provides a configuration file that allows you to customize its behavior. + +You can publish the configuration file by using the following command: + +```bash +php artisan vendor:publish --provider="YOS\FilamentExcel\ServiceProvider" --tag="config" +``` + +After publishing the configuration file, you can find it at config/filamentExcel.php. Open this file and modify it according to your requirements. + +## Translations + +You can publish translations using: + +```bash +php artisan vendor:publish --provider="YOS\FilamentExcel\ServiceProvider" --tag="config" +``` + +When users of the package execute Laravel's `vendor:publish` Artisan command, the package's language files will be published to `language path/vendor/filament-excel`. +## Contributing + +Contributions are welcome! If you find any issues or have suggestions for improvements, please feel free to create an issue or a pull request. + +## License + +The package is part of yemen open source and it is licensed under the MIT license. + +## Credits + +- [Muath Alsowadi](https://github.com/muath-ye) diff --git a/art/Filament Excel.png b/art/Filament Excel.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2a7e2270a7fe37a6cbd394e7eddefc11b9db5b GIT binary patch literal 107809 zcmbSU2|QJ48$VKMT1cCU?yaOvk(4Da6{RRjq^w0KlI&c|HPaLlcT$vWl_cwpLUt|O z>`C@D`@ZkXz29@p@`-E4>HGcWH+_wB-uHc$|MP#A_i#BQFSBCl#-#{?tT=f>S`k5( zz#kWSELjZy;t6404*y~@Q-${uYSKYzU5_Kb9$0x~pZ2E~Kb4KXe2=9Uz1YI!CR}}Z!4~!n z*Ec?S*|~E0`^TRzohffSWE*hq0Y{?ca7d_NXL1R#CSSGP#zQtVbUb`GVyt6O^Bdi^ zIH5N&bv%*cFhM0vyiQ>wjeP9y%jPHJRuJE|6g-!4#qIr%KSZ+;+>29~B$^r;u5_x^ zZuyTN|L2wHb9#E3#MYpg?pxmR_Txi2EoYz2W5KC6jDM-Ws@GJVY-?DWcxklter8HbzxzF%LrZjfB|RUwL7 zBCq9m??^qxa7I}&l@-pYpMG;EmNT~Wequ_C3}4TB8-txJBlwFTkIUTFe%yk=1KJ4w zhmg|SKk?9G?|9qc8^rXRS1}yTl&rrIsZ6loP1Y7UFkdiwE+ZFD6$E1`2l2m{zxb7G z#ru(`N!lXP7*>j*3bG-339u3d$5~^mZh)N85a8N9f0GI-tyg4r^zL8#G1+!F)`VaE z*ZC`3vE8JVDJ?=Rt|`NfGX#`ZIDe2eAn*~8$KIl%q9-HPv-)9Jw9O=l>9A4y%@zy_ zS0wX-;#7GT54@VMReH&idD#$I?2qUj;$58AI(?RU-#217 z)={z{94k*{d2n#B&pQsG!}ASs16MC5Qe#+<+iRKe7y?{)Red=a%b?2gB>(wqELxB3 zwj3$e6zCz&-vhFr5QO$4kE3>n%vWK6&c$s}QB01?C;yv~{6DarC%b_R!(|OH$o(Mk zx;b)5`RhM#`R_l37w80n=)4oHx>Y@Y#}MS@hD%3~+NNBe^E~tBP0wYrzY>Hbu!_&C zBgzx2_^yy6mSYuP5b?SZM)B<_(lKOq+z{rmasJSz>w;6;gk12PCrO>sq1-@e8*(Wl z^u_V{yHc4YIf4xdmz@{6{L{+3jD}0cFt4LWKDHPUHm>#!4CD^;Sb{+kK7@4}kemyi z-!K?nMO#!UQXAjw?-Ljp7*C?p6dyJGg273Q1}|Lyljn$usr7k?V+btKZa7y~tP&l# zV2Ft( zSrK=4_i)*x7ywYe^Zq8RNRj`Qn}E@S{extPSb&6 ziTYmQ#13L5W!0rR&5M!qJpWZ=n?^yiIc+;Cv9b%BcT{<-G1tkqqXFwW@hwqrFvi@* z=hQqXU|>V=2M-=p;V`m485x;G$V#y#9hMHr&8Xd?P|O)Wzn(DfG(xwT1rclx^B5oQ z&PQvFLlOIk^QLE1&E<$)oHT|!CyE0reZFjr(d<4}W6cBxJBzTl*ef2a$IdJbnHBBkg(b;pUqpM4`_;7S-~sOeNKXZaX^fB)2s37ALkt zRao4_h&Vd7tQdXgdj1itaiLSB6kF7e+QcG;F(e3eKmF67>+5x}D8Na_j5vOlgLgY9hJ&5NkIqwY#VdixIZ?3!X`R zS-hAM0rdc;G%3FGJXjM5^f^v0JU;&x3tPDC*7>Ib?E;APEl%MZIeubRm>*n-r9M&L zwj9B|$5Lr{cZk`Mim7H0nSs;_fcT*3j7{urOlhl8@wxJ+T*VR~)cxT>Om)0R`bf_j zES#CzxE>L|jm7#*z$5Z8)pV>af9i>rhK5g}+oVybeph~&|L<9Vd0C&e&|>7#O^kRV z?#GnIGjhY_zl&ji*R$$dmm_?cSgg)^KeMA;G?q%0e-2W+6ceCO1(A0PFgZ`}awPII zrehpncI3r$3|uZ!yAjhdgy9&AF&!fpj)6@Z1ZGD=Ovlj7M=mjAItEz)DaBN3t=CzO z2sMn1Sa($=#tj+u%)jzq@5_{S2L&2A{^ToIfW}u4Dcy`k)E|*cfmo!##_Z_!X8u<1 zCDnZyd3_lJkeRj+mLsvXUsUE_H#YtJlaDmO|1PQU9Gh?1*Yp*-P(z-dSpQc!{@iT- z)Fcc^@1IWt7+#TAP$)@Rp*in5zf&ow$(7YYS#jRI^r=U(SxuA`=RHf}R1B;9#3M{j zvAaX&+c@`Vg$9%J~>}Lb8 z%$H~3vX=867vVYz%PiWI6?#Qw-pg!3mnq!>%ec(9?Au|Bo~A0^OkdMsv@u!Jvt!kK zTW4j%xWx#sh=hc{?QmCwJ!jIq+k!*!PE2V_yDH-aDZo#wBV{e;UC-<=gZ+AT^n>*0 zt>ly;5KE>6Mb>iOLtPz)u*}-dc98zOmytl1DM*3Sc+Ok;I_POS>qDaweh@I>C_CSmqwS#0W+G$;>0BFQelh>iqiRRX=n;`aL!lJ zFpK!emP=zI6Z_nw1WcyEK&Qml`8O3TW2glmNm1D69!pjrmKN!+DOkkVVKR`B8ue3i zkCrCsuk*32)!zFOn#Ela>xVE*Y(>ivaH3GH5=a`UbCs)MBhTAuV5C-&ECVH;KS!M8 zs+TEXd3I{<(ehgQ%_UgQ*xFl)p7Ceq9!ovfetd?Z`DFQwx*Ce6iBZ}j+ve{9a>>+l zEJ)((pLj@6(5k!oG-W;Oyn|6ofnrzhDP~7#tOcnocba$n8@Re_*cy!Glx_M=XAI&u zAnW6hhp^I#dDkYdh74IZ!Ae%?H(y~`Nt-OU0tx+z2}^W#_Z`SlsOvT_24zo8JifDN zFRpxN!X2Y6as`9NBd9@t71v?R^4Waj6eRGngvbNPtDl&#Ogm+m?l|wda)Dy2Nh8zY zYnUHNJEfnVCOUr<5BgHC%IxU6_9K+wge)Z0=N(PKj$2G3{+V=HJ^W$ud}At_^g;WVbSf_=i z1}rf)=cA94-LN*6rv@zloYV;OSUG?5&~3$W;*rWEo5H^;X7f|m#RO^w#s-;8wg(}0 zKgLmwsR2u@;!`3=V4bR&8nDDTtFfm*Ck$g>{?7qRtYd{;QCKIqqC0VFm}l-PI-)*L z&CQybn`0^hy}ka1x)o#VDo|IAu#OWEAFecm7YGmKY~0P7hzO!`2giJ2ha5b!_(m;XK9$>fWgVORQtNO5`Gp6Asx^ z1D4P~6+j!WHp|4Ps`B&0m@;XyG7FMV7_R&ip61_sz53^)Q@wR8vj{TT7PjFM7$ItE zz!D=wnfl>eFdE?0BUqOy!g*s|27LtUGM+f$ICFlLzMi|^p;l>FllOjh_`VoKHJ%vD zQJ{azp(K%-r0~9@5jDP}zE*ij^=A6jqmkZ{!_AN4$xr=kNE4sPxk+?;LHtCcHyix$ z0|}cZLCNu?`hW>R!Bje1q`ebolpuli_gR&JY-QpL2smeo7Xt`e!o%G^Nq)hF^W7_N#fuP4#-a%#ra1o`b6OjEmpNd`?6 zQbA6CzHxKP2gRu+ZJYuo^B;{{@Y`K!sz}jovU0E$8;*IZ#5UkObM~08kb5du_4V_M zU^H2gecpDW%J@lq8!2fdM$2!sjbGv&`{AZZ6O$3TVJb03i~d1IFQwB**j9n}^S~v& z*%ywcR+zfB7Kwi~o7;Fr42(SM_Oa>C*X%whG4TEt7gIQm_O9zY{dNG|+Z%6_uh(_$ zSlDo_#cbU1kCCxNZcfF!+2aGzo;b-dDIXg@W_aTm&6+lv%SF=~8Ri@ly>P!-dG?S& z_SD!b;~*haT_5LQW=64aQ`sIq#>5=q9Y+|q3)9Sj(t{>@a_BY>9#!2-2965fYp@S;5Hbt`!*0+c7b&h!L zFg^tPIiGD$?ejXpmiPW2x34SFSj~Sl7kl4V&c=D37 zy*D;4*Y3lP8%-~(TW+P=?F(4=`tx{wofVB9r&X5MPO96Hn>1)tVbgirMl)u1rtvS+ zw9!$x0NTY8k{ea@DTTSTZCpnUKTdz0Z$}-{v|Z${!e9_op)G1PW9|k57`e9>Dk!Xa z3tz_!Q&*uX3W(BTM)JdE_jkSiW%xGxIMMDqN4~G`^`<+xX6=PHyKi@D>g#fnNP8?s zNT&PyAJO_ODNzd;zLz>!3OHO)Pym-Mv)Pmx;26BUFF0qSGc`5dhv*A>Z!%1|PLV-4 z?a}v33ie0PZvt}aj+b0ytgL!sM-FmH53ZPhVpDRS4PD2H6Q2Bjqk$wlLE(XI_>rJw zJk#|TR1YV50DY05*2uAn)I3>n3WG~LxFVh4Ifw$-L1&FXe@H;Aw-3>SfM-%qoOlZSRBc3Eo1G6Qsw8GV-)&YUtcZJZ!f96@HLZ4S5(7ydN8TjrkiX#K17Mx|BrYz z#Y`gqo(1^34-XYeFX5rm_&IzmgSejQ`X^7~9{UlxvBSt_R=U18g#o7iIdaT+CXut< zL}0WJLgjE&2Zs~a7v9v(udJ_L#!Ba4 z?BO@beq3{m(qDf|Rjbikc=NPEr%Ctie$ovmx@!-kjm$lG?BzCmL1*DjV#1{1-Ub%} zA1ht5N3J539ekzUMtOFh(X>EEf39?qvpZ^FNo|!@iVC-*%+Sq|)Q$gWY`T{IWjgtK z5Y>a*QOmAd(+#Qq_VGJCl%Z9^bp%T&FEAX+0;oTZs0OxW3gt0V;vL7C1^94(rJ@u51=Gv?Q!zVM!l{f;rx20 z%F@A_y`Uk{(F}@rARDc3h|<_Y_h$4~^Nw^R%}S2Jy}j!()DPT_ag%<=rBwZOlg!e!QlEQFwVRJO{K! z3}5)(j#%m~tnHD^XS6svLCx5U)VeP(?9pSTTisz0c&KAT28{Ep=o93F$C2S~W4fx! z_a0I(BjJS`Q|4OLb>Q84Cg7)WR&L8uN2tZ;yDvqmqN$r67=tp{@aTzU!)tQlq<{Yz*zDkzb$mHvvmo%QeiPkN`$omF68t1sR zpj&`*+PC1H$OJuo_y%2-l^&PJ=n$K1#Tchm7n7(GWQ2>>y@}Df79E{)t=o$m7g+#k z5y!|~z2ZvdFhONvN8ysR?{v+628ef|S`+TQ>B-B>H+6L6Fq-z&^~4$8Lp1GPmz6*a zU&(Oom|9?Z~3S#iTxwM<1Rn$*nHoPU`axAOzFvZ0CTlJ&auH{Fzp<>l41V- zlSubuS+*OpPGTaU+djY2I$JGS^5}UIsprtFoH_m1{K%X?x!HDKQFAPF`Clf zM&!a%Bp19Rk>UYSQrb^D(K%Ml@vipTIS7?E&d?p{stFjqLs9MOq1!t2+=nRq441=b z#(nM)bFWh!t?%IzLbF186oEyQvD!`!ULY>);h=rm z4@7ZzRIp}}S%EMS;4*layndFHIz{2DFbuD*$%UeJ&LI&!X$VFoSTo2hxWg)7^wA6A zQ<-}+$tu;7tAp{q7@m^)81^)|?vcuv?gpZNuMWLtXGwk9?3B6XU&hum2Sp_On^Pyn z9*u5uG9g<7D0cL=`H5xQZ%W&)(ceRQSyulC zqpjGmOnvHO4$MC}WZgLxMqmH>k-jVw$8w56-vgakXZT?Uxmap%Z;ll`(K~;90)&z& zWIZCey36G0Y*sT+8h&f8GV&E$Ute%eHgm~eE`0>UjV7=@oT(NNkdF?skKt9FR$LK< zd4!wPF|m57kR9xx+r*L44!D>dOBhZvzpz!mhe*(u6{kEf>$WS&v6`spSJ+wVVNPad z@U0oD-g+bnzEUuo@bJ{sk61T}r5aDNr+G;X(cSt8tg{RZJ;`OH=MPuqOkPS-G{Y&p zQCyrcMQp)^mLB@i6zZ?Dllg-BF_<+sg{yCHzn{_7H!r`IsNyA;zJH{9Z)!C;%s?FP zB$yqA(djA{HXOs7KONHKia32*t5pu<+I&{Iq*2N`!bIxp)dberDV{6b zcpnR!Udm{@ojL`OD^lTVw{4GWC7%8iv#Ix`Q}<{pQrd z6w49PM=oZ7fyjsg8_143S29$N|Nd$U(^m+oHi1wFK>38NYHje1kq z!Usk^12l-kiQY}BF)c}QUnGN6;~CUgi0W{oMUde|iHp%xxA9@C_8$6&-?))(2C7&` z@Q0!LIi3!umX#%Ss={$P<*`)&G8{`$e7odj8% zeo~G*`x}4Pk+1UUTJ5bnxZNkuOZPh+Q~S{W!|wliIl&CstRU|><8V{|`9*o)H(@#@ zVT<;cr_Q_%%1^d9mMO?^*;^MlA>xuE9Sn9@Kwv@o8kBySlF&bEObJcSU}}3*Kb4w^ z?h@lcI)%btwK5IFXR#!0j?GoU=9q$ILE1mQ3tqpp>uj43oj#dOs-EcnmVIZg9o_e1 zMt%`d{xItWpuscbCN?=ze`=(0iB>n)g7t)#BUHstb1L#mGjjMSV^M8uE13A+=2QE- z58bb=ojY>Og0g-=&qVF(KW*iQ#brvkkQ1LnR?V^~Z8onY+XJNaCY5n2H4FJ;)s1OZ z2G_$!=G>5ZE|cQ|#%J>|BP*u#(dEP%t@=~X@o$)GGt?cT$QgvOh)vrHZ2D8zP$uYK z<=IsxcGKZ-hn$dDx?%#g$dkigZPIJW^qw4+yn6?yUE*|RNAe0;L) z*N-`)(D8pkplBi|B_;LN?)B^8%872J_fl{Ou75yg+D~2pWj_QMkycalImfe-!H=xi z)OnUPaX-1ei4?q)3pD;WR84!!r6{Ta?1-`XIg_i0QoB4kTvN}7fbE5TK`oDUCh(ze z6G8si&CqBNiGKGeBO*PC>{y}NM^6Al@|!GUrZ`4f5n#gsjDpFhI8=%HGV=pYvwv#jL8*LD}5 z=MorhDm2-N898>Q^Bm8C*%Ia{w&|x&iKjW2o{>>U@gys%>kI5L;kiYh-cIc|M5 z6tZgLEHRQ-^)=BYJx!O?dUC90o5S*z%-C3vyDy@mq6~s%ooAYkD?v8RhaRA`1zn$! z=@*rw>xWP%r$Zya zM0m~^o#Qc|Z6b?yH|EmsR}4i0R;JCVm2aSxRj*=0Rvr3552%-r7d#wmqQ?{xYXFs| z9Pme7O?i@+K^q9tMX6BfB+u*+bK+8~$5#lll21nrJk?!G-+x$cLIX{j`W zf=325rdKSgCb|z?U3p`UxF58UD1w|hTC`tTao21eo1XdLLl-cuxZu#LT%cKVW+KM< z(wu_+f(kn9PKbx>GBi|&^%UsmSk<~B+!xBoOt);fE20X#EtziwPG zTd8QEFzy1aZ}?VH0-tG-q4@0%VSrJF-UE2u#8LcZGHK`F%Cr~t2@@W()PcG=5k;1) z7s7C$t+NkAo){u+^(Tgpv|ouw_k`coxH4@u`S^qb@sU;85(@WY&$wxMK14wBm{VVx>6UTxYgEllSQ zeJ5kJc*Wg!LnLmYnrM-6Qg=6dwwJ|RCys>^BL{?phC*SR`ZL!Lji#m@VYjd^tm$5- z7Ljt%uNK{JN5O;lx40uG1DyHYPmpRXEZCVBUzv<%Y)$9Dnvk)<_L49F0Kb_(6Ox6C ziDCB%vJ({jUO}To?6z&t{v5p3L6m!PizB;QB+cRThnZ)diZaO|;5I9huZ6x4o+W+d zG9Br=#=8Q(0#YiMadV`vUr?$YhQrTx^(paw{m6tk=Y^~im>IsjLOV=8e{b#B(da{G zS1#vPxduVq`~sP6HZz&>!q)EyazaN(C!Xzy;p|P7=(L|@XThnKO5D8()VpZ#vy7?~ z;$$bN9cE-od^J-tQ)>{V$mPz?5TZ@-PTGS?Cx0jGoMrCHLnHZu+>2Mp#~QI4(`1yc zk?qzTTG$g}u~q)i!DgolM(JIU@W3lKXU*P=i<4buFD$1#xL#bOZo+lzSW$Ca)sWbl z!6y2X&`_Bal;ziKN$ngflJOmXP&C;;+o4gB%66UQWWS$zWjFEevp5FA3Q52vc5dhm zw%vOCMn%64=f6~{5wOhYBA6up(e7yrNU|!`sD11Wqm)Y+F$Wk&Tm*>&XW}aJ~e1G=l01Hbm zeRR%^yH{#C?(8P16$|tuG({$5F`Ikol|ttNo%2?wTAN5a7{A+qOj?c%w3kqxgMb++ zl7Vjj`YXi{f7 z(_lr+%K{CZmj=wO_5n_TV#_IA+9ifBKod|HynU z46tpw=4b4JNXEf>TgQgG$^P1}gfJcQGr@Et(ozw}4~SQeX}4R3KVL&O|3*kZ3VX^m`tK5=gOmT-0->g zCBd>+v7IkW#()`NToIfb6LzVPzk!eV?tV5M{pSApzXPm0E`$|fT;!eG0D`y(iklE; z=a!n()N?$WF-b+XiW}}HB_tdQmOYG3E(tPi5Gdt6zx?N^rtf^0F8TR#>?eFkxVs-& z`CaK3H%vyRIJmPMab#SUo?A?^MS)j;=4i*r&woOBYY2A_{lw9Ir6Qj=$MgF1mk-2+~T}j7P#$a);v%4Sb+?*7Va=GG}KAIyEaHwv1(QZHutj7 z@(IWBa3anZ2@idJ9(n)H^lUzz6Umdx!cYXW6X0^`8y`5u;J4>rtx!PAN3 z!6VK$Lx0b}M5~_=vi2j4dnA7c`PriKI$--y7uo!QQF(i2jbXZct_|+2z;3Bu+s?*9 zq%S(ReDB`9jp7R<-eWr9Mncvhc^p$i$;8|E+`xv7U&vKN$=wkZ9=po#M@ zGCFGe&>l%+)Svh_5#1izIgT9uonaqhE`|Y{SlasQdIXd|i%0w$B+G3fto#XgJXy{x zh}~pf5cd7dT3?wDVqa?;;ml90l^Mr!1G~aThtgIc(jv-7XLeWqh1`|i;t9ZgW^&Bi zb*H$v*c5;F0~SIlCqeiFj>kSZK0M61bap-YU(#{8NWyDoBqk0{)E3-5q4|;gcQq&N;$}3BO{}M z&WaM_-AiTz^55*A0gV0mu(Y&}PGHR$Y>Y6W?d)0Xgts+R=Gaeogl;EptuS`|#n>uU z{sdkYcbvVC{b(28$Q)zE?(9KtWYT|v4o*FV8Cim$XB^FfFl?~@)dBmvG&Vh0D5|Nc zmHh;0hQN4gUWkX6mltLjOJ_r%%(eSsl=iVJ`@OL~E<;(5^t|EuSCpN8Ks5EZIdB&{ zuiF&tOh4A8JuHVvXT4ql2M8v62b}YOoOzZVr=UqRI;xjlayrQ38{QRmfp! zX(_2&7!%B_U=_?x5NJni#O~c$fhE{i5+`q*+a?#nDbcj*H;YuY-eSTw_tr@&EyTc(QGYu zcJAY!hANElPB`M#iM~gv_nMlTl7@8WGS(?3w9_qg!|cR}d_~jx`|b5&me)`DiU>p| zw1rv^6v)&Ylg8D=CkG09D{5#$?h<1yrRIgF>oYiwa|}}%1lRxn6}c`99FZ{+k|(O{ zhpVDKvWk5=r$8v`tgp81P8R8S{ZYHGAyc%w;$PF5vv$e{(VAT76-a#LJrDmt+wLcF zXxRy{iua_A^n7G9t8Pl_&vVt9sN)cotp4}6s#`QlI4Y`{g}#7aaMvi|8#=u?d@_(~ z)9lB=Mi@AgB@sZA!EQPZS^cB4v|YnD)eD`L3N}6ctFdLNaikG+z#OlNJAFi^}I#SUrC|=8dde5JeT22rBn$drzm#YJ< zLt)l%_Vc#gN&WH{<5X<^T29f@ACLYsEe|Buy(*s_omw=X1?UT1N^^YZF5L+8jcDvU zQD)k~(KpngZ}6gzr_x>F+r{EA64PHj z1ZJk~YgvBnn8K)ROhC?@JGXkpiWLQ4zbf|dMl1bT+>Nde?6oAX5K?@3q4Ki;>+vc`V+A^F6gf;j2xFCV`rmb@jBAhdd_N|!-_v8x_YH_3D`(bK?^ii8G1pn8j%(yR7T`Yawy~&D zr&!H6Sp=-54qWjbfaJrGCCb-PL-|8#SCZz*8EXGpkEF@WB#42wD5#2$cf1j>>Z%;6 z$J5uRj->O~0ruSs_9yPH1_%>@|EdEjYm_*()@9C3n}72hM|Kwb?ryC~CB?G^w@vS! zLPa$)l5g?y^?wYud!O2F04^Ns@TpBp-lP1=gVWj%P79svy{hyJiWE|w&x4zj6kAIu zTJdbp3~Z7;qJIQ}7ce+;5FL#@ckbMQ0~$`{%m1DQI3R5lVeEe9#{cn|%}a3rRb^dl z#f|K-!DFuL(!V^Da*d8vT7r7}8J?C_QObq=-lq;6JedB+7AbK_WVYazHrJGIg!;Iu znp(E~&ZV}~3*Ij}&~eu-e_H7-u^%o4$b9EQE}-+i;n0;ibm&kPriU-14>Jz=e<8^a zYyXoA?mVRt&*u0FhLFAXT&&ZV`!RGpQ-`iwI>0s_2Ga^EE4ey5JI`uq;i0NP9xTz4 zEY`59(i|pyD;n+n?u5_yZPBvlfU~Nqs@k9b*wP!KV82@k{Gp{VSfPO23aCm>cjb@) zML^SgH>h_d=k?b|uD|xIGul+&umMO@oX37C+v2_<0yiq(jTFbFtW~=auUkzm^lbLG<#QOXsL9YF z6V~O6_n+FM`u0^e70mvVWrYz(J(WymW)t6+ac{$etg&lQA9rQJ+wIfKeX{nAe!hFz z8-1#;sM*#BnOCaxdTQTCwZ8PpD2>w5p>DFe=Vw(d3X@wZ(e293!{-eR4Z)Qfk~9=* z)cn@%xv(;IysEp7Hr`D}Pv4Z|UD#L;-dfimK)1WM@!;;Eazjcfi9V@wYlYC~QEQ?p ze0n*f!Z@|6u|zND@qO#mH+s2uA1FwO22Ct-*_(R!b-b=1E1vTas-6}; z<>lq2*7a^WZ*qlPjbh8TTbAiQ8Ua4Y1#II+8}-r41ChD59Z@pN@e)bD%S6aFb^j1F z7ufZ@XW3w{2;-D`y>;o{LqkIzk%r{R=|GjxZt~>_i|*E~1p&#!)rl1rCkZHOjnwpm z0Z=17$-v=+1+RU5k@NcU$5r^6auR4

ViRA}FYr^Ev!N)bp!U|AFp-=dOHN3Hgv9 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

vY( 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

?}6i_RMOO-_q)ze7PB$7>wx16q>D^7c}GpEPv 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 Palestine NowIsrael killing tens of thousands of civilians and displacing millions more.It's a genocide. Please help us defend freedom, justice, and right to exist. \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..b65c36c --- /dev/null +++ b/composer.json @@ -0,0 +1,30 @@ +{ + "name": "yemenopensource/filament-excel", + "description": "This package useful for importing excel files into models.", + "type": "library", + "version": "0.1.0", + "require": { + "maatwebsite/excel": "^3.1", + "illuminate/support": "^11" + }, + "license": "MIT", + "autoload": { + "psr-4": { + "YOS\\FilamentExcel\\": "src/" + } + }, + "authors": [ + { + "name": "muathye", + "email": "muath.ye@gmail.com" + } + ], + "minimum-stability": "stable", + "extra": { + "laravel": { + "providers": [ + "YOS\\FilamentExcel\\ServiceProvider" + ] + } + } +} diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..ed7ab20 --- /dev/null +++ b/config/config.php @@ -0,0 +1,18 @@ + '', +]; \ No newline at end of file diff --git a/src/Actions/Import.php b/src/Actions/Import.php new file mode 100644 index 0000000..c56f9d2 --- /dev/null +++ b/src/Actions/Import.php @@ -0,0 +1,69 @@ +label(fn (): string => __('filament-actions::create.single.label', ['label' => $this->getModelLabel()])); + + $this->modalHeading(fn (): string => __('filament-actions::create.single.modal.heading', ['label' => $this->getModelLabel()])); + + $this->modalSubmitActionLabel(__('filament-actions::create.single.modal.actions.create.label')); + + $this->extraModalFooterActions(function (): array { + return $this->canCreateAnother() ? [ + $this->makeModalSubmitAction('createAnother', arguments: ['another' => true]) + ->label(__('filament-actions::create.single.modal.actions.create_another.label')), + ] : []; + }); + + $this->successNotificationTitle(__('filament-actions::create.single.notifications.created.title')); + + $this->groupedIcon(FilamentIcon::resolve('actions::create-action.grouped') ?? 'heroicon-m-plus'); + + $this->form([ + FileUpload::make('file') + ->hint(fn() => $this->getHint()) + ->storeFiles(false) + ]); + + $this->action(function (array $arguments, $form, $data): void { + Excel::import(new ($this->getImport()), $data['file'], null, $this->getType()); + $this->success(); + }); + } + + public function relationship(?Closure $relationship): static + { + $this->getRelationshipUsing = $relationship; + + return $this; + } + public function canCreateAnother(): bool + { + return (bool) $this->evaluate($this->canCreateAnother); + } +} diff --git a/src/Concerns/HasHint.php b/src/Concerns/HasHint.php new file mode 100644 index 0000000..b76242e --- /dev/null +++ b/src/Concerns/HasHint.php @@ -0,0 +1,23 @@ +hintName; + } + + public function hint(string $hintName): static + { + $this->hintName = $hintName; + + return $this; + } +} diff --git a/src/Concerns/HasImport.php b/src/Concerns/HasImport.php new file mode 100644 index 0000000..fde96c5 --- /dev/null +++ b/src/Concerns/HasImport.php @@ -0,0 +1,23 @@ +importName; + } + + public function import(string $importName): static + { + $this->importName = $importName; + + return $this; + } +} diff --git a/src/Concerns/HasType.php b/src/Concerns/HasType.php new file mode 100644 index 0000000..506123b --- /dev/null +++ b/src/Concerns/HasType.php @@ -0,0 +1,23 @@ +typeName; + } + + public function type(string $typeName): static + { + $this->typeName = $typeName; + + return $this; + } +} diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php new file mode 100644 index 0000000..d981ebb --- /dev/null +++ b/src/ServiceProvider.php @@ -0,0 +1,31 @@ +mergeConfigFrom(__DIR__ . '/../config/config.php', 'filamentexcel'); + } + + /** + * Perform post-registration booting of services. + * + * @return void + */ + public function boot() + { + $this->publishes([ + __DIR__ . '/config/config.php' => config_path('filamentexcel.php'), + ], 'config'); + + $this->loadTranslationsFrom(__DIR__ . '/../lang', 'filament-excel'); + + $this->publishes([ + __DIR__.'/../lang' => $this->app->langPath('vendor/filament-excel'), + ]); + } +}