@c10t/nice-component-library 0.0.23 → 0.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -169,6 +169,8 @@ var AlignEnum;
169
169
  class ColumnModel {
170
170
  columnDef = '';
171
171
  header;
172
+ title = (e) => `${e}`;
173
+ cell = (e) => `${e}`;
172
174
  // set default theo ly thuyet, phai gan lai
173
175
  align = AlignEnum.LEFT;
174
176
  alignHeader;
@@ -203,8 +205,10 @@ class ColumnModel {
203
205
  displayKey;
204
206
  mappingConfig = {};
205
207
  searchFn;
206
- title = (e) => `${e}`;
207
- cell = (e) => `${e}`;
208
+ rowSpan = 1;
209
+ colSpan = 1;
210
+ pattern;
211
+ patternFilter;
208
212
  }
209
213
 
210
214
  class BaseModel {
@@ -1494,6 +1498,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
1494
1498
 
1495
1499
  class TableService {
1496
1500
  static DEFAULT_NO_IMAGE_AVAILABLE = 'data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAQAAADX3XYeAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAD3JSURBVHja7Z13mBRV2vbv6p48Q5wZcg4KDEkJomBAUQfXCDM9BBMq6hr2dZP7umtAV99191s3qwu6qyIoNEFdVoKg4i5BQSQnERgkh0nCDBO7vj/A6u5TVd1VHau6758XXjWnu6urTp27n+ek5wEIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCHEfkisAjuyKOtMrjMX+XKelCvlenKlXOTCiTRkA8hGGoBWwPm/q1EPoAJAParP/92EMrnMUSaXSafkMpxsKsspu6mG9UoBkygwMzurm9xd7obu6IZuaINcZEbha86iDMdRKpdKpVKptD99PyVNAZOQeK9l/UD0c3RDd/mcZOPDCexHqVSK/diRsvW2Sj4XCpjo8mlKeZfGAgyR+qEAfS34ZI5iu7QDG+TtOdtuqOPzooAJAHemPAzDMUAagH5It8lF12G7tBVbsU7+0nWWz5ACTkLeaesc7hgpj8JQ28hWi0Z8jVXSanml61s+Uwo4CVjQwzNKHolRlnSSw3OwV2E1Vu3YOM3Dp0wBJ56r3AWFGIur0DLBb7QCn8pLPUsnHuQzp4ATgMXppy9HoTQW/SJ5VgfSkIZ0pCEd6eePHXAgBUAKHABSgfN/N8IDoAFAE5rO/+1BHepRjzrUof78cYQN5zZpKZbK/3XVsw1QwPa0ud1RiLG4GtnhnysT2chGNrKQjSykIzUK19uAOtSgGtXn/x+R0akz+ERe4lk6sZTtgQK2DXMGSSXSOFwYzjmy0AItFNk64nAXHkXKVahCmGs6dmKhw120hW2DArY08wuaiqUS9Ant0ylohuZoheZoabmh6QacwXeoQAUq0RjqSfZLi5remvAV2wkFbD3p9vG4UBJKTzcFuchFS7SMhK8dE86gCpUoQ1loUt4muyW3azfbDAVsDYe5p2MCXBho3knOQy7y0MK2D0FGFU7hFMpCcbA3S3PlOa79bD8UcNxYnH56nHQfRpupRQktkYs85EVlP0K8qMEplOEUqiCb+wX4BK/lvM+FmRRwzHFfKE2R70G+8U+kIx9t0QEZCVwr9TiB4zhqbgS7Em7HyxzgooBjxBsZOTfJ9+Mao3UnoSXaoj1yk6iyv8MRnMBJM3PLGzCjdvad1WxfFHA0+7uDnFPlyUZXU2WgPdqhbVRmbe1hj4/jGI6h1rgtnuV4jbaYAo4CsuS+Rvof3Gjs3Wloj05oz+oFIKMMh3DQuIxXS3+WF7qaWHMUcKT6u2nSBPlxFFC6MZPxN/gbZnCrIgUcNu/kOe+VfoQORqXbLi6rpuwl429haNj5hPxq098mnWKtUcAhMr+3/BP5ruDzPQ50QDe0pXQN4sFx7MdRI0NcNdIb8p9c37DOKGCzbvMQPImbg2syBz3QNaGnhqJFLUqxH2eM6P19x/NFG1ljFLBRy1vgeQZFwerGgQ7ogbasrrCowD4cQNARKxkfOp6miCng4OLt4/klJsEZ+F3N0A3dbR0Lx0o04CD2ojK4JV6Ap7iGmgLWZU5PxzPBxCuhI3ojj5UVcU5hDw4HW4rZJM1yPDd+H2uLAhZ4t3PKz+QHAhvVFHTBBWjGyooa1diD/cH2ODVgjnMaRUwBK7jzpWfkqUgL9J4M9EaPwG8hEaEee/FNsPniOrzW+CynmChgTE9t9RCmBV4cmYNe6BGsW0wiiAcHsRtVgd9UKb/Y7E/JvpMpyQU870b5JVwQ6B1tcCHaUVFx4Rh24WTgt+ySf1qymAJOTsf5QryEHwR6Ry76xy0tETnHKWwLJuIVnh9P2EYBJxWzW6X9Qv5xoC5tC/RDJ+rHEhzHNpQHekMj/oknXScp4KTg05ST9+D5QFvxKV4ringrKgK9oRzP5b88upECTnDmDHK8jqH6rzdHH3Th2J4lOYLtgZd7bPHcN2E9BZywLMqqeU56TH84ORv90ZnitTAyvsW2QCH0GuU/SNOSaRtiErXWuVdIr+mPODtxIfpwqsgGeLAX2wIt9tgnP1CyggJOKN5r2fBbTNW/204YhCxqwzacxQ7sD7Tscl7KD8eVUcCJYntvkl5FR71XW2MwcqkJ21GBTQiwFOu49HjxTArY9izo1PQKbtJ7NQsD0IVasC0HsDVQCNv3mx6eeIQCtjHzJsiv6i2TZK83EWjEbuzW309cIT1QPI8CtiUfNKv7Pe7XezUPQ7mvKEE4gw04of/y2+kP33KaArYZ7uGYjV7ar6WiAL04XZRgzvQm6OYSL5VvL1lNAduGT1NO/FT6tV489fYYklB5icg5arEFB3Q9bfkF6deJGGs6AQW8oGvT27hc+7UMXMRFkgnMEXylP6j1uef2CXspYIszr1ieoTds1RWDuSU/wWnAdnyjN0P8HR5xvU0BW5aZ2RkzMEn7tRwMNZNKkNiYk1gPvSxp8sysH95UQwFbEHcvLMQA7dc6YWjSphhLRhqxGbpBszZ7xieOK50wAnb/AG+jldYrqbiYizWSkEPYoDcu/Z18V8n7iXGXCbGOQZb6/UJ6XXsxcy6uoOuclDRHF1Rq71xKl0pcmQWfrJRpgS3ArOZpM3GL9s31RT/O9yY1e7BFLwfT4obbJ1dQwHFmziDHQvTQeqUZLtH2qUlSUYEvoLMQ61vH+KIvKeB49nzvwHTtVRk9MAgpbL0EQCM2Yb/2SzXS/cWzKeC4MM3R70X8XLtjfzG6sd0SH/Zjo86WB+m3RU9IMgUcYxanV78hT9R6JQuXojVbLBGoxBq92eEFuMOuYXhsKuCFuY3vaS+XbIMRzBpINKnH5ziu/dLnKbeMO0EBx4g5PR2LtaNb9UF/jjoTXWTswE7thZb7cIMdU5fasLW7L8UHWlO7KRjGjQokKEewDg1aL5TLt5X8hwKOMvOK5ZnIUJc3w2VoztZJDHAaa7UTp9XhHtc79roXm63Ecv8Kr2gtau6AK7jHlxgkHV1RhTNaTty4otr5ttr6byMLPM1R8LL8oNYrvTCYPV9isje8Edo7GqSXix61z7SSbdq924nXcbfWK/1QwPZIQmAPNmsPaL2Tf5ddsizZRMDuNMxGkVYPYBg6syWSEDmML7SXd3yQU2KP1OG2EPDi9DNztbYrpGEk8tgKSRiUYzVqNRsdiuywuMMGAp6ZnfE+xqjLc3A5ctgCSZhUYxW+03rhs/SbrB+O1vICfq9lw4e4TF2eh8u44opEhHqsgWZ28PUodJVTwOH0ffOxDBepyzvhEjjY8kiE8OBzHNZ6YUNj4aRTFHCILGjftAL91OVdMYzTRiSiyFiHb7Ve2I4xrmMUcAi8k5eyUmuGqAcupnxJFNiIb7SKdzdeOek4BWzWeW6BjzFEXd5Ly6MmJCJsxteaxQ2jrRp8x6IdyUVZWKQl3z6UL4kig7TjEg9KXezOoYCNW9/Ms//W2u1boBf2mZAI0QcDtYpH4IM3MihgQ0xPhRuj1eWDtcazCIkwF2qPsVyd/f5iC85bWq4P7HZiLsary4eiO9sWiRH7oRWsUnLLk6yW4dBi2wllaccMTNbqm/RiqyIxoxXSoTF3VCB36/8va4WDt5iAC17B/erSgbiQbYrElNZwQh0kSxrUJm/eYgpYz33+FX6hLu2HvmxPJObkQYbGIqzh1tryb6E+8FyXNEd9Pb0xmG2JxIkt2K3Vz7vDOsHgLSNg9yisUO9O6I6hbEUkjmzQSlNaK48pWU0B+zCnp2OtOtIk1zyTeKOzRrrMc9mEr61wfZaYB16Y61iilm9HypdYwMIN1wpWnOtY4s6ngM85z5mNi9BbLG2DEZQvsYSEL9GK+9IDC62wNivuApYlvI5LxdLmuJT7fYlFcGAkmqmLR2XPnBb3Rhr3aaSC30EVKjYDVzLKM7EQTrTDQXX4u4K8tPkfx9s/iCvzJsuz1JV1JXLZZojFKMdKjQiW8t0lbyWtgOcMcqxBlnhBl6IjWwuxIIfwuTqO9FnHyKKNSdkHnt3KsVCULzCI8iUWpZPWdtZMz8KFuUko4GmO1NnoIZb2UA9HE2IZLtTaVNOt8c34DWbF7Yv7PouxYll7XMw2QizNYHRQF97Y78kk6wPPvUn6QPzu5rgGKWwhxOI0YgVU8d490o3FS5JGwPN7e9ahpX9ZCq5hfl9iC07jY3WK8ArPsAl7k8KFnpntWSjKFxhG+RKb0AzD1YWtHAsXZSWFgDNmoL+qR6y13pQQi9JBK8TEwNpXkkDA7rsxSSxrwwy/xGYMQDtVmXyXe1KC94Hd3bFJ9JWzMIZpyojtqMcKVIuFVU2DJ5YmrAX+NAWzRfk6mWWQ2JI0XKbeStDCOcvtTFgBn3hSve/oIrRiWyC2pKVWuKeR0hMJ6kLPu0z+TJzoZcgcYm/WQ+UxNzguL/oi4SywO0d+U5RvDgPWEZtzkXqncKrnnQ+aJZ4L/Yq4zFnCJVx5RWxOilaq+R71f0owAbuLcIdY1h+t+fyJ7WmlkbNLvsddkkB94AWdmraKa6/ycSVjXpGEQMZKdQj48qYBE48kiAVu+pso31QMp3xJgiBhBNLEwtbO6QniQrtLcItYNgRZfO4kYcjUykZ/47xxCeBCu1tjB9r6l3XDMD5zkmCswwGx6FhDv8kVdrfAL4nyzebkEUlALkaOWNQu9UWbu9BzR+MusWwoUvm0ScKRorUoaeq8a2ws4EVZ0muik94DbfisSUKSj+6qLqr8qjvTtgKueQ49/UsytOL6EZIgDFInJOgtRTVeVhQHsdyDsV5canUZg8aShOYQ1opFjZ5LJnxlOwv8aQpUa587Ub4kwemkjlqZ4pgevS2GURPwqR9ikH9JKkefSRIwRD1IOxT32syFnt0qdY+Y4GiouotPSAKyFyqP+WTqBbdV2sgCpz4nyjef8iVJQg91PuH8hqdsZIHd/bDZv//rxHXqaW5CEpTT+Age/6J6z4AJX9vFAr8kDl/1oXxJEtEMF4hFaY6XbOJCz7sRhf4lmerbISSh6aueEb7RXWgDAU9PlX8vlg1k5A2SZKSosxcAf5ieankBt3pUDFqfiy58niTp6KaOONO35Q8j/S0RHsRy5+Nr/837Eq5m6BySlJThE7GoovGCSacsbIGlZ8TYG10pX5KkaPierVIivDI6ohbY3QVf+6dZSEEhMvkkSZJyFkvR6F9U19R74kGLWmD5KTFLSl/KlyQxmeoshukpv7SoBZ7T07HTfxloNq6Hk0+RJDFNWIoa/6IGZ5/x+yxogaWnxVXc/SlfkuQ41alzUz2/sqAFnnOBY7v/dG9zXMfQsSTpkbEMp0WzXODabTEL7HhOXK1RQPkSAkmducEZuSgdERLwnP4o9i9pwc37hAAAOotzq5AnzulrKQE7fi2eqT/tLyG6Ntg5zUICnnOxmHuhlTqwCCFJS0fVcia5eM4gywjY8ZRobvvzmRHig8oGS45fWUTA83vjZv+SPLTjEyPEh/ZiiBpg3JyelhCw/BPxLAV8XoQgiCqczh9Fon8dJu/kpRzwTzXYBlfyaRGi4lMxi3A1urjK42yBUx4SM4VeyCdFiAYqZWTLD8bZhV6cDmGLcgv2fwnRpAOaiw7wj97IiKuAz9wl6pXRrwjRo7dY0DZrUhwFLEt4zL8kk+FzCNGlG0SDK/1cluImYPeNEBaE9YpBxnBC7IoDqpmjPvML4yZg6af+f6egB58RIQHopYrQKv80TgKeM0icL+qGND4hQgKQhq5i0TXuAXERsHOqYI/VXXRCiMCFqsUX0n1xELA7UxbGzzoyfQohQclWbfSR71yUFXMBS8Vo5V9C+0uIEVRTrS1rb4u5gOX7/f9urk6pSAjRIE+1oEO+L8YCnt8Hl/mXcPyZEKOocmVfNb9PTAUs3+/fE3dwAQchhummEl7TlBgK2J0m3+5f0kmM6E4I0SVNFTFOuiu0zIUhCVgah3w60IRE0Ilu2/LmmAlYFmaAc0Q9E0IC0lY16SpNjZGAF/TAaNpfQsLtBwtc6+4SEwE3TRQHsLryaRBi2ol2iFosiY0L7fL/swMy+DQIMUmGOvRFLAQ8vw8GBnEFCCGGbLDAEPNxKk0LWBZ+JdLQlk+CkBBop9q953RFX8DCV3TiFn5CQsKh3tZQEmUBz+kvhpjvxOdASIio1DPIbNIzkwKWhF+IdLThUyAkRNqqnGhHcXQFXCT+gjAHISGhO9GqJLwToyhg92D0oQNNSOToLBb0mV8QNQGLA1gZXEJJSFi0UW0D8riiJmDpNjrQhEQSSe1Ej4uSgN3dRQe6M+ufkEg70f3NrIk2IWBprOhA57L2CQmTfPVe+sKoCFgWBNyeDjQhEXCi28VCwO40XOVfwiyEhEQClZLGGI/OYVjA8hX+O5AlLuEgJEICFnzZZq0ui7iAxR5wLtOoEBIR0sQQ6yq1RaIPXEgHmpDo0F70dwsjLOB3O4ubGChgQqLWCx7o7hhRAafc4P93hsroE0JCpZU4lSTJ10dUwOIUEu0vIZFDUoXFMNoLNiTgaQ5cQQETEkMn+mpZipiA+xX4e8wSw+gQEmEBC3ptveDCiAlYHun/d0tOIRESUdJVGQs9IyMmYIdwKiYSJSTS5AUxmxG0wNzEQEi0BSyNipCA3e3EALa0wIREGpVZ7LWwTUQEDOGXIAuZrG1CIky2qCup4bKICFi6jPaXkNg70Q4DveAU8z3gZBfwPmzBThzBCdSgDunIRD46og8GoSfbYIjI+Bo7sQdHcRJnUIcmpCILrdAGXdATBUkybZmLgwGVp2leg/aAM1HpP2t0LVpa7tav9fvLhakmP7Xc0Pur8S8sFyrZlw64Dreo8r5G4q6WG7pv43cOADMwTyhZbvizjZiAKuWvHMxRR5UwzF78G6tREfA9nXE1RqOjiTZgjOWWasUVWOFfUFfdckptuC70cH/5pqKF5X/J3sPxiJ+zCW5Mxj8DyBc4gjcxGXPQFLc7X4ZGwxL8KIzvWeMjX+AMVoV4nj34OR7Ev4PIFziIt3A3HsWahLbALUWHOD17aNh9YEk4RWsbBNJpwBsRPuNRPILXUG3gnTX4Bx7CkTjdeRVWG3znKj8JmmWJ8PfSEM5Rj7/iYWwy8YldeAaPYmPCClhCa7FrMSzsPrBnoCT46XbgE4xH74idbQum4bTP311wKQagM1oiA3WowkFsw1rs9+klP4JpYhbWGPEhrjT4vtA5iQ1CyWYcUSXqCswJPOlTY0AaLkIBeqMNWiMdDpzFdziEUmzGFtT6ifhxizm+kSQPJ/wlPTBsAYunsMc2Qhkz8P8iJt9fok75qwD3+EkzE5loh2GYgu14A5vPl57GL/F/cZHwJhxVbQ/XcvY3h+Woy6r6XoYpJs5wEL/ASeWvjijCGCFNfA5y0AHD4UId1mARttq2Z2vOiRYYEKYL/WkKhGxpLWxSFZvwRUTOcxBPKfJNxaP4o64sC/B7/FgZMKjDUwH7y5GmkyKlxQbevViRoPnkOLKPw+zdQ/MRPIbPUO4j3xTch9dxoyBfv44gRuMP+GvwtpwAqNRV8GlKWAI+3sd/eDEF2RavAm+Y7NdMNCk96vAMas4fZ+FF3BxkBOAG/E6poRo842O5o81YH/sYbCDLdwDrBtPftFEZInTgacWFO4UvDX6+Cc8o8m2BP6LEyFwm+uAP+JVqwX+ikS3WRUZZr7AELA2wm/29Vzk6ENLQij9vKlY0Bc8acokL8JzyEA7irZjd9/XKt1ZgbZD3rlFGfVNwnelv8tbqUPTGJRrlgZmNXYqb/Hsx2UdArsJrGJzQApZUP1FNA8MSsOi3tLR8FYz0ueS3UBvWub7FQuV4suGmMxC3K8cLYuZGt8BIHwc5mAP9PaNM/yT7ThmN9bP8aw2Nax/Fu8rxE+hm8ttb40XcnFxO9IDwLPBA+/WA71fc3HLVUgVzzFKc8O6YYOJzJehx/siDt2N23z9QjjYEnAc/jq80PmOUFWhQ2sIIAMOUeYlGQ4NHbykO/nUYHsJdOvFoUglYCtMC21DAfXwmUtwoD/k8J7FSOX7MUD/NO1LwmHK80me0NboMViZyAg9kfagMYHXAINPf4p0BvhYpABw+TnhwJ7pMqdNUn84OCeDjhmOB32spDlLaYwz6XkVutZgZ8lm8kyW9xZi6QemrzELLYa14Mtd/8h3I0lsN1oRlyvENphfl7ME+PwcaAAqVsxzAzqD95++va4xq0QLRVFi3Wc1DFnD9QP8nnIVUW1RCO9zqYzEOhHiW/4ThaPp+5j8xu2/vQFYZPtd5z+eKTxLKAJbX/hagi2LHB2i8HqxOr6VWNUlTbSpMHRCygB02nQMGJitbCjx4PaQzlCnrhFJxdQifv1qZEd4XhhtvjlYYoRzrOdHe8ktNL8qpwyfKsW/qAK/l/yzgsOEpxX63QH9q1aANFlVopg/c3a4CzsFkH5uzKYQzeFf+9AopgEGmMpAFbIvZfXvt/nphUd45TmB9GH7FKmU1eKbfgs3Lfea+A/kb3noYxNS0xp3o7hETcLaNquFWn1VCM1RL/4LzjXJ0YYhX0EfjXNFmiLJzVtZ0Z5coNdEWF4fhQF/l96OWjtGGnGhvPVxAneoiqkzuFrKAZRsLOAX3+Ay9fGL6899qCNEcXuGXxuyu/QeyxJVoHp9xYvMDWEewRdOB9neitwWY+faORnSlTg0LOLAFDjw70s2+AgauwkJlzc8buMLkAJzvUvvQ6OjT94sdhXj7/EjvSazz6RMDwDrlSpxmksCfZ6livbuoRuUvQA+lf7sM9wWt0+jmljY+QLbc9gIOYIFnZiPf/9c9y1YClnC/cnwc75n8dHnYP1vez5XF8K5zfRY3ilsGvX+PMD2J4/Fp7GM1fzi+5yPdKSxvnTI1nj4qlbVdlBWSgNME5WeYSCZsDQbAG4/vXb8dvcE5qxyFGiLH+7namN71DRoW93uLrH6PUdYr50rRtHBjFA+nQncfWK1+IyUKTnFnllTXJSQBO23tQJ/jPjjPH53BLFOfrAtbwN76qo/pPQ9XHCeP39qopUqfuA2GmT6rd3DqUs3ZiGY+a7GXBK3TVOrUhBMtdw+tD9zd/gLujB/gX+eP/4VbDWx1jxze30Y5pvcsYayy/mwJJp8frPLdxTvW9ABWpY9VLdTtfa9UrHV5BNZZXRty33W57QXs3+kKNA4dwALLCWCBgTsVd60R/zDxOe826DMhfvNpjXPFhkLlsXrnfb3zwg5cb/qMHylbEPKhF2ftYmUKq0lHQt56aKCZNWGBAw1jBerWdgvSubYFLXz2EX2mjEoHx9sPqQ7xm6s1zhUb8n1c5O9XXn2o4WIbx2u9r9NtMpLPD8PSIHVaQ5UGICuIEo0KuGsiWGBgnE+DnW74U63DtsBeAcc+EKB3ldW5tc/lPi6w+RVY25W5XSmg9b5ecc0Pacaw8tZpOVVqxgKHKOC2iWCBgXTcrRxvMxx21Sv6wyF+7+E4CvgSJX9GE5YCWKJM7eSFsAvXOyg1KOAoQhuf1V1LA9bpCQPfulz1X9IKOEBiikCDWHl6DpDduBYLlGUGr2OEMjKNgO7H9/t5duOakL51l5Ef0CjhwPWYrchvgo8EC01PBp7FZ8rxJsOLJD7Dw6qf/C5KnZbiUhpaA+Mv2ko0ZIFnZvsr1mFqS7u18F3ScchgROSeGkI0x27lqFcc7tk70nwMrykROqQQVmCtDGkeuw6fqsp6adQNUZMqyjLLnWlawNmC6tNsXSVDfMZOZxoaQvFud9sbUgOuxV6Nc8WOthiiHM9XjoaGkCZsSYhXsDRAnW6OQMTQxJawP85c0wJuyA1i1m2GN1JWFeYY6gN/7/jWa9iS4HyqLN/oHqdsFj8wWBaY4FE29LsQpao6/X4+5EwCJ0iJhhPdkGu6D+zMkxPIAgPdcb1iExbiZgNJUq9QGuCHmqt/A/Ohz3niw6VoLYz2thY2N5izo73xiqFPPKj4HkvxoKpOvw+T8JGPh0BE0lRqNG2BPQlmgYG7lXuoM5T8zDspstt0P3iX0suTQlg2ERmcqpA51xsavvPFN9Kk0d6z98duhSrE/PVKg/sMR6lTwxbYY96FlnITqQ8MALkoUo6X+wRn06MNLleO/2QqZWgT/qwcXxnCsolI4b/nVwrBj/DGek4zHFjoGqWtVKnSgeYrkTyaTMzJ0wI7zFtgOS/RLDBQomxjkzHDwPvvUASwF3NNfI9biT3h8AnyHnva4yKfvy4OYSW414G+3PCmjhyfbQ1LNfyg772A1fiYSg3bAqckjwUGMnGnYhs3qFJkqumGW5V9xG+jv8Fsg9t8grnfFufYE78N69MnfSJomZl+GqsM+32Jk4IH0gEleOf88R/QDgVUqwELLIXvQqcnRMWMhXdrpREbfI8SV6MRTxsKTrcTTylL9Tv5rAGzIx8p+6jamwoBP1iJR6YVFfsOJWZ2Pf7XZ48y0VdbCAKWhU2fibGD04mpyvE+A+/PwLNK+LZqPI5/B3U5f66snc7CszZevXYu56/X/prZgOi/rUFWOX3PKXMAtXgSrxrc2lCdRAIWLbDc0rSAxbaXkiBVM8Jk2u2ueE75PWzAn/ET3VTTO/E4XlI2radjGrrYuqY2K+PEDtNh2K/3WQemTiWeh98oc+MyFuIuzAqyveEwZmBSEgnYGcwkG9BlmlGl240H8IipLfaD8TyeVezqVvwEXXEZ+qMzWiEddajCIWzDGj+Lno1n/AaQ7Ih3BdZQ0yPp+Riq9J+XaOR17IY/4UklSmUl3sJM9MEg9EYH5CETaahHLc7iGA5hP77EEVPfbubnxppbJBzBTHIyC/gCjDYZZnYw/obnfAR6IEi6lu54WkwqZTvENKJmKVQEvApnNEaw2+FlvIrFyk+pjJ0G13yNwF0Jb4Edhi2ww2g/2pFA1XOP6R59R7yCew1tqMzCFLxie/kCnyhLQVuEsH4LuEyJnFWv83OZjsfwl2DJ9wRrMxKv4Ndx2RxiVQEnoQUG2uJW05mDnZiAG7EIywLsD26P63ALmiVEHYlpRM2SgjFYoJxLLyl3H/wBu/Eh1gRJDp6KIbgSl9o2qETYfWBdF1p3cNG91ye5D4CxIUdnTDT2YjN24TBO4CzqkYYMtEFHXIhByvQIMYsHu7AT3+AoTuIM6tGENKSjJVqjEzrjQvROiHUIZjowwh6wb1y9w7TATray8/T02StMIuUy9jOdgzmpXOg0833gBHahCUmUPnBSDmIRQgtMCIkSxhdyUMCEJKQLTQixn9QVhIxcDEJGSKxQqa2OAibENjRFQMB1FDAhFrHA9bTAhCSVC10XxKgTQmiBCSHRsMAUMCFxoikCFpiDWITQAhNC4iFgWmBCrCLg8F3oRtYqIfHqA4dggSsN/gQQQiKMSq8VpgUsl1HAhMSH+iBqNCBgR5lBG04IibIFdpgXsOcULTAh1rDAohppgQmhBSaEWNQCO2mBCbGIBXaGYIE5Ck2IVSyweQFn0oUmxCICrjYv4JtqcNbvN0DJO08Iia58hfS3Z6bUmhYwAPaCCbFADzhQ9vNAieeO+2fJrLF0erNGTPDJcJeDObqhdH+Ib84fFeGBkL7r70revV54NezrUeNNUL085HdEtw4DXZEaCZnIQg66oCcKMFA/o14E7/DaED5jlWTfNWolIhQLLGSxrrb0r5Z/gkrf9NQiY30eWGNIzXyFxrlCvx471qE5ZNTgFErxH7yBn2ES/qluoiSQ0kpDErC8P8jvgqUQ0jFiqe47r1aSTlRhbQjftFZp5mm4OgLXY8c6DIdTeBd34z/UqWEBi0o0KGCp1D4W+CQ2CCWbcUTnvTkYFVYT9X5mlG6nwsz12LEOw6UCz+M9KtWgCy2VhtQHlkpl2wh4mThuBxnLMEXXif7k/NF6nES+yWa+3oADbe567FiHZnqSjTiLShzAFvxHGRmV8QraY0QM7mu57QSsUlqIFni/XSyw7GMV2ylHH+lGERmkvEvGRya/6yOlmbfDoAhdjx3r0AwpaIbOGIWHMAv3+WTe+wtqaW4NCNgRWh+4RvhYrWUb4EZlmM6BpxWn4hS+1PtpQqGPQyybaubLlONC3dFUs9djxzoMVcol+KWPN7OaalXRJP6syenfhiTgO6tx0r/xWnUYy2s7hqI3LjHQw71OEd8xbDbxTZtxVPkRuC6C12PHOgyVK3Clcvxf6jW4A33sppqQBKz2va3pRPtOd4z165mu9ZsW8SUfw5TjxSa+a4lPM8+P4PXYsQ5Dx/vTd4B6VXu+JnrAQQRsj3HoFcoizxYYAWAYcpXBE/0BDK8TvRpnQmjmhRG+HjvWYaj0Uo7KqdfgFrg0ZAHbwwJ7reK1SAHg8PmF13cAL0WL80f1+NjgN32iLDJvgcsifD12rMNQaa4ccX19cAFLkROwFR3APdjn5/yds46S4qLt1B1OuVaj+RrtJ47RnX8L9XrsWIehclo5yqZeVVRFzoXGDusL2Cu+AnQ5f9QBAwyI0+sE78UeA9/k+67CKFyPHeswNL5RjjpRr0EFLG8PWcDyFv85lhrL7QquU5Zk+IvKOwjzme5cY1f0NeUmeptxH3SLwvXYsQ5DY7nPDwbxp95/Fy8g14cuYFcVvrW2DV6l9BgyfSYngMsV56wmwKrbsT6922CbJRt8esqFUboeO9aheT7Hp8rxNVSsQKXKgb79u9BdaGCrtQXstYpXIdOnPB2jDTiAVyHj/FHwnTerlLFq33NH9nrsWIfmaMJ7eFb562p0p2KD9YC3BH5/EAFLW6ws4CM+d1eoa1234aDO530tzhLDzfxKZEXpeuxYh8ZkewaHsQbTcSdeUbZwdsej1GvYAk6xswX2LoPsgn7CaxeghzK2ugz36TrRy5R6OoIOut90HJsMONDhX48d61DEyFZ6CaPxaIwCRBjf2r/cigLeGpYFllUWWLZM0/P4VLjWviCv0D5SZ3tTBlE6f3+nAQeyvM28o8/obOSvx451aJYcTMTreMLS8V3ihYzvIivg/K/9ByAbLbSYYz1OKW6E1q/sGKSeP6rAF7pn8W2iHt1qXRawmUfyeuxYh+Y4g39jgbKmnPjXjRAj5qzPnFsoAh7dKM7iW8eJ9vZKvauqfGmGkQZ6uNcq29vKfHb6+rNB2dXhDOCQReZ67FiHZjmNxZiCN5k0PrgDvd3VFF4fGNIW+SLfvyvR0RK3WuljEQp1retKxdKUo7Xme1phhLKpbYnPLhztZj5M5yyRux471mHwnmQdqlGJfdiBlefXYTVhNvbg2eANMGzstKG/UvT9tgb7hCPoOYVTlFnkVj9SnI18DNV5z8Voe/6oKcBj9DrFX6hn4QB8hzUGHOjIXY8d6zAY6WiNHhiDH8GNh5TJu3X4PY1uYHWFL2DPevErrDGM5R1yuk73JiRcr/F+kWA7b1YozbyVjoWO7PXYsQ6Nk4Lb8BdlAOtjW0TrjBWyenfWurAFLK33Xz/ZaIle8HZlXtK3gam5XlmSf0j3x8x3582SgA70dT7hYKJ3PXasQ3N0xxPK8QwLzWvEmwpxCKuuZkPYAnadxUb/klOWGnwZhPYB3tcGFxuwH96dNwchLjzd5bMd8/oYXY8d69Acw5V4YkexgcrVc6C/nBJ0EbqRMYTV/p7jKZ8N2fHhLD5TjjcZnqj/DA/rrKHqgIFKYJ0lwgJ7b5Ptr8wZR/t67FiHZrlCqfEvdPvfyYZoGmUDIcOCD2JBWm01C7wypN0xdT6L6EV8d97U6HxmbAyvx451aI6BPj4O0bbAUmQE3LBa/O2Od3C7UGck9R3AUcrOm1ofy+Qr5yxcEcPrsWMdmqOVcnSCygUAVKs2EhpJHGJAwJOOY28QXz2mhB4hYpdueKF0nyQpSzSb65XK5EcsrseOdWgObyyO09Sutmf7tetk8E8ZmkeXV0s9/b+qcxxv1Cuq3njF0CceVH6BluJBXSd60fmjnTiArgCAwz6jrmNjfD12rENz9uZ7UqldTQFLhoJmO4y8yUq9YN+52kKDn/GKb4VuPsLe6KFq3t5m7hu9IzbXY8c6DK2/15La1fRrPZETsEM4VVUcQ+sYyw3ozzU++QjXGGii59KOenzSrhTG4XrsWIfG8W5zy6V2AdSp9iHJqyIm4G07UeHfuz5mAQf6csMb0nJ8luQvDdBEU/2a6DplXUxKgGmW6F2PHevQOCuVo4uoXgDHxAUtp0r2REzA0zw+9X3+6+KDb27AQhOf81rXL6E3MtBMSDsabKdOtK/HjnVolDU+C2ZGUL0aipI+keSICVj9o3ssTgvgvLkB2+vmBtRisKF8hIU+TfRrAzt1on09dqxDI+zF75TjAvSmerV8WoNujkEBOxeLHntlXG7TSG5ALfyX5Ov9+Fyk7LyR8ZwSgSJPd6VQtK/HjnUYjEYswP8oY9ASHqZ6AZSLo0py47KICnj8IXGRcDycaG9uQIeJSEfnuN5APkLftKPHlSP9nTrRvh471qE29ajEfnyMP8OFv/uE8J1K+6utps0Tjxj7pOH91NISucD/K/vG/DaN5AbUIx9Dlb7fEgzWbaIzBdsiGdrCEK3rCY7ZkG3Rv2bjV3Q3iqNwh6F/Pn6b/0UBy4YXyjkMf4fgk5fFfCpJTIFpFq91XaWbjzAfQ4SSQbqxKmNxPXasQ2O0xYuYTNN7vkNaEWIP2ISA5f/6r3mTfZzM2OCbGzCUkcvLfPIRfqL7rrG6TTY+12PHOgxGDzyE11U/lcnLcXFE4bvKtREXsKte3IgS616wmALTLCkYo3Eu/SYKANk+U0vxuR471qHW55qjPS7EWPwPpmM6btNdWc4eMIDlDxjOu2piGHLug9Krvn9n4EZTo5iEEA3fFouEzFzS1OLXI98Hhkfwy2stEZuDEHtzQpVYTzYxzW5CwBNLxT1oB1n7hITJIbFgq+vbqAgYwELxqxmQjJBw8KgELC0w83lTAna4/f+ui/k6XkISzYEWp2PleVETcNEW7KATTUjkOKh2oHdETcDqX4fDzG9DSBgOtGrF5FxzZzApYOcc0YlmSDJCQuW4yoEWu6kRFnDRLmzzLznEp0BIpBzojUV7oipgQHaLAqYTTUhkHGh5rtlzmBawJAi4IeZroglJDI5CWDEpp8yLuoBdu8WtoPv5JAgJgVKx4Mvx+6IuYEASzPyRkJJ0EJLc1CqhFfSUFSUBO+b6L8CS45ZfgBD7sl9cx+hpdMdEwOP3iVtB9/FpEBKuA71s4sGYCBjAa/5/VnM2mBBTHFdFNJFeD+U8oQn4PXERNAeyCDGDyms9Xr4oZgJ21eNt/5JDqj2NhBA96lQzwNKbxqNwhG+BgRn+PXAPvuVTIcRw/1dY/iRL/wjtTCEK2LUbQsKzvXwqhBgWsMBnZpdQhmuBIQkDWacZYIcQQ5xUZSIMbQArLAHL88Rgtnv4ZAgxgEoplfLCmAvYdVZ6x7/kcMzCkxNiX86o9wC/5TobcwED0gzBJtMGExKUr9WR5P4R+tnCEHDRFjHU+35OJhESkHocEItWuLbGRcAAXvL/s4mLKgkJ0v9tDKKiGAq4eLEY5G6PklWXECKiYeK2FS+Lm4AlWfqjf0kdF3QQokupeuvtS5IcNwED2W+LmZl2M9g7ITp8IxYcwTvhnTFMAd9QJ7/iX3I65lkLCbEHR1QLOPBXV31cBQykvoIa0QYTQtSolHGmYXq45wxbwOPK5Df9S05ydzAhKo6pFhvLr0+uiLuAgZSXxKHnbXxahAhsFwuaUv4a/lkjIODx+/CBf0kZ+8GECP3fcrFo/vh9lhAw4HheHHqmDSYkoP31eH4TEe1F4iRFG/Gef0mFesE2IUnLIVSK/V/3hM2WETDgeFoMMbCN88GEnBMrVBlDm+TnIqS8yJymaLuYM6kKh/nkCAFwEFWipGdP2GkpAQPOp8VV2rTBhOjY3xcidfaICbhojzTbv+Q010UTggM4LUr6jQlfW07AQOM0MVvxNu5NIklOk3r8uUH6v8idP4ICnlgqveVfUoOv+QRJUrNLXGkM+TXXfksKGJCfF0Ny7FRdPiHJw1n1+ufalN9E8hsiKmDXt2LWpCYu6SBJzGZVJ1J6dfwhywoYwDMoE7vwjBdNkpMyqNINVjhfiOx3RFjArnLpefWvECHJh4xN6rKnxpVZWsBA3t/EYbdydRw+QhKeUvX2hR1tpkf6WyIu4NGN8uNi2VZ1JD5CEppGjdEf+SejGy0vYKBkMZb4l5xllA6SZOxQh6/7oGRZ5L/HEY2L9/wUQq7T3arVKIQkLt+ps5TUO34ejW+KioAn7IQQ6q4JG/hUSZIgY4O4OQ/4c9Ee2wgYaHhWnD06yawNJEnYq546PYEXovNdURLw5ArpGbFsC87y2ZKE56zG8JX0K1eVrQQM5M3ARsEqiwWEJCBfiQNAwLrt/4zWt0VNwKMbPVPEOznMTf4kwTmoDibV6Hhwmsd2AgYmbMaf1L9O9XzGJGGp11p99WJRFF1PR1Tv5xkxGUwttvIpk4Rls3r29+uaF6L5jVEVsOusNFWMq7OPeRtIgnISpSrzix9OqbWtgIHildIbYtmX6k4+IbanAevV7vMM1yfR/VZHtG9L/ok4clXN0WiSgHyFarHoaOMT0f7WqAvYVSX9WCw7wHB3JMHQbNMPh5+8LO4CBorn4X31rxVD7ZDEQdOrXOB6L/rf7IjJ/T2CCrG/sI5Ro0mCIGOdelynzPloLL47JgJ2HZbuE8tOYhefPEkIdmqEjZIfGn80YQQMFC/Em2LZdnXEAkJsRznUWVLk10vcsfl2R6xus/YRMUi0jC8YqYPYnEZ8od46uDfjJ7H6/pgJ+M5qx52iXs9oLDwjxE58hTNiUYNjwi2nE07AQNEX+LVYth/72QaIbdmrEbBReqboy9hdgSOWt7vjeXym/gVjT5jYtfer4UH+V/5dLK9Biu0tv9vZuRmt/MuyMAbpbA3EZtRhuTpERaVz8PiYRlF2xPamJx6UHhDLavA554SJzZCxViPCjPTD8TEOgu6I9Y0Xz5NnimUnmEGJ2IwtOKku/EfxnFhfhyP2t17zAL4Sy3bhENsEsQ2HtRLnbsKjsb+SOAh4Sq1zHFQZYtbjO7YLYgtOa2wcRDnGuc4mhYCB8QfkO8XZ70as5bIOYgMasFq98rlJmuiKy4yoMz6VMH+PS8JV/mV1qESXWA+LE2IKGZ+r3UdITxa/FZ/riZteZGneAtwmlvbAELYRYmG+wl514b+Kb5XiNJHiiFdFSHLqPWLIO2Cf1uAAIRZhl5Z89+BOKW7zoI74VcZtlRinjkKymdE6iEU5pDXdWe24LVpZFywuYMC1VZ6qLv0SZWwrxHKUawehuLdoezyvyhHfSil5V/qtWNaE1eodHoTElWqsQpOqVH7eNTe+1xX3QV9Zcr8tTRZLc3A110cTy1CPT7QyXM8tnijFeRWwI95VI8k192G1WHoGa+FhuyGWoAmrteT7n5y7pLgv4rfEtOvC3MY1uEAs7YhLOStM4o4Ha9UJy4C9uNR1Mv5X57BCFY0rc45VZ1w5zF1KJO7IWK8l31OOsVaQr0UEDIzfh/HqvFCH8CVbEIkrX2lNa9ZKtxTtscb1OaxSUa5V0p3qbm8p07CQOLIZ+7SM8r3Fa6xyhU7rVNa8Ha4GXCOWlgNow5ZE4sBW7NZyqh8vmW6da3RaqcLmrSpqIw0TS0/CiTy2JhJjdmKHRqn0F9fTVrpKh7UqzfWI/LrWLyFXSJPY8o1mlBjpre0/ttZ1WkzAkiw9iHlafRGGnyWxY5/m2Is8R753msWWJ1hwonV6aquFuFFdPhi92bJIDNiLjVoTmMtybrmhzmrXasmVEu40fIBCdXkB+rF1kSizC1u1ij+uvnFKrfWu1qJLnRZlnV2CK9TlfTCALYxEke2aQ1dYi+tcltxhY9m1irOap32MoerynriICyxJlNgEzfUZmxtGT66w5hVbWAvv5KWsRIG6vCuGUcIk4sjYoD1UurvxyknHrXrVllaCux1WaEm4C4ZTwiSieLAOB7V96jGuY9a9boeVK9V1rPEqbFCXf8vNhiSiNGGttnw3NF5lZfnC+obM3QIfYqS6PBcjueWfRIR6rIHm1qJ1GOuyePJMG3iii7LOvo9r1eU5GIVmbH0kTKrxX2jm416ZfnPsEnUnpAt9jptqcm7Ce+ryM/gEp9j+SFiU4WNt+X5YPdb68oVdxoI+TTn5T9yh9fszDF3YCkmIHMI6jVB1AOZW3PFAgx3uwDaDuW6nNEO+R+uVfloD1YQEZQ82a8Z8kWblTRltk0RdNpqNkaX5f5Uf1nqFizuI6daEr7Q26wOQ/lL0mGSbWE42a/dzfyH9Ruua22MEUtgqiUEa8Dk0Z4c88i9Kfm+nO7Gd4Zo7XnobmeryZrgULdgyiQFOY412Nuo66e7iOfa6Fxt6nnNGOD7QirKTgmHoxNZJgnAE66A5PlWGW12r7HY3tuw6LujR9CH6aL3SGwPtMDNG4tbz3YZd2i994/nBBBsGfrHp2I+7NRbiSq1X8jECGWypRMtDxhfQ2ZWwBrdaI85zkggYWJx++h/qnEoAkIlLkcvWSgQqsAY12i/Nq77Tipv1E1rAgCy5X5Ce0HrFgYvQgy2W+LAXm/Q2wLxQ/JRk2xQgNp8+dU/CDGRrvdINF3FiiQAAGrARB7RfOoP74p0gNKkFDMzv41mIvlqvZGM440kTlOMLvXzTezDetdXed5cAC5hmNU97E7dp31xf9OMarSRGxm5s13Od/516x22Vdr/DhGjdsuR+XPo/7fmjXAxHDltyUlKDL/T2q8nS77b/cloCRIVIGPM0b6w8C621XknFRejK1px0HMIG1Gu/VCZPLlmWGHeZQP6luwvmY5j2a50wBGls00lDgGErYCPGuxIm0UdCdRDdmfLfpTu1X8vGUGY5TBJOYL3ejC+kf5552K5zvgkvYACYVyxPRyvt17piMO1wwtveLTrbBAFUSQ8Xz06s+03AIVp3F7ytldUBADIwkP3hBOYIvsJZvRfXOm8fvy/R7tiZeA9xXlXBzPwKXK11b404jArkIZVtPeGoxTpsh04gjUb519LdxeWJd9cJO0k6Z5hjtl46w1QUoBfnhxOKfdgC3SBW+6Xbi9ck5n0ncCt2Z0ovyj/SezUPQ9Cc7T4hOIMNOKH/8tt4yJqJySjg4CIuwnTt2WHAgQvQl+ulbU4jduJr/Twd5dLU4oWJfP8J70e+28H5Mm7VezUDA9CVzrRNkXEAWxFgTmih85HxRxO7DpKi7c69SXpFP9pOKwzmpgcbUo5NKNN/+Rgedc1P/FpIEuPjbiE9Jz+iH22nPS7S3pVILMlZbNVfaQXImIXHXOXJUBNJ5D26R+E17UhaAOBEb/aIbUET9mAnAsRd3ys9UPxxstRGUnX/3Jl4Gj/TV2kW+qMLe8QW7/Vu110mCaABv6t+PpGWSlLAAvMHel7DcP3Xs9EH3SliS4r3MLYhYL6xjZjq2pBctZKELXWao+B2+Xdoq/+O5ihghGmLcQTbURnoDWX4Nf7makq2eklSU+POkX8m/W+gDOEt0I8itgjHsRUVgd7QIL0qP+2qSsa6SWJfcX5vzwsoDvSO1uiLDtRPnMW7DUGGk1fgf1w7krV+kryzN/d66Y/aIfG+Jw990I594rj0eY9id7AU7tvxY9fyZK6lpG+Zn6acvAfPIz/Qe3LQCz0SceOWZfHgIHZpJyDzUoFn81+2Sx5fCjiKLMxtfAoPBM7IkoGe6Bmo00wiRB324hvUBX5TrfSq/HxyLNWggA2xoJPn5/L9gUXsQGf0RTNWVtSoxh7sQ5Ch5Aa8gedch1lbFLDAu91SnpLvDLwcS0IHXMC101HgJPbgCILkOGmQ30p5fvwB1hYFrCti5xO4N1iHtxm6oTsd6ghRj0P4BkFngTxY4PhV0R7WFwUchDl9HU9gUjARO9ABXdGeVRgGMk7gAA6hKfgb5zueLtrFGqOADTJ/oOdJjAs+9JyN7uiGTFaYac6iFPtRHfyNjViAF+yew4gCjgMLejQ+Jt0TfJ+hhPbojnb6uxWJH004hlIchYGcnmfwj6Y/TSxlnVHAITKredoU/MzIqspUdEAnyjiIJ1yGAzioH37Ol+Py36W/cKqIAg4bd5o0Qf45+ht5L2WsL91D+DbY/O737MHL1dOTaVsgBRx9GY/CL/ADYzWWhvaUsZ90D8KwGlfLv3X9W5JZcxRw5EU8QJ4q3a6XukUkHe3QDu2SNp1LHY7jGI4ZtbpAuTSr6bUJ29jOKOAosji9+mb5flxjtO4ktERbtEGbpKlsGZU4jhM4ARNmdANmZM66qYbtiwKOCfN7y/fKdwcKC6B2q9ugLdon9JRTHU7iOI7AVOf1uDSXdpcCjodDnYabMRVjzHR1JTRHHvKQm1BRMKtxCmU4he9gquvqwTLp9fJFDzSwLVHAcWNBV0+J7MIQs5/LRB5ykYeWtn0IMipxCqdQpp8RUJ/1stszd+JBth8K2BLM6SmVSC4MMv/JFLRGHlqgJbJt8ThkVKMSVTiFcoS0GXcj3E534iX6pIATwanujptxh3lrfA4HctAKzdEcrQPva4wDDajCd/gOFahEyHvod8jznHO4opkCtjjzC+QS+TZjCz/0HewWaIFsZCMbWXGJBtKEatSgGtWoQlUoTrIvW+WFkjt5I1dRwDbk3c6OQmksrolEFtMMRcrZyEJGVBKU16MONYpoqxGRZVBV+Fha4lg6/hDbAwVsS6anth6JQnksBkb2saUjDWlI9/nnBJAGwAkngFQADqQAaIQHQINyVA+gCfWoQx3qUY+68/8iuvRJxmYsxdL81ckes4oCTpTecUcUohCjkZvgN3oKn0pLGpdNPMJnTgEnIAt6eEbJIzEKfROs7vdhNTZgVfFXXMVMASeDRW4hD8MoaSRGWW7A2QyN2Cytxip5pesknykFnIS8kZE9VB6GAdJAFNhGymexQ96CrdL66i+55Y8CJudsstPZtbEAQ6R+KEAfC+5EPIrt0g5skDZ4diVfEjEKmJhgVvP0/p4CRzd0l7uhO9rFTbKl2C+VYj92pG295TSfCwVMQnKzM7s7vxdzV7RFHrKi8DXVKMMxHDgn2qbSs/vpHlPAJDrudqYztyHXkYt8KdeTK+VKuXIuUuFACwCZyADQAg6kIgfAGTTAgyoAZ1ELoAoeNEhlcplc5ijznJJOecocp6rLKFdCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghseH/A/k7YGG25EzXAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE5LTA4LTI3VDE2OjMwOjU3KzAwOjAw3TkAeAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOS0wOC0yN1QxNjozMDo1NyswMDowMKxkuMQAAAAASUVORK5CYII=';
1501
+ static getRequired(column) {
1502
+ return typeof (column.isRequired) === 'function' ? column.isRequired() : (column.isRequired ?? false);
1503
+ }
1504
+ static getHeaderColumns(row, index, buttons) {
1505
+ let displayColumn = row.map(c => c.columnDef);
1506
+ if (index === 0 && buttons && buttons.length > 0) {
1507
+ displayColumn = displayColumn.concat(buttons.map(b => b.columnDef));
1508
+ }
1509
+ return displayColumn;
1510
+ }
1511
+ static toggleSelectAll(values, $event) {
1512
+ const checked = $event.$event.checked;
1513
+ values.forEach(v => {
1514
+ v.checked = checked;
1515
+ });
1516
+ if ($event.columnChange.onHeaderCellValueChange) {
1517
+ $event.columnChange.onHeaderCellValueChange(checked);
1518
+ }
1519
+ return checked;
1520
+ }
1497
1521
  static displayHeaderName(column, moduleName) {
1498
1522
  if (typeof (column.header) === 'string') {
1499
1523
  return moduleName + '.table.header.' + column.header;
@@ -1579,6 +1603,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
1579
1603
  args: [{ providedIn: 'root' }]
1580
1604
  }] });
1581
1605
 
1606
+ class CvaTableHeaderCellComponent {
1607
+ TableService = TableService;
1608
+ ColumnTypeEnum = ColumnTypeEnum;
1609
+ moduleName = '';
1610
+ column = new ColumnModel();
1611
+ selectAllChecked = false;
1612
+ changeSelectAll = new EventEmitter();
1613
+ ngOnChanges(changes) {
1614
+ if ('selectAllChecked' in changes) {
1615
+ this.selectAllChecked = changes['selectAllChecked'].currentValue;
1616
+ }
1617
+ }
1618
+ onSelectAllChange($event) {
1619
+ this.changeSelectAll.emit({ $event, columnChange: this.column });
1620
+ }
1621
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableHeaderCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1622
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaTableHeaderCellComponent, isStandalone: false, selector: "cva-table-header-cell", inputs: { moduleName: "moduleName", column: "column", selectAllChecked: "selectAllChecked" }, outputs: { changeSelectAll: "changeSelectAll" }, usesOnChanges: true, ngImport: i0, template: `
1623
+ <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
1624
+ fxLayout="row"
1625
+ [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
1626
+ <div class="header-text-area">
1627
+ {{ TableService.displayHeaderName(column, moduleName) | translate }}
1628
+ <span style="color: red">{{ TableService.getRequired(column) ? '*' : '' }}</span>
1629
+ </div>
1630
+ <mat-checkbox
1631
+ *ngIf="TableService.getColumnType(column, null)===ColumnTypeEnum.CHECKBOX && !column.isNotShowHeaderCheckbox"
1632
+ color="primary" class="box-select-all margin-right-5"
1633
+ [(ngModel)]="selectAllChecked"
1634
+ (change)="onSelectAllChange($event)">
1635
+ </mat-checkbox>
1636
+ </div>
1637
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
1638
+ }
1639
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableHeaderCellComponent, decorators: [{
1640
+ type: Component,
1641
+ args: [{
1642
+ selector: 'cva-table-header-cell',
1643
+ standalone: false,
1644
+ template: `
1645
+ <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
1646
+ fxLayout="row"
1647
+ [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
1648
+ <div class="header-text-area">
1649
+ {{ TableService.displayHeaderName(column, moduleName) | translate }}
1650
+ <span style="color: red">{{ TableService.getRequired(column) ? '*' : '' }}</span>
1651
+ </div>
1652
+ <mat-checkbox
1653
+ *ngIf="TableService.getColumnType(column, null)===ColumnTypeEnum.CHECKBOX && !column.isNotShowHeaderCheckbox"
1654
+ color="primary" class="box-select-all margin-right-5"
1655
+ [(ngModel)]="selectAllChecked"
1656
+ (change)="onSelectAllChange($event)">
1657
+ </mat-checkbox>
1658
+ </div>
1659
+ `,
1660
+ }]
1661
+ }], propDecorators: { moduleName: [{
1662
+ type: Input
1663
+ }], column: [{
1664
+ type: Input
1665
+ }], selectAllChecked: [{
1666
+ type: Input
1667
+ }], changeSelectAll: [{
1668
+ type: Output
1669
+ }] } });
1670
+
1582
1671
  class ValidatorService {
1583
1672
  static invalid(control) {
1584
1673
  if (!control || !control.dirty) {
@@ -1797,7 +1886,7 @@ class ValidatorService {
1797
1886
  required: ValidatorService.getRequired(column),
1798
1887
  maxLength: column.max ? column.max(row) : undefined,
1799
1888
  minLength: column.min ? column.min(row) : undefined,
1800
- pattern: undefined,
1889
+ pattern: column.pattern ? column.pattern : undefined,
1801
1890
  }));
1802
1891
  }
1803
1892
  else if (columnType === ColumnTypeEnum.LIVE_SEARCHING) {
@@ -2447,6 +2536,10 @@ class CvaTableComponent {
2447
2536
  config;
2448
2537
  cdRef;
2449
2538
  loaderService;
2539
+ ColumnTypeEnum = ColumnTypeEnum;
2540
+ AlignEnum = AlignEnum;
2541
+ IconTypeEnum = IconTypeEnum;
2542
+ TableService = TableService;
2450
2543
  moduleName = '';
2451
2544
  varPaging;
2452
2545
  results = new MatTableDataSource([]);
@@ -2454,6 +2547,7 @@ class CvaTableComponent {
2454
2547
  buttons = [];
2455
2548
  showTotalPages = 5;
2456
2549
  expandHeaderButton;
2550
+ superHeaders = [];
2457
2551
  pageSizeOptions;
2458
2552
  pagingChange = new EventEmitter(true);
2459
2553
  clickAction = new EventEmitter();
@@ -2486,28 +2580,6 @@ class CvaTableComponent {
2486
2580
  this.varPaging = value;
2487
2581
  }
2488
2582
  }
2489
- get displayedColumns() {
2490
- let columnsDef = this.columns.map(c => c.columnDef);
2491
- if (this.buttons) {
2492
- columnsDef = columnsDef.concat(this.buttons.map(b => b.columnDef));
2493
- }
2494
- // if (!!this.expandHeaderButton) {
2495
- // columnsDef = columnsDef.concat(this.expandHeaderButton.columnDef);
2496
- // }
2497
- return columnsDef;
2498
- }
2499
- get ColumnTypes() {
2500
- return ColumnTypeEnum;
2501
- }
2502
- get IconTypes() {
2503
- return IconTypeEnum;
2504
- }
2505
- get AlignEnum() {
2506
- return AlignEnum;
2507
- }
2508
- get TableService() {
2509
- return TableService;
2510
- }
2511
2583
  isExpandColumn(col) {
2512
2584
  return !!col.isExpandOptionColumn ? col.isExpandOptionColumn() : false;
2513
2585
  }
@@ -2546,14 +2618,6 @@ class CvaTableComponent {
2546
2618
  onDisplayCell(column, cell) {
2547
2619
  return TableService.onDisplayCell(column, cell) && !this.isExpandColumn(column);
2548
2620
  }
2549
- toggleSelectAll(val, col) {
2550
- this.results.data.forEach(v => {
2551
- v.checked = val.checked;
2552
- });
2553
- if (col.onHeaderCellValueChange) {
2554
- col.onHeaderCellValueChange(val.checked);
2555
- }
2556
- }
2557
2621
  toggleSelect(val, result, column) {
2558
2622
  let count = 0;
2559
2623
  this.results.data.forEach(v => {
@@ -2567,7 +2631,7 @@ class CvaTableComponent {
2567
2631
  }
2568
2632
  }
2569
2633
  ngAfterViewChecked() {
2570
- this.getHeaderButtonColspan();
2634
+ this.updateHeaderButtonColspan();
2571
2635
  this.cdRef.detectChanges();
2572
2636
  }
2573
2637
  hasData() {
@@ -2586,9 +2650,8 @@ class CvaTableComponent {
2586
2650
  this.getPage({ pageIndex: this.goToPageNumber - 1, pageSize: this.varPaging.pageSize });
2587
2651
  }
2588
2652
  }
2589
- getHeaderButtonColspan() {
2653
+ updateHeaderButtonColspan() {
2590
2654
  this.buttonColspan = TableService.getHeaderButtonColspan(this.buttons, this.results.data);
2591
- return this.buttonColspan;
2592
2655
  }
2593
2656
  onChangeGoToPageNumber($event) {
2594
2657
  if ($event === null || Number.isNaN($event) || !Number.isSafeInteger($event)) {
@@ -2607,201 +2670,212 @@ class CvaTableComponent {
2607
2670
  }
2608
2671
  }
2609
2672
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableComponent, deps: [{ token: InjectTokenNextSolutionsConfig }, { token: i0.ChangeDetectorRef }, { token: LoaderService }], target: i0.ɵɵFactoryTarget.Component });
2610
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaTableComponent, isStandalone: false, selector: "cva-table", inputs: { moduleName: "moduleName", results: "results", columns: "columns", buttons: "buttons", showTotalPages: "showTotalPages", expandHeaderButton: "expandHeaderButton", paging: "paging" }, outputs: { pagingChange: "pagingChange", clickAction: "clickAction", onRowClickAction: "onRowClickAction", onChangeDisplayColumn: "onChangeDisplayColumn" }, providers: [
2673
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaTableComponent, isStandalone: false, selector: "cva-table", inputs: { moduleName: "moduleName", results: "results", columns: "columns", buttons: "buttons", showTotalPages: "showTotalPages", expandHeaderButton: "expandHeaderButton", superHeaders: "superHeaders", paging: "paging" }, outputs: { pagingChange: "pagingChange", clickAction: "clickAction", onRowClickAction: "onRowClickAction", onChangeDisplayColumn: "onChangeDisplayColumn" }, providers: [
2611
2674
  { provide: MatPaginatorIntl, useClass: MultiLanguageTablePaginator },
2612
2675
  ], ngImport: i0, template: `
2613
- <div class="table-responsive">
2614
- <ng-container *ngIf="!!expandHeaderButton">
2615
- <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2616
- [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2617
- </cva-header-expand-button>
2618
- </ng-container>
2619
- <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2620
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2621
- <ng-container *matHeaderCellDef>
2622
- <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2623
- *ngIf="onDisplayHeaderCell(column)"
2624
- [ngSwitch]="TableService.getColumnType(column, null)">
2625
- <div fxLayout="row" *ngSwitchDefault
2626
- class="viewData"
2627
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2628
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2629
- {{ TableService.displayHeaderName(column, moduleName) | translate }}
2630
- </div>
2631
- <mat-checkbox *ngSwitchCase="ColumnTypes.CHECKBOX"
2632
- color="primary" class="box-select-all" [(ngModel)]="selectAllChecked"
2633
- (change)="toggleSelectAll($event, column)"
2634
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2635
- </mat-checkbox>
2636
- </th>
2637
- </ng-container>
2638
- <ng-container *matCellDef="let result;">
2639
- <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2640
- *ngIf="onDisplayCell(column, result)"
2641
- [ngSwitch]="TableService.getColumnType(column, result)">
2642
- <div title="{{column.title(result)}}" *ngSwitchDefault
2643
- class="{{TableService.getColumnClassName(column, result)}} viewData"
2644
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2645
- {{ column.cell(result) }}
2646
- </div>
2647
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
2648
- <div *ngIf="!!column.button"
2649
- class="{{TableService.getColumnClassName(column, result)}}"
2650
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2651
- (click)="$event.stopPropagation()">
2652
- <button mat-icon-button color="{{column.button.color}}"
2653
- (click)="onClick(column.button.click, result)"
2654
- disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2655
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2656
- class="{{column.button.className}}" [ngSwitch]="TableService.getIconType(column.button)">
2657
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
2658
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
2659
- </button>
2660
- </div>
2661
- </ng-container>
2662
- <div class="link viewData"
2663
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2664
- *ngSwitchCase="ColumnTypes.LINK"
2665
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2666
- title="{{column.title(result)}}">
2667
- <a [routerLink]="[column.link(result)]">{{ column.cell(result) }}</a>
2668
- </div>
2676
+ <div class="table-responsive">
2677
+ <ng-container *ngIf="!!expandHeaderButton">
2678
+ <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2679
+ [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2680
+ </cva-header-expand-button>
2681
+ </ng-container>
2682
+ <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2683
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2684
+ <ng-container *matHeaderCellDef>
2685
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2686
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
2687
+ *ngIf="onDisplayHeaderCell(column)">
2688
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
2689
+ [selectAllChecked]="selectAllChecked"
2690
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
2691
+ </cva-table-header-cell>
2692
+ </th>
2693
+ </ng-container>
2694
+ <ng-container *matCellDef="let result;">
2695
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2696
+ *ngIf="onDisplayCell(column, result)"
2697
+ [ngSwitch]="TableService.getColumnType(column, result)">
2698
+ <div title="{{column.title(result)}}" *ngSwitchDefault
2699
+ class="{{TableService.getColumnClassName(column, result)}} viewData"
2700
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2701
+ {{ column.cell(result) }}
2702
+ </div>
2703
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
2704
+ <div *ngIf="!!column.button"
2705
+ class="{{TableService.getColumnClassName(column, result)}}"
2706
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2707
+ (click)="$event.stopPropagation()">
2708
+ <button mat-icon-button color="{{column.button.color}}"
2709
+ (click)="onClick(column.button.click, result)"
2710
+ disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2711
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2712
+ class="{{column.button.className}}"
2713
+ [ngSwitch]="TableService.getIconType(column.button)">
2714
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
2715
+ </mat-icon>
2716
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
2717
+ </button>
2718
+ </div>
2719
+ </ng-container>
2720
+ <div class="link viewData"
2721
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2722
+ *ngSwitchCase="ColumnTypeEnum.LINK"
2723
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2724
+ title="{{column.title(result)}}">
2725
+ <a [routerLink]="[column?.link(result)]">{{ column.cell(result) }}</a>
2726
+ </div>
2669
2727
 
2670
- <div class="label-status viewData"
2671
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2672
- *ngSwitchCase="ColumnTypes.STYLE_CSS"
2673
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2674
- title="{{column.title(result)}}">
2675
- <span [style]="column.style(result)">{{ column.cell(result) }}</span>
2676
- </div>
2728
+ <div class="label-status viewData"
2729
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2730
+ *ngSwitchCase="ColumnTypeEnum.STYLE_CSS"
2731
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2732
+ title="{{column.title(result)}}">
2733
+ <span [style]="column?.style(result)">{{ column.cell(result) }}</span>
2734
+ </div>
2677
2735
 
2678
- <div class="img-view viewData"
2679
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2680
- *ngSwitchCase="ColumnTypes.IMG"
2681
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2682
- title="{{column.title(result)}}">
2683
- <img [src]="column.cell(result) | secure | async" #imgRef
2684
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2685
- </div>
2686
- <div class="img-view viewData"
2687
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2688
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
2689
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2690
- title="{{column.title(result)}}">
2691
- <img [src]="column.cell(result)" #imgRef
2692
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2693
- </div>
2694
- <div *ngSwitchCase="ColumnTypes.BASE64"
2695
- class="img-view viewData"
2696
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2697
- title="{{column.title(result)}}">
2698
- <img [src]="'data:image/png;base64,'+column.cell(result)"
2699
- #base64ImgRef
2700
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2701
- </div>
2702
- <ng-container *ngSwitchCase="ColumnTypes.CHECKBOX">
2703
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2704
- *ngIf="column.display ? column.display(result) : true"
2705
- [disabled]="column.disabled ? column.disabled(result) : false"
2706
- (change)="toggleSelect($event, result, column)"
2707
- [fxLayoutAlign]="TableService.alignCellContent(column)">
2708
- </mat-checkbox>
2709
- </ng-container>
2710
- </td>
2711
- </ng-container>
2712
- </ng-container>
2713
-
2714
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2715
- <ng-container *matHeaderCellDef="let header">
2716
- <!-- [fxFlex]="(isButtonHeader(button) ? headerButtonWidthDefault : getHeaderButtonWidth(i)) + 'px' "-->
2717
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
2718
- <th mat-header-cell [ngClass]="button.className"
2719
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2720
- (click)="$event.stopPropagation()"
2721
- [attr.colspan]="buttonColspan"
2722
- >
2723
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2724
- <button mat-icon-button
2725
- class="{{button.className}}"
2726
- *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2727
- [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2728
- color="{{$any(btnHeader).color}}"
2729
- (click)="onClick($any(btnHeader).click, null)"
2730
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2731
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
2732
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
2733
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2734
- </button>
2735
- </ng-container>
2736
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2737
- <div title="{{$any(btnHeader) | translate}}"
2738
- class="viewData"
2739
- fxLayout="row"
2740
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2741
- {{ $any(btnHeader) | translate }}
2742
- </div>
2743
- </ng-container>
2744
- </th>
2736
+ <div class="img-view viewData"
2737
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2738
+ *ngSwitchCase="ColumnTypeEnum.IMG"
2739
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2740
+ title="{{column.title(result)}}">
2741
+ <img [src]="column.cell(result) | secure | async" #imgRef
2742
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2743
+ </div>
2744
+ <div class="img-view viewData"
2745
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2746
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
2747
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2748
+ title="{{column.title(result)}}">
2749
+ <img [src]="column.cell(result)" #imgRef
2750
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2751
+ </div>
2752
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
2753
+ class="img-view viewData"
2754
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2755
+ title="{{column.title(result)}}">
2756
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
2757
+ #base64ImgRef
2758
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
2759
+ alt=""/>
2760
+ </div>
2761
+ <ng-container *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
2762
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2763
+ *ngIf="column.display ? column.display(result) : true"
2764
+ [disabled]="column.disabled ? column.disabled(result) : false"
2765
+ (change)="toggleSelect($event, result, column)"
2766
+ [fxLayoutAlign]="TableService.alignCellContent(column)">
2767
+ </mat-checkbox>
2768
+ </ng-container>
2769
+ </td>
2770
+ </ng-container>
2771
+ </ng-container>
2745
2772
 
2746
- </ng-container>
2747
- <ng-container *matCellDef="let cell">
2748
- <!-- [fxFlex]="headerButtonWidthDefault + 'px'"-->
2749
- <td mat-cell [ngClass]="button.className"
2750
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
2751
- (click)="$event.stopPropagation()">
2752
- <button mat-icon-button color="{{button.color}}"
2753
- (click)="onClick(button.click, cell)"
2754
- disabled="{{button.disabled ? button.disabled(cell) : false}}"
2755
- matTooltip="{{(button.title ? button.title : '') | translate}}"
2756
- class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2757
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2758
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
2759
- </button>
2760
- </td>
2761
- </ng-container>
2762
- </ng-container>
2773
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2774
+ <ng-container *matHeaderCellDef="let header">
2775
+ <th mat-header-cell [ngClass]="button.className"
2776
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2777
+ (click)="$event.stopPropagation()"
2778
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
2779
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2780
+ <button mat-icon-button
2781
+ class="{{button.className}}"
2782
+ *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2783
+ [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2784
+ color="{{$any(btnHeader).color}}"
2785
+ (click)="onClick($any(btnHeader).click, null)"
2786
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2787
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
2788
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
2789
+ </mat-icon>
2790
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2791
+ </button>
2792
+ </ng-container>
2793
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2794
+ <div title="{{$any(btnHeader) | translate}}"
2795
+ class="viewData"
2796
+ fxLayout="row"
2797
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2798
+ {{ $any(btnHeader) | translate }}
2799
+ </div>
2800
+ </ng-container>
2801
+ </th>
2802
+ </ng-container>
2803
+ <ng-container *matCellDef="let cell">
2804
+ <td mat-cell [ngClass]="button.className"
2805
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
2806
+ (click)="$event.stopPropagation()">
2807
+ <button mat-icon-button color="{{button.color}}"
2808
+ (click)="onClick(button.click, cell)"
2809
+ disabled="{{button.disabled ? button.disabled(cell) : false}}"
2810
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
2811
+ class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2812
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2813
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
2814
+ </button>
2815
+ </td>
2816
+ </ng-container>
2817
+ </ng-container>
2763
2818
 
2819
+ <ng-container *ngFor="let row of superHeaders">
2820
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
2821
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
2822
+ <th mat-header-cell *matHeaderCellDef
2823
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
2824
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
2825
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
2826
+ [selectAllChecked]="selectAllChecked"
2827
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
2828
+ </cva-table-header-cell>
2829
+ </th>
2830
+ </ng-container>
2831
+ </ng-container>
2832
+ </ng-container>
2764
2833
 
2765
- <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
2766
- <tr mat-row *matRowDef="let result; columns: displayedColumns; let i = index"
2767
- [ngClass]="result.className"
2768
- (click)="onRowClick(result, i)"></tr>
2769
- </table>
2770
- <div *ngIf="!(loaderService.isLoading | async)">
2771
- <div class="paging"
2772
- *ngIf="hasData()"
2773
- fxLayout fxLayoutAlign="space-between center">
2774
- <mat-paginator style-paginator
2775
- [showTotalPages]="showTotalPages"
2776
- [paging]="varPaging"
2777
- (pagingChangeEvent)="getPage($event)"
2778
- [length]="varPaging.totalElements"
2779
- [pageSize]="varPaging.pageSize"
2780
- [pageSizeOptions]="pageSizeOptions"
2781
- [pageIndex]="varPaging.pageNumber - 1">
2782
- </mat-paginator>
2783
- <div class="go-to-page"
2784
- fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2785
- <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2786
- <cva-counter-input [(ngModel)]="goToPageNumber"
2787
- (ngModelChange)="onChangeGoToPageNumber($event)"
2788
- (onEnter)="goToPage()"
2789
- [max]="getTotalPage() ? getTotalPage() : 1"
2790
- [min]="1"
2791
- [isFloatLabel]="false"
2792
- [errorMessages]="errorMsg"
2793
- ></cva-counter-input>
2794
- <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2795
- <button mat-flat-button
2796
- [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2797
- (click)="goToPage()">{{ 'common.go' | translate }}
2798
- </button>
2799
- </div>
2800
- <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
2834
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
2835
+ <tr mat-header-row *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons)"></tr>
2836
+ </ng-container>
2837
+ <tr mat-header-row
2838
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons)"></tr>
2839
+ <tr mat-row
2840
+ *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons); let i = index"
2841
+ [ngClass]="result.className"
2842
+ (click)="onRowClick(result, i)"></tr>
2843
+ </table>
2844
+ <div *ngIf="!(loaderService.isLoading | async)">
2845
+ <div class="paging"
2846
+ *ngIf="hasData()"
2847
+ fxLayout fxLayoutAlign="space-between center">
2848
+ <mat-paginator style-paginator
2849
+ [showTotalPages]="showTotalPages"
2850
+ [paging]="varPaging"
2851
+ (pagingChangeEvent)="getPage($event)"
2852
+ [length]="varPaging.totalElements"
2853
+ [pageSize]="varPaging.pageSize"
2854
+ [pageSizeOptions]="pageSizeOptions"
2855
+ [pageIndex]="varPaging.pageNumber - 1">
2856
+ </mat-paginator>
2857
+ <div class="go-to-page"
2858
+ fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2859
+ <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2860
+ <cva-counter-input [(ngModel)]="goToPageNumber"
2861
+ (ngModelChange)="onChangeGoToPageNumber($event)"
2862
+ (onEnter)="goToPage()"
2863
+ [max]="getTotalPage() ? getTotalPage() : 1"
2864
+ [min]="1"
2865
+ [isFloatLabel]="false"
2866
+ [errorMessages]="errorMsg"
2867
+ ></cva-counter-input>
2868
+ <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2869
+ <button mat-flat-button
2870
+ [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2871
+ (click)="goToPage()">{{ 'common.go' | translate }}
2872
+ </button>
2873
+ </div>
2874
+ <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
2875
+ </div>
2876
+ </div>
2801
2877
  </div>
2802
- </div>
2803
- </div>
2804
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i1$5.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "directive", type: StylePaginatorDirective, selector: "[style-paginator]", inputs: ["showTotalPages", "paging"], outputs: ["pagingChangeEvent"] }, { kind: "component", type: CvaHeaderExpandButtonComponent, selector: "cva-header-expand-button", inputs: ["expandHeaderButton", "columns", "moduleName"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
2878
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i1$5.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaTableHeaderCellComponent, selector: "cva-table-header-cell", inputs: ["moduleName", "column", "selectAllChecked"], outputs: ["changeSelectAll"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "directive", type: StylePaginatorDirective, selector: "[style-paginator]", inputs: ["showTotalPages", "paging"], outputs: ["pagingChangeEvent"] }, { kind: "component", type: CvaHeaderExpandButtonComponent, selector: "cva-header-expand-button", inputs: ["expandHeaderButton", "columns", "moduleName"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
2805
2879
  }
2806
2880
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaTableComponent, decorators: [{
2807
2881
  type: Component,
@@ -2809,198 +2883,209 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
2809
2883
  selector: 'cva-table',
2810
2884
  standalone: false,
2811
2885
  template: `
2812
- <div class="table-responsive">
2813
- <ng-container *ngIf="!!expandHeaderButton">
2814
- <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2815
- [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2816
- </cva-header-expand-button>
2817
- </ng-container>
2818
- <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2819
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2820
- <ng-container *matHeaderCellDef>
2821
- <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2822
- *ngIf="onDisplayHeaderCell(column)"
2823
- [ngSwitch]="TableService.getColumnType(column, null)">
2824
- <div fxLayout="row" *ngSwitchDefault
2825
- class="viewData"
2826
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2827
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2828
- {{ TableService.displayHeaderName(column, moduleName) | translate }}
2829
- </div>
2830
- <mat-checkbox *ngSwitchCase="ColumnTypes.CHECKBOX"
2831
- color="primary" class="box-select-all" [(ngModel)]="selectAllChecked"
2832
- (change)="toggleSelectAll($event, column)"
2833
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
2834
- </mat-checkbox>
2835
- </th>
2836
- </ng-container>
2837
- <ng-container *matCellDef="let result;">
2838
- <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2839
- *ngIf="onDisplayCell(column, result)"
2840
- [ngSwitch]="TableService.getColumnType(column, result)">
2841
- <div title="{{column.title(result)}}" *ngSwitchDefault
2842
- class="{{TableService.getColumnClassName(column, result)}} viewData"
2843
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2844
- {{ column.cell(result) }}
2845
- </div>
2846
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
2847
- <div *ngIf="!!column.button"
2848
- class="{{TableService.getColumnClassName(column, result)}}"
2849
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2850
- (click)="$event.stopPropagation()">
2851
- <button mat-icon-button color="{{column.button.color}}"
2852
- (click)="onClick(column.button.click, result)"
2853
- disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2854
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2855
- class="{{column.button.className}}" [ngSwitch]="TableService.getIconType(column.button)">
2856
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
2857
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
2858
- </button>
2859
- </div>
2860
- </ng-container>
2861
- <div class="link viewData"
2862
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2863
- *ngSwitchCase="ColumnTypes.LINK"
2864
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2865
- title="{{column.title(result)}}">
2866
- <a [routerLink]="[column.link(result)]">{{ column.cell(result) }}</a>
2867
- </div>
2886
+ <div class="table-responsive">
2887
+ <ng-container *ngIf="!!expandHeaderButton">
2888
+ <cva-header-expand-button [moduleName]="moduleName" [expandHeaderButton]="expandHeaderButton"
2889
+ [columns]="columns" (onChange)="this.onChangeDisplayColumn.emit($event)">
2890
+ </cva-header-expand-button>
2891
+ </ng-container>
2892
+ <table mat-table #table [dataSource]="results" class="mat-elevation-z8 cva-table">
2893
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
2894
+ <ng-container *matHeaderCellDef>
2895
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
2896
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
2897
+ *ngIf="onDisplayHeaderCell(column)">
2898
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
2899
+ [selectAllChecked]="selectAllChecked"
2900
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
2901
+ </cva-table-header-cell>
2902
+ </th>
2903
+ </ng-container>
2904
+ <ng-container *matCellDef="let result;">
2905
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column, result)"
2906
+ *ngIf="onDisplayCell(column, result)"
2907
+ [ngSwitch]="TableService.getColumnType(column, result)">
2908
+ <div title="{{column.title(result)}}" *ngSwitchDefault
2909
+ class="{{TableService.getColumnClassName(column, result)}} viewData"
2910
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
2911
+ {{ column.cell(result) }}
2912
+ </div>
2913
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
2914
+ <div *ngIf="!!column.button"
2915
+ class="{{TableService.getColumnClassName(column, result)}}"
2916
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2917
+ (click)="$event.stopPropagation()">
2918
+ <button mat-icon-button color="{{column.button.color}}"
2919
+ (click)="onClick(column.button.click, result)"
2920
+ disabled="{{column.button.disabled ? column.button.disabled(result) : false}}"
2921
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
2922
+ class="{{column.button.className}}"
2923
+ [ngSwitch]="TableService.getIconType(column.button)">
2924
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
2925
+ </mat-icon>
2926
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
2927
+ </button>
2928
+ </div>
2929
+ </ng-container>
2930
+ <div class="link viewData"
2931
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2932
+ *ngSwitchCase="ColumnTypeEnum.LINK"
2933
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2934
+ title="{{column.title(result)}}">
2935
+ <a [routerLink]="[column?.link(result)]">{{ column.cell(result) }}</a>
2936
+ </div>
2868
2937
 
2869
- <div class="label-status viewData"
2870
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2871
- *ngSwitchCase="ColumnTypes.STYLE_CSS"
2872
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2873
- title="{{column.title(result)}}">
2874
- <span [style]="column.style(result)">{{ column.cell(result) }}</span>
2875
- </div>
2938
+ <div class="label-status viewData"
2939
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2940
+ *ngSwitchCase="ColumnTypeEnum.STYLE_CSS"
2941
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2942
+ title="{{column.title(result)}}">
2943
+ <span [style]="column?.style(result)">{{ column.cell(result) }}</span>
2944
+ </div>
2876
2945
 
2877
- <div class="img-view viewData"
2878
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2879
- *ngSwitchCase="ColumnTypes.IMG"
2880
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2881
- title="{{column.title(result)}}">
2882
- <img [src]="column.cell(result) | secure | async" #imgRef
2883
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2884
- </div>
2885
- <div class="img-view viewData"
2886
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2887
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
2888
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2889
- title="{{column.title(result)}}">
2890
- <img [src]="column.cell(result)" #imgRef
2891
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2892
- </div>
2893
- <div *ngSwitchCase="ColumnTypes.BASE64"
2894
- class="img-view viewData"
2895
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2896
- title="{{column.title(result)}}">
2897
- <img [src]="'data:image/png;base64,'+column.cell(result)"
2898
- #base64ImgRef
2899
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
2900
- </div>
2901
- <ng-container *ngSwitchCase="ColumnTypes.CHECKBOX">
2902
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2903
- *ngIf="column.display ? column.display(result) : true"
2904
- [disabled]="column.disabled ? column.disabled(result) : false"
2905
- (change)="toggleSelect($event, result, column)"
2906
- [fxLayoutAlign]="TableService.alignCellContent(column)">
2907
- </mat-checkbox>
2908
- </ng-container>
2909
- </td>
2910
- </ng-container>
2911
- </ng-container>
2946
+ <div class="img-view viewData"
2947
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2948
+ *ngSwitchCase="ColumnTypeEnum.IMG"
2949
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2950
+ title="{{column.title(result)}}">
2951
+ <img [src]="column.cell(result) | secure | async" #imgRef
2952
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2953
+ </div>
2954
+ <div class="img-view viewData"
2955
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
2956
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
2957
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2958
+ title="{{column.title(result)}}">
2959
+ <img [src]="column.cell(result)" #imgRef
2960
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
2961
+ </div>
2962
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
2963
+ class="img-view viewData"
2964
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
2965
+ title="{{column.title(result)}}">
2966
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
2967
+ #base64ImgRef
2968
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
2969
+ alt=""/>
2970
+ </div>
2971
+ <ng-container *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
2972
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
2973
+ *ngIf="column.display ? column.display(result) : true"
2974
+ [disabled]="column.disabled ? column.disabled(result) : false"
2975
+ (change)="toggleSelect($event, result, column)"
2976
+ [fxLayoutAlign]="TableService.alignCellContent(column)">
2977
+ </mat-checkbox>
2978
+ </ng-container>
2979
+ </td>
2980
+ </ng-container>
2981
+ </ng-container>
2912
2982
 
2913
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2914
- <ng-container *matHeaderCellDef="let header">
2915
- <!-- [fxFlex]="(isButtonHeader(button) ? headerButtonWidthDefault : getHeaderButtonWidth(i)) + 'px' "-->
2916
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
2917
- <th mat-header-cell [ngClass]="button.className"
2918
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2919
- (click)="$event.stopPropagation()"
2920
- [attr.colspan]="buttonColspan"
2921
- >
2922
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2923
- <button mat-icon-button
2924
- class="{{button.className}}"
2925
- *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2926
- [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2927
- color="{{$any(btnHeader).color}}"
2928
- (click)="onClick($any(btnHeader).click, null)"
2929
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2930
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
2931
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
2932
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
2933
- </button>
2934
- </ng-container>
2935
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
2936
- <div title="{{$any(btnHeader) | translate}}"
2937
- class="viewData"
2938
- fxLayout="row"
2939
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
2940
- {{ $any(btnHeader) | translate }}
2941
- </div>
2942
- </ng-container>
2943
- </th>
2944
-
2945
- </ng-container>
2946
- <ng-container *matCellDef="let cell">
2947
- <!-- [fxFlex]="headerButtonWidthDefault + 'px'"-->
2948
- <td mat-cell [ngClass]="button.className"
2949
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
2950
- (click)="$event.stopPropagation()">
2951
- <button mat-icon-button color="{{button.color}}"
2952
- (click)="onClick(button.click, cell)"
2953
- disabled="{{button.disabled ? button.disabled(cell) : false}}"
2954
- matTooltip="{{(button.title ? button.title : '') | translate}}"
2955
- class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
2956
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
2957
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
2958
- </button>
2959
- </td>
2960
- </ng-container>
2961
- </ng-container>
2983
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
2984
+ <ng-container *matHeaderCellDef="let header">
2985
+ <th mat-header-cell [ngClass]="button.className"
2986
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
2987
+ (click)="$event.stopPropagation()"
2988
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
2989
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
2990
+ <button mat-icon-button
2991
+ class="{{button.className}}"
2992
+ *ngIf="((btnHeader && btnHeader.display) ? btnHeader.display(header) : false) "
2993
+ [disabled]="((btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false) "
2994
+ color="{{$any(btnHeader).color}}"
2995
+ (click)="onClick($any(btnHeader).click, null)"
2996
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
2997
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
2998
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
2999
+ </mat-icon>
3000
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
3001
+ </button>
3002
+ </ng-container>
3003
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
3004
+ <div title="{{$any(btnHeader) | translate}}"
3005
+ class="viewData"
3006
+ fxLayout="row"
3007
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
3008
+ {{ $any(btnHeader) | translate }}
3009
+ </div>
3010
+ </ng-container>
3011
+ </th>
3012
+ </ng-container>
3013
+ <ng-container *matCellDef="let cell">
3014
+ <td mat-cell [ngClass]="button.className"
3015
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
3016
+ (click)="$event.stopPropagation()">
3017
+ <button mat-icon-button color="{{button.color}}"
3018
+ (click)="onClick(button.click, cell)"
3019
+ disabled="{{button.disabled ? button.disabled(cell) : false}}"
3020
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
3021
+ class="{{button.className}}" [ngSwitch]="TableService.getIconType(button)">
3022
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
3023
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
3024
+ </button>
3025
+ </td>
3026
+ </ng-container>
3027
+ </ng-container>
2962
3028
 
3029
+ <ng-container *ngFor="let row of superHeaders">
3030
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
3031
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
3032
+ <th mat-header-cell *matHeaderCellDef
3033
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
3034
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
3035
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
3036
+ [selectAllChecked]="selectAllChecked"
3037
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(this.results.data, $event)">
3038
+ </cva-table-header-cell>
3039
+ </th>
3040
+ </ng-container>
3041
+ </ng-container>
3042
+ </ng-container>
2963
3043
 
2964
- <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
2965
- <tr mat-row *matRowDef="let result; columns: displayedColumns; let i = index"
2966
- [ngClass]="result.className"
2967
- (click)="onRowClick(result, i)"></tr>
2968
- </table>
2969
- <div *ngIf="!(loaderService.isLoading | async)">
2970
- <div class="paging"
2971
- *ngIf="hasData()"
2972
- fxLayout fxLayoutAlign="space-between center">
2973
- <mat-paginator style-paginator
2974
- [showTotalPages]="showTotalPages"
2975
- [paging]="varPaging"
2976
- (pagingChangeEvent)="getPage($event)"
2977
- [length]="varPaging.totalElements"
2978
- [pageSize]="varPaging.pageSize"
2979
- [pageSizeOptions]="pageSizeOptions"
2980
- [pageIndex]="varPaging.pageNumber - 1">
2981
- </mat-paginator>
2982
- <div class="go-to-page"
2983
- fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
2984
- <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
2985
- <cva-counter-input [(ngModel)]="goToPageNumber"
2986
- (ngModelChange)="onChangeGoToPageNumber($event)"
2987
- (onEnter)="goToPage()"
2988
- [max]="getTotalPage() ? getTotalPage() : 1"
2989
- [min]="1"
2990
- [isFloatLabel]="false"
2991
- [errorMessages]="errorMsg"
2992
- ></cva-counter-input>
2993
- <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
2994
- <button mat-flat-button
2995
- [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
2996
- (click)="goToPage()">{{ 'common.go' | translate }}
2997
- </button>
2998
- </div>
2999
- <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
3044
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
3045
+ <tr mat-header-row *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons)"></tr>
3046
+ </ng-container>
3047
+ <tr mat-header-row
3048
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons)"></tr>
3049
+ <tr mat-row
3050
+ *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons); let i = index"
3051
+ [ngClass]="result.className"
3052
+ (click)="onRowClick(result, i)"></tr>
3053
+ </table>
3054
+ <div *ngIf="!(loaderService.isLoading | async)">
3055
+ <div class="paging"
3056
+ *ngIf="hasData()"
3057
+ fxLayout fxLayoutAlign="space-between center">
3058
+ <mat-paginator style-paginator
3059
+ [showTotalPages]="showTotalPages"
3060
+ [paging]="varPaging"
3061
+ (pagingChangeEvent)="getPage($event)"
3062
+ [length]="varPaging.totalElements"
3063
+ [pageSize]="varPaging.pageSize"
3064
+ [pageSizeOptions]="pageSizeOptions"
3065
+ [pageIndex]="varPaging.pageNumber - 1">
3066
+ </mat-paginator>
3067
+ <div class="go-to-page"
3068
+ fxLayout fxLayoutGap="0.3rem" fxLayoutAlign="start baseline">
3069
+ <mat-label>{{ 'common.gotopage' | translate }}</mat-label>
3070
+ <cva-counter-input [(ngModel)]="goToPageNumber"
3071
+ (ngModelChange)="onChangeGoToPageNumber($event)"
3072
+ (onEnter)="goToPage()"
3073
+ [max]="getTotalPage() ? getTotalPage() : 1"
3074
+ [min]="1"
3075
+ [isFloatLabel]="false"
3076
+ [errorMessages]="errorMsg"
3077
+ ></cva-counter-input>
3078
+ <mat-label style="white-space: nowrap">{{ '/' + getTotalPage() }}</mat-label>
3079
+ <button mat-flat-button
3080
+ [disabled]="goToPageNumber < 1 || goToPageNumber > getTotalPage()"
3081
+ (click)="goToPage()">{{ 'common.go' | translate }}
3082
+ </button>
3083
+ </div>
3084
+ <h2 *ngIf="!hasData()">{{ 'common.no.records.found' | translate }}</h2>
3085
+ </div>
3086
+ </div>
3000
3087
  </div>
3001
- </div>
3002
- </div>
3003
- `,
3088
+ `,
3004
3089
  providers: [
3005
3090
  { provide: MatPaginatorIntl, useClass: MultiLanguageTablePaginator },
3006
3091
  ],
@@ -3020,6 +3105,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
3020
3105
  type: Input
3021
3106
  }], expandHeaderButton: [{
3022
3107
  type: Input
3108
+ }], superHeaders: [{
3109
+ type: Input
3023
3110
  }], pagingChange: [{
3024
3111
  type: Output
3025
3112
  }], clickAction: [{
@@ -4380,6 +4467,13 @@ class CvaMultiSelectAutocomplete {
4380
4467
  }
4381
4468
  }, 300);
4382
4469
  }
4470
+ else {
4471
+ // Khi đóng mat-select thì clear searchInput
4472
+ if (this.searchInputRef?.nativeElement) {
4473
+ this.searchInputRef.nativeElement.value = '';
4474
+ this.filterItem('');
4475
+ }
4476
+ }
4383
4477
  }
4384
4478
  getItemSize() {
4385
4479
  return this.sizeOfItemsInListByPixels;
@@ -4394,96 +4488,96 @@ class CvaMultiSelectAutocomplete {
4394
4488
  }
4395
4489
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaMultiSelectAutocomplete, deps: [{ token: i1.TranslateService }, { token: i0.Injector }, { token: i1$2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
4396
4490
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaMultiSelectAutocomplete, isStandalone: false, selector: "cva-multi-select-autocomplete", inputs: { placeholder: "placeholder", label: "label", hint: "hint", value: "value", options: "options", disabled: "disabled", errorMessages: "errorMessages", multiple: "multiple", required: "required", isTree: "isTree", treeSymbol: "treeSymbol", sizeOfItemsInListByPixels: "sizeOfItemsInListByPixels", isLabelOutside: "isLabelOutside", isFloatLabel: "isFloatLabel", percentOfLabelOutside: "percentOfLabelOutside", isFormControl: "isFormControl" }, outputs: { selectionChange: "selectionChange", selectedOptionDataChange: "selectedOptionDataChange" }, viewQueries: [{ propertyName: "searchInputRef", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "cdkVirtualScrollViewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
4397
- <!-- css labelOutside trong base.theme-->
4398
- <div class="cva-multi-select-autocomplete"
4399
- [ngClass]="{'labelOutside': !!isLabelOutside, 'float_label': !!isFloatLabel && !isLabelOutside}"
4400
- fxLayout="row" fxLayout.lt-sm="row wrap">
4401
- <mat-label *ngIf="isLabelOutside" class="label_width"
4402
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4403
- <div class="label">
4404
- <div>
4405
- {{ (label ? label : placeholder) | translate }}<span
4406
- class="required-label-outside">{{ !!getRequired() ? '*' : '' }}</span>
4407
- </div>
4408
- </div>
4409
- </mat-label>
4410
- <mat-form-field *ngIf="isShowControl()"
4411
- appearance="outline" [floatLabel]="!!isFloatLabel ? 'always' : 'auto'"
4412
- [hideRequiredMarker]="!isFloatLabel"
4413
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4414
- <mat-label
4415
- *ngIf="!isLabelOutside && !!isFloatLabel">{{ (label ? label : placeholder) | translate }}
4416
- </mat-label>
4417
- <mat-select [disabled]="disabled"
4418
- [placeholder]="placeholder | translate"
4419
- [multiple]="multiple"
4420
- [(ngModel)]="selectedValue"
4421
- [required]="getRequired()"
4422
- (selectionChange)="matSelectionChange($event)"
4423
- (openedChange)="openChange($event)">
4424
- <div class="box-search">
4425
- <mat-checkbox *ngIf="multiple" color="primary" class="box-select-all"
4426
- [(ngModel)]="selectAllChecked"
4427
- (change)="toggleSelectAll($event)"></mat-checkbox>
4428
- <input #searchInput type="text" [ngClass]="{'pl-1': !multiple}"
4429
- (keydown.space)="$event.stopPropagation()"
4430
- (input)="filterItem(searchInput.value)"
4431
- placeholder="{{'btnSearch' | translate}}...">
4432
- <div class="box-search-icon" (click)="filterItem(''); searchInput.value = ''">
4433
- <button mat-icon-button class="search-button">
4434
- <mat-icon class="mat-24" aria-label="Search icon">clear</mat-icon>
4435
- </button>
4436
- </div>
4437
- </div>
4438
- <mat-select-trigger title="{{titleString|translate}}">
4439
- {{ displayString | translate }}
4440
- </mat-select-trigger>
4441
- <cdk-virtual-scroll-viewport [itemSize]="getItemSize()"
4442
- [style.height.px]="getViewPortHeight()">
4443
- <mat-option *cdkVirtualFor="let option of filteredOptions; let i = index"
4444
- [attr.data-optionIndex]="i"
4445
- [disabled]="option.disabled" [value]="option.value"
4446
- [ngClass]="{'tree-mat-option': isTree}"
4447
- title="{{option.displayValue|translate}}"
4448
- (onSelectionChange)="onSelectionChange($event)">
4449
- <div *ngIf="!isTree">{{ option.displayValue | translate }}</div>
4450
- <div *ngIf="!!isTree" class="tree-multiline-mat-option">
4451
- <div mat-line>{{ onDisplayTreeData(option.displayValue, true) }}</div>
4452
- <p mat-line>{{ onDisplayTreeData(option.displayValue, false) }}</p>
4453
- </div>
4454
- </mat-option>
4455
- </cdk-virtual-scroll-viewport>
4456
- <ng-container *ngIf="multiple">
4457
- <ng-container *ngFor="let option of selectedValue; let i = index">
4458
- <mat-option class="selected-options" [value]="option" *ngIf="i===0">
4459
- {{ option }}
4460
- </mat-option>
4491
+ <!-- css labelOutside trong base.theme-->
4492
+ <div class="cva-multi-select-autocomplete"
4493
+ [ngClass]="{'labelOutside': !!isLabelOutside, 'float_label': !!isFloatLabel && !isLabelOutside}"
4494
+ fxLayout="row" fxLayout.lt-sm="row wrap">
4495
+ <mat-label *ngIf="isLabelOutside" class="label_width"
4496
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4497
+ <div class="label">
4498
+ <div>
4499
+ {{ (label ? label : placeholder) | translate }}<span
4500
+ class="required-label-outside">{{ !!getRequired() ? '*' : '' }}</span>
4501
+ </div>
4502
+ </div>
4503
+ </mat-label>
4504
+ <mat-form-field *ngIf="isShowControl()"
4505
+ appearance="outline" [floatLabel]="!!isFloatLabel ? 'always' : 'auto'"
4506
+ [hideRequiredMarker]="!isFloatLabel"
4507
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4508
+ <mat-label
4509
+ *ngIf="!isLabelOutside && !!isFloatLabel">{{ (label ? label : placeholder) | translate }}
4510
+ </mat-label>
4511
+ <mat-select [disabled]="disabled"
4512
+ [placeholder]="placeholder | translate"
4513
+ [multiple]="multiple"
4514
+ [(ngModel)]="selectedValue"
4515
+ [required]="getRequired()"
4516
+ (selectionChange)="matSelectionChange($event)"
4517
+ (openedChange)="openChange($event)">
4518
+ <div class="box-search">
4519
+ <mat-checkbox *ngIf="multiple" color="primary" class="box-select-all"
4520
+ [(ngModel)]="selectAllChecked"
4521
+ (change)="toggleSelectAll($event)"></mat-checkbox>
4522
+ <input #searchInput type="text" [ngClass]="{'pl-1': !multiple}"
4523
+ (keydown.space)="$event.stopPropagation()"
4524
+ (input)="filterItem(searchInput.value)"
4525
+ placeholder="{{'btnSearch' | translate}}...">
4526
+ <div class="box-search-icon" (click)="filterItem(''); searchInput.value = ''">
4527
+ <button mat-icon-button class="search-button">
4528
+ <mat-icon class="mat-24" aria-label="Search icon">clear</mat-icon>
4529
+ </button>
4530
+ </div>
4531
+ </div>
4532
+ <mat-select-trigger title="{{titleString|translate}}">
4533
+ {{ displayString | translate }}
4534
+ </mat-select-trigger>
4535
+ <cdk-virtual-scroll-viewport [itemSize]="getItemSize()"
4536
+ [style.height.px]="getViewPortHeight()">
4537
+ <mat-option *cdkVirtualFor="let option of filteredOptions; let i = index"
4538
+ [attr.data-optionIndex]="i"
4539
+ [disabled]="option.disabled" [value]="option.value"
4540
+ [ngClass]="{'tree-mat-option': isTree}"
4541
+ title="{{option.displayValue|translate}}"
4542
+ (onSelectionChange)="onSelectionChange($event)">
4543
+ <div *ngIf="!isTree">{{ option.displayValue | translate }}</div>
4544
+ <div *ngIf="!!isTree" class="tree-multiline-mat-option">
4545
+ <div mat-line>{{ onDisplayTreeData(option.displayValue, true) }}</div>
4546
+ <p mat-line>{{ onDisplayTreeData(option.displayValue, false) }}</p>
4547
+ </div>
4548
+ </mat-option>
4549
+ </cdk-virtual-scroll-viewport>
4550
+ <ng-container *ngIf="multiple">
4551
+ <ng-container *ngFor="let option of selectedValue; let i = index">
4552
+ <mat-option class="selected-options" [value]="option" *ngIf="i===0">
4553
+ {{ option }}
4554
+ </mat-option>
4555
+ </ng-container>
4556
+ </ng-container>
4557
+ <ng-container *ngIf="!multiple">
4558
+ <mat-option class="selected-options" *ngIf="!!selectedValue"
4559
+ [value]="selectedValue">{{ selectedValue }}
4560
+ </mat-option>
4561
+ </ng-container>
4562
+ </mat-select>
4563
+ <mat-icon matSuffix>expand_more</mat-icon>
4564
+ <mat-hint *ngIf="!NsValidator.invalid(formControl)">{{ hint | translate }}</mat-hint>
4565
+ <mat-hint style="color: red" *ngIf="NsValidator.invalid(formControl)">
4566
+ {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}
4567
+ </mat-hint>
4568
+ </mat-form-field>
4569
+ <ng-container *ngIf="!isShowControl()">
4570
+ <div class="cva-style-disable-text">
4571
+ <mat-label *ngIf="!isLabelOutside && isFloatLabel">
4572
+ {{ (label ? label : placeholder) | translate }}
4573
+ </mat-label>
4574
+ <div [title]="titleString | translate">
4575
+ {{ displayString | translate }}
4576
+ </div>
4577
+ </div>
4461
4578
  </ng-container>
4462
- </ng-container>
4463
- <ng-container *ngIf="!multiple">
4464
- <mat-option class="selected-options" *ngIf="!!selectedValue"
4465
- [value]="selectedValue">{{ selectedValue }}
4466
- </mat-option>
4467
- </ng-container>
4468
- </mat-select>
4469
- <mat-icon matSuffix>expand_more</mat-icon>
4470
- <mat-hint *ngIf="!NsValidator.invalid(formControl)">{{ hint | translate }}</mat-hint>
4471
- <mat-hint style="color: red" *ngIf="NsValidator.invalid(formControl)">
4472
- {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}
4473
- </mat-hint>
4474
- </mat-form-field>
4475
- <ng-container *ngIf="!isShowControl()">
4476
- <div class="cva-style-disable-text">
4477
- <mat-label *ngIf="!isLabelOutside && isFloatLabel">
4478
- {{ (label ? label : placeholder) | translate }}
4479
- </mat-label>
4480
- <div [title]="titleString | translate">
4481
- {{ displayString | translate }}
4482
- </div>
4483
4579
  </div>
4484
- </ng-container>
4485
- </div>
4486
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4$1.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i9$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
4580
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i4$1.MatLine, selector: "[mat-line], [matLine]" }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i9$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
4487
4581
  }
4488
4582
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaMultiSelectAutocomplete, decorators: [{
4489
4583
  type: Component,
@@ -4491,96 +4585,96 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
4491
4585
  selector: 'cva-multi-select-autocomplete',
4492
4586
  standalone: false,
4493
4587
  template: `
4494
- <!-- css labelOutside trong base.theme-->
4495
- <div class="cva-multi-select-autocomplete"
4496
- [ngClass]="{'labelOutside': !!isLabelOutside, 'float_label': !!isFloatLabel && !isLabelOutside}"
4497
- fxLayout="row" fxLayout.lt-sm="row wrap">
4498
- <mat-label *ngIf="isLabelOutside" class="label_width"
4499
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4500
- <div class="label">
4501
- <div>
4502
- {{ (label ? label : placeholder) | translate }}<span
4503
- class="required-label-outside">{{ !!getRequired() ? '*' : '' }}</span>
4504
- </div>
4505
- </div>
4506
- </mat-label>
4507
- <mat-form-field *ngIf="isShowControl()"
4508
- appearance="outline" [floatLabel]="!!isFloatLabel ? 'always' : 'auto'"
4509
- [hideRequiredMarker]="!isFloatLabel"
4510
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4511
- <mat-label
4512
- *ngIf="!isLabelOutside && !!isFloatLabel">{{ (label ? label : placeholder) | translate }}
4513
- </mat-label>
4514
- <mat-select [disabled]="disabled"
4515
- [placeholder]="placeholder | translate"
4516
- [multiple]="multiple"
4517
- [(ngModel)]="selectedValue"
4518
- [required]="getRequired()"
4519
- (selectionChange)="matSelectionChange($event)"
4520
- (openedChange)="openChange($event)">
4521
- <div class="box-search">
4522
- <mat-checkbox *ngIf="multiple" color="primary" class="box-select-all"
4523
- [(ngModel)]="selectAllChecked"
4524
- (change)="toggleSelectAll($event)"></mat-checkbox>
4525
- <input #searchInput type="text" [ngClass]="{'pl-1': !multiple}"
4526
- (keydown.space)="$event.stopPropagation()"
4527
- (input)="filterItem(searchInput.value)"
4528
- placeholder="{{'btnSearch' | translate}}...">
4529
- <div class="box-search-icon" (click)="filterItem(''); searchInput.value = ''">
4530
- <button mat-icon-button class="search-button">
4531
- <mat-icon class="mat-24" aria-label="Search icon">clear</mat-icon>
4532
- </button>
4533
- </div>
4534
- </div>
4535
- <mat-select-trigger title="{{titleString|translate}}">
4536
- {{ displayString | translate }}
4537
- </mat-select-trigger>
4538
- <cdk-virtual-scroll-viewport [itemSize]="getItemSize()"
4539
- [style.height.px]="getViewPortHeight()">
4540
- <mat-option *cdkVirtualFor="let option of filteredOptions; let i = index"
4541
- [attr.data-optionIndex]="i"
4542
- [disabled]="option.disabled" [value]="option.value"
4543
- [ngClass]="{'tree-mat-option': isTree}"
4544
- title="{{option.displayValue|translate}}"
4545
- (onSelectionChange)="onSelectionChange($event)">
4546
- <div *ngIf="!isTree">{{ option.displayValue | translate }}</div>
4547
- <div *ngIf="!!isTree" class="tree-multiline-mat-option">
4548
- <div mat-line>{{ onDisplayTreeData(option.displayValue, true) }}</div>
4549
- <p mat-line>{{ onDisplayTreeData(option.displayValue, false) }}</p>
4550
- </div>
4551
- </mat-option>
4552
- </cdk-virtual-scroll-viewport>
4553
- <ng-container *ngIf="multiple">
4554
- <ng-container *ngFor="let option of selectedValue; let i = index">
4555
- <mat-option class="selected-options" [value]="option" *ngIf="i===0">
4556
- {{ option }}
4557
- </mat-option>
4588
+ <!-- css labelOutside trong base.theme-->
4589
+ <div class="cva-multi-select-autocomplete"
4590
+ [ngClass]="{'labelOutside': !!isLabelOutside, 'float_label': !!isFloatLabel && !isLabelOutside}"
4591
+ fxLayout="row" fxLayout.lt-sm="row wrap">
4592
+ <mat-label *ngIf="isLabelOutside" class="label_width"
4593
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4594
+ <div class="label">
4595
+ <div>
4596
+ {{ (label ? label : placeholder) | translate }}<span
4597
+ class="required-label-outside">{{ !!getRequired() ? '*' : '' }}</span>
4598
+ </div>
4599
+ </div>
4600
+ </mat-label>
4601
+ <mat-form-field *ngIf="isShowControl()"
4602
+ appearance="outline" [floatLabel]="!!isFloatLabel ? 'always' : 'auto'"
4603
+ [hideRequiredMarker]="!isFloatLabel"
4604
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
4605
+ <mat-label
4606
+ *ngIf="!isLabelOutside && !!isFloatLabel">{{ (label ? label : placeholder) | translate }}
4607
+ </mat-label>
4608
+ <mat-select [disabled]="disabled"
4609
+ [placeholder]="placeholder | translate"
4610
+ [multiple]="multiple"
4611
+ [(ngModel)]="selectedValue"
4612
+ [required]="getRequired()"
4613
+ (selectionChange)="matSelectionChange($event)"
4614
+ (openedChange)="openChange($event)">
4615
+ <div class="box-search">
4616
+ <mat-checkbox *ngIf="multiple" color="primary" class="box-select-all"
4617
+ [(ngModel)]="selectAllChecked"
4618
+ (change)="toggleSelectAll($event)"></mat-checkbox>
4619
+ <input #searchInput type="text" [ngClass]="{'pl-1': !multiple}"
4620
+ (keydown.space)="$event.stopPropagation()"
4621
+ (input)="filterItem(searchInput.value)"
4622
+ placeholder="{{'btnSearch' | translate}}...">
4623
+ <div class="box-search-icon" (click)="filterItem(''); searchInput.value = ''">
4624
+ <button mat-icon-button class="search-button">
4625
+ <mat-icon class="mat-24" aria-label="Search icon">clear</mat-icon>
4626
+ </button>
4627
+ </div>
4628
+ </div>
4629
+ <mat-select-trigger title="{{titleString|translate}}">
4630
+ {{ displayString | translate }}
4631
+ </mat-select-trigger>
4632
+ <cdk-virtual-scroll-viewport [itemSize]="getItemSize()"
4633
+ [style.height.px]="getViewPortHeight()">
4634
+ <mat-option *cdkVirtualFor="let option of filteredOptions; let i = index"
4635
+ [attr.data-optionIndex]="i"
4636
+ [disabled]="option.disabled" [value]="option.value"
4637
+ [ngClass]="{'tree-mat-option': isTree}"
4638
+ title="{{option.displayValue|translate}}"
4639
+ (onSelectionChange)="onSelectionChange($event)">
4640
+ <div *ngIf="!isTree">{{ option.displayValue | translate }}</div>
4641
+ <div *ngIf="!!isTree" class="tree-multiline-mat-option">
4642
+ <div mat-line>{{ onDisplayTreeData(option.displayValue, true) }}</div>
4643
+ <p mat-line>{{ onDisplayTreeData(option.displayValue, false) }}</p>
4644
+ </div>
4645
+ </mat-option>
4646
+ </cdk-virtual-scroll-viewport>
4647
+ <ng-container *ngIf="multiple">
4648
+ <ng-container *ngFor="let option of selectedValue; let i = index">
4649
+ <mat-option class="selected-options" [value]="option" *ngIf="i===0">
4650
+ {{ option }}
4651
+ </mat-option>
4652
+ </ng-container>
4653
+ </ng-container>
4654
+ <ng-container *ngIf="!multiple">
4655
+ <mat-option class="selected-options" *ngIf="!!selectedValue"
4656
+ [value]="selectedValue">{{ selectedValue }}
4657
+ </mat-option>
4658
+ </ng-container>
4659
+ </mat-select>
4660
+ <mat-icon matSuffix>expand_more</mat-icon>
4661
+ <mat-hint *ngIf="!NsValidator.invalid(formControl)">{{ hint | translate }}</mat-hint>
4662
+ <mat-hint style="color: red" *ngIf="NsValidator.invalid(formControl)">
4663
+ {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}
4664
+ </mat-hint>
4665
+ </mat-form-field>
4666
+ <ng-container *ngIf="!isShowControl()">
4667
+ <div class="cva-style-disable-text">
4668
+ <mat-label *ngIf="!isLabelOutside && isFloatLabel">
4669
+ {{ (label ? label : placeholder) | translate }}
4670
+ </mat-label>
4671
+ <div [title]="titleString | translate">
4672
+ {{ displayString | translate }}
4673
+ </div>
4674
+ </div>
4558
4675
  </ng-container>
4559
- </ng-container>
4560
- <ng-container *ngIf="!multiple">
4561
- <mat-option class="selected-options" *ngIf="!!selectedValue"
4562
- [value]="selectedValue">{{ selectedValue }}
4563
- </mat-option>
4564
- </ng-container>
4565
- </mat-select>
4566
- <mat-icon matSuffix>expand_more</mat-icon>
4567
- <mat-hint *ngIf="!NsValidator.invalid(formControl)">{{ hint | translate }}</mat-hint>
4568
- <mat-hint style="color: red" *ngIf="NsValidator.invalid(formControl)">
4569
- {{ NsValidator.getErrorMessageV1(formControl, errorMessages).msg | translate: NsValidator.getErrorMessageV1(formControl, errorMessages).params }}
4570
- </mat-hint>
4571
- </mat-form-field>
4572
- <ng-container *ngIf="!isShowControl()">
4573
- <div class="cva-style-disable-text">
4574
- <mat-label *ngIf="!isLabelOutside && isFloatLabel">
4575
- {{ (label ? label : placeholder) | translate }}
4576
- </mat-label>
4577
- <div [title]="titleString | translate">
4578
- {{ displayString | translate }}
4579
- </div>
4580
4676
  </div>
4581
- </ng-container>
4582
- </div>
4583
- `,
4677
+ `,
4584
4678
  }]
4585
4679
  }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i0.Injector }, { type: i1$2.NgControl, decorators: [{
4586
4680
  type: Self
@@ -4973,10 +5067,15 @@ class CvaSmartTableComponent {
4973
5067
  ref;
4974
5068
  config;
4975
5069
  injector;
5070
+ ColumnTypeEnum = ColumnTypeEnum;
5071
+ IconTypeEnum = IconTypeEnum;
5072
+ AlignEnum = AlignEnum;
5073
+ TableService = TableService;
4976
5074
  cellComponents;
4977
5075
  moduleName = '';
4978
5076
  columns = [];
4979
5077
  buttons = [];
5078
+ superHeaders = [];
4980
5079
  value = [];
4981
5080
  minRow = 0;
4982
5081
  maxRow = 9999;
@@ -5005,24 +5104,6 @@ class CvaSmartTableComponent {
5005
5104
  ngControl.valueAccessor = this;
5006
5105
  }
5007
5106
  }
5008
- get AlignEnum() {
5009
- return AlignEnum;
5010
- }
5011
- get IconTypes() {
5012
- return IconTypeEnum;
5013
- }
5014
- get TableService() {
5015
- return TableService;
5016
- }
5017
- get displayedColumns() {
5018
- if (!this.$displayedColumns || this.$displayedColumns.length <= 0) {
5019
- this.$displayedColumns = this.columns.map((c) => c.columnDef);
5020
- if (this.buttons) {
5021
- this.$displayedColumns = this.$displayedColumns.concat(this.buttons.map((b) => b.columnDef));
5022
- }
5023
- }
5024
- return this.$displayedColumns;
5025
- }
5026
5107
  get displayedFooters() {
5027
5108
  if (!this.$displayedFooters || this.$displayedFooters.length <= 0) {
5028
5109
  for (const column of this.columns) {
@@ -5038,9 +5119,6 @@ class CvaSmartTableComponent {
5038
5119
  }
5039
5120
  return this.$displayedFooters;
5040
5121
  }
5041
- get ColumnTypes() {
5042
- return ColumnTypeEnum;
5043
- }
5044
5122
  propagateChange = (_) => {
5045
5123
  /*NON-EMPTY FOR COMPILE*/
5046
5124
  };
@@ -5103,16 +5181,6 @@ class CvaSmartTableComponent {
5103
5181
  this.callValidator();
5104
5182
  this.onChange.emit();
5105
5183
  }
5106
- toggleSelectAll(val, col) {
5107
- if (this.value) {
5108
- this.value.forEach(v => {
5109
- v.checked = val.checked;
5110
- });
5111
- }
5112
- if (col.onHeaderCellValueChange) {
5113
- col.onHeaderCellValueChange(val.checked);
5114
- }
5115
- }
5116
5184
  toggleSelect(val, result, column) {
5117
5185
  let count = 0;
5118
5186
  if (this.value && this.value.length > 0) {
@@ -5165,9 +5233,6 @@ class CvaSmartTableComponent {
5165
5233
  this.formControl.updateValueAndValidity();
5166
5234
  }
5167
5235
  }
5168
- getRequired(column) {
5169
- return typeof (column.isRequired) === 'function' ? column.isRequired() : (column.isRequired ?? false);
5170
- }
5171
5236
  getIsDecimal(column) {
5172
5237
  return column.isDecimal ? typeof (column.isDecimal) === 'boolean' ? column.isDecimal : column.isDecimal() : false;
5173
5238
  }
@@ -5215,253 +5280,276 @@ class CvaSmartTableComponent {
5215
5280
  }
5216
5281
  }
5217
5282
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaSmartTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: InjectTokenNextSolutionsConfig }, { token: i0.Injector }, { token: i1$2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
5218
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaSmartTableComponent, isStandalone: false, selector: "cva-smart-table", inputs: { moduleName: "moduleName", columns: "columns", buttons: "buttons", value: "value", minRow: "minRow", maxRow: "maxRow", errorMessages: "errorMessages", isFormControl: "isFormControl", isSticky: "isSticky", isStickyHeader: "isStickyHeader", isStickyFooter: "isStickyFooter", isExpandRowTable: "isExpandRowTable", expandRowProperty: "expandRowProperty" }, outputs: { clickAction: "clickAction", onChange: "onChange" }, viewQueries: [{ propertyName: "matTable", first: true, predicate: ["matTable"], descendants: true }, { propertyName: "cellComponents", predicate: ["cellComponentRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
5219
- <div class="table-responsive"
5220
- [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5221
- <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5222
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5223
- <ng-container *matHeaderCellDef>
5224
- <th mat-header-cell class="{{TableService.getColumnHeaderClassName(column)}}"
5225
- *ngIf="onDisplayHeaderCell(column)">
5226
- <!-- *ngIf="getColumnType(column, result)!==ColumnTypes.CHECKBOX"-->
5227
- <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5228
- fxLayout="row"
5229
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
5230
- <mat-checkbox
5231
- *ngIf="TableService.getColumnType(column, null)===ColumnTypes.CHECKBOX && !column.isNotShowHeaderCheckbox"
5232
- color="primary" class="box-select-all margin-right-5" [(ngModel)]="selectAllChecked"
5233
- (change)="toggleSelectAll($event, column)">
5234
- </mat-checkbox>
5235
- {{ TableService.displayHeaderName(column, moduleName) | translate }}<span
5236
- style="color: red">{{ getRequired(column) ? '*' : '' }}</span>
5237
- </div>
5238
- </th>
5239
- </ng-container>
5240
- <ng-container *matCellDef="let result; let i = index">
5241
- <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5242
- *ngIf="TableService.onDisplayCell(column, result)"
5243
- [ngSwitch]="TableService.getColumnType(column, result)">
5244
- <div title="{{column.title(result)}}"
5245
- *ngSwitchCase="ColumnTypes.VIEW"
5246
- class="viewData {{TableService.getColumnClassName(column,result)}}"
5247
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5248
- {{ column.cell(result) }}
5249
- </div>
5250
- <div class="link viewData"
5251
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5252
- *ngSwitchCase="ColumnTypes.LINK"
5253
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5254
- title="{{column.title(result)}}">
5255
- <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5256
- </div>
5257
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5258
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5259
- *ngSwitchCase="ColumnTypes.IMG"
5260
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5261
- title="{{column.title(result)}}">
5262
- <img [src]="column.cell(result) | secure | async"
5263
- #imgRef
5264
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5265
- </div>
5266
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5267
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5268
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
5269
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5270
- title="{{column.title(result)}}">
5271
- <img [src]="column.cell(result)"
5272
- #imgRef
5273
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5274
- </div>
5275
- <div *ngSwitchCase="ColumnTypes.BASE64"
5276
- class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5277
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5278
- title="{{column.title(result)}}">
5279
- <img [src]="'data:image/png;base64,'+column.cell(result)"
5280
- #base64ImgRef
5281
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5282
- </div>
5283
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
5284
- <div *ngIf="!!column.button"
5285
- class="{{TableService.getColumnClassName(column, result)}}"
5286
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5287
- (click)="$event.stopPropagation()">
5288
- <button mat-icon-button type="button"
5289
- color="{{column.button.color}}"
5290
- [ngClass]="column.button.className"
5291
- (click)="onClick(column.button.click, result, i)"
5292
- disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5293
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5294
- [ngSwitch]="TableService.getIconType(column.button)">
5295
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
5296
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
5297
- </button>
5298
- </div>
5299
- </ng-container>
5300
- <cva-counter-input *ngSwitchCase="ColumnTypes.INPUT_COUNTER"
5301
- #cellComponentRef
5302
- class="inputNumber" #nsCounterInput
5303
- [isFormControl]="false"
5304
- [alignNumber]="getAlign(column)"
5305
- [disabled]="column.disabled ? column.disabled(result) : false"
5306
- [value]="result[column.columnDef]"
5307
- [required]="getRequired(column)"
5308
- [errorMessages]="getErrorMessageMap(column)"
5309
- [isDecimal]="getIsDecimal(column)"
5310
- [min]="column.min ? column.min(result) : null"
5311
- [max]="column.max ? column.max(result) : null"
5312
- (onChange)="onCellValueChange(result, column, $event);">
5313
- </cva-counter-input>
5314
- <cva-input *ngSwitchCase="ColumnTypes.INPUT"
5315
- #cellComponentRef
5316
- [isFormControl]="false"
5317
- [alignText]="getAlign(column)"
5318
- [disabled]="column.disabled ? column.disabled(result) : false"
5319
- [text]="result[column.columnDef]"
5320
- [minLength]="column.min ? column.min(result) : undefined"
5321
- [maxLength]="column.max ? column.max(result) : undefined"
5322
- [required]="getRequired(column)"
5323
- [errorMessages]="getErrorMessageMap(column)"
5324
- (onChange)="onCellValueChange(result, column, $event);">
5325
- </cva-input>
5326
- <cva-input *ngSwitchCase="ColumnTypes.INPUT_CURRENCY"
5327
- #cellComponentRef
5328
- [isFormControl]="false"
5329
- [alignText]="getAlign(column)"
5330
- [disabled]="column.disabled ? column.disabled(result) : false"
5331
- [text]="result[column.columnDef]"
5332
- [minLength]="column.min ? column.min(result) : undefined"
5333
- [maxLength]="column.max ? column.max(result) : undefined"
5334
- [required]="getRequired(column)"
5335
- [errorMessages]="getErrorMessageMap(column)"
5336
- (onChange)="onCellValueChange(result, column, $event);"
5337
- [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5338
- [formatFunc]="formatFunc">
5339
- </cva-input>
5340
- <cva-date-picker *ngSwitchCase="ColumnTypes.DATE_PICKER"
5341
- #cellComponentRef
5342
- [value]="result[column.columnDef]"
5343
- [isFormControl]="false"
5344
- [minDate]="column.min ? column.min(result) : null"
5345
- [maxDate]="column.max ? column.max(result) : null"
5346
- [required]="getRequired(column)"
5347
- [disabled]="column.disabled ? column.disabled(result) : false"
5348
- [errorMessages]="getErrorMessageMap(column)"
5349
- (onChange)="onCellValueChange(result, column, $event);">
5350
- </cva-date-picker>
5351
- <cva-multi-select-autocomplete [isFormControl]="false"
5283
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaSmartTableComponent, isStandalone: false, selector: "cva-smart-table", inputs: { moduleName: "moduleName", columns: "columns", buttons: "buttons", superHeaders: "superHeaders", value: "value", minRow: "minRow", maxRow: "maxRow", errorMessages: "errorMessages", isFormControl: "isFormControl", isSticky: "isSticky", isStickyHeader: "isStickyHeader", isStickyFooter: "isStickyFooter", isExpandRowTable: "isExpandRowTable", expandRowProperty: "expandRowProperty" }, outputs: { clickAction: "clickAction", onChange: "onChange" }, viewQueries: [{ propertyName: "matTable", first: true, predicate: ["matTable"], descendants: true }, { propertyName: "cellComponents", predicate: ["cellComponentRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
5284
+ <div class="table-responsive"
5285
+ [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5286
+ <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5287
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5288
+ <ng-container *matHeaderCellDef>
5289
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
5290
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
5291
+ *ngIf="onDisplayHeaderCell(column)">
5292
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5293
+ [selectAllChecked]="selectAllChecked"
5294
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5295
+ </cva-table-header-cell>
5296
+ </th>
5297
+ </ng-container>
5298
+ <ng-container *matCellDef="let result; let i = index">
5299
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5300
+ *ngIf="TableService.onDisplayCell(column, result)"
5301
+ [ngSwitch]="TableService.getColumnType(column, result)">
5302
+ <div title="{{column.title(result)}}"
5303
+ *ngSwitchCase="ColumnTypeEnum.VIEW"
5304
+ class="viewData {{TableService.getColumnClassName(column,result)}}"
5305
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5306
+ {{ column.cell(result) }}
5307
+ </div>
5308
+ <div class="link viewData"
5309
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5310
+ *ngSwitchCase="ColumnTypeEnum.LINK"
5311
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5312
+ title="{{column.title(result)}}">
5313
+ <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5314
+ </div>
5315
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5316
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5317
+ *ngSwitchCase="ColumnTypeEnum.IMG"
5318
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5319
+ title="{{column.title(result)}}">
5320
+ <img [src]="column.cell(result) | secure | async"
5321
+ #imgRef
5322
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5323
+ </div>
5324
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5325
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5326
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
5327
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5328
+ title="{{column.title(result)}}">
5329
+ <img [src]="column.cell(result)"
5330
+ #imgRef
5331
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5332
+ </div>
5333
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
5334
+ class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5335
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5336
+ title="{{column.title(result)}}">
5337
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
5338
+ #base64ImgRef
5339
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
5340
+ alt=""/>
5341
+ </div>
5342
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
5343
+ <div *ngIf="!!column.button"
5344
+ class="{{TableService.getColumnClassName(column, result)}}"
5345
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5346
+ (click)="$event.stopPropagation()">
5347
+ <button mat-icon-button type="button"
5348
+ color="{{column.button.color}}"
5349
+ [ngClass]="column.button.className"
5350
+ (click)="onClick(column.button.click, result, i)"
5351
+ disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5352
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5353
+ [ngSwitch]="TableService.getIconType(column.button)">
5354
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
5355
+ </mat-icon>
5356
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
5357
+ </button>
5358
+ </div>
5359
+ </ng-container>
5360
+ <cva-counter-input *ngSwitchCase="ColumnTypeEnum.INPUT_COUNTER"
5361
+ #cellComponentRef
5362
+ class="inputNumber" #nsCounterInput
5363
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5364
+ [isFormControl]="false"
5365
+ [alignNumber]="getAlign(column)"
5366
+ [disabled]="column.disabled ? column.disabled(result) : false"
5367
+ [value]="result[column.columnDef]"
5368
+ [required]="TableService.getRequired(column)"
5369
+ [errorMessages]="getErrorMessageMap(column)"
5370
+ [isDecimal]="getIsDecimal(column)"
5371
+ [min]="column.min ? column.min(result) : null"
5372
+ [max]="column.max ? column.max(result) : null"
5373
+ (onChange)="onCellValueChange(result, column, $event);">
5374
+ </cva-counter-input>
5375
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT"
5376
+ #cellComponentRef
5377
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5378
+ [isFormControl]="false"
5379
+ [alignText]="getAlign(column)"
5380
+ [disabled]="column.disabled ? column.disabled(result) : false"
5381
+ [text]="result[column.columnDef]"
5382
+ [minLength]="column.min ? column.min(result) : undefined"
5383
+ [maxLength]="column.max ? column.max(result) : undefined"
5384
+ [required]="TableService.getRequired(column)"
5385
+ [errorMessages]="getErrorMessageMap(column)"
5386
+ (onChange)="onCellValueChange(result, column, $event);"
5387
+ [pattern]="column.pattern ? column.pattern : undefined"
5388
+ [patternFilter]="column.patternFilter ? column.patternFilter : ''">
5389
+ </cva-input>
5390
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT_CURRENCY"
5391
+ #cellComponentRef
5392
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5393
+ [isFormControl]="false"
5394
+ [alignText]="getAlign(column)"
5395
+ [disabled]="column.disabled ? column.disabled(result) : false"
5396
+ [text]="result[column.columnDef]"
5397
+ [minLength]="column.min ? column.min(result) : undefined"
5398
+ [maxLength]="column.max ? column.max(result) : undefined"
5399
+ [required]="TableService.getRequired(column)"
5400
+ [errorMessages]="getErrorMessageMap(column)"
5401
+ (onChange)="onCellValueChange(result, column, $event);"
5402
+ [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5403
+ [formatFunc]="formatFunc">
5404
+ </cva-input>
5405
+ <cva-date-picker *ngSwitchCase="ColumnTypeEnum.DATE_PICKER"
5352
5406
  #cellComponentRef
5353
- *ngSwitchCase="ColumnTypes.MULTI_SELECT_AUTOCOMPLETE"
5354
- class="multiSelectAutocomplete"
5355
- [isTree]="column.isTree??false"
5356
5407
  [value]="result[column.columnDef]"
5357
- [errorMessages]="getErrorMessageMap(column)"
5358
- [required]="getRequired(column)"
5408
+ [isFormControl]="false"
5409
+ [minDate]="column.min ? column.min(result) : null"
5410
+ [maxDate]="column.max ? column.max(result) : null"
5411
+ [required]="TableService.getRequired(column)"
5359
5412
  [disabled]="column.disabled ? column.disabled(result) : false"
5360
- [multiple]="column.isMultipleSelect??false"
5361
- [options]="column.optionValues ? column.optionValues(result) : []"
5362
- (selectionChange)="onCellValueChange(result, column, $event);">
5363
- </cva-multi-select-autocomplete>
5364
- <div class="checkbox-cell"
5365
- fxLayout="row"
5366
- [fxLayoutAlign]="TableService.alignCellContent(column)"
5367
- *ngSwitchCase="ColumnTypes.CHECKBOX">
5368
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5369
- *ngIf="column.display ? column.display(result) : true"
5370
- [disabled]="column.disabled ? column.disabled(result) : false"
5371
- (change)="toggleSelect($event,result, column)">
5372
- </mat-checkbox>
5373
- </div>
5374
- <cva-live-searching *ngSwitchCase="ColumnTypes.LIVE_SEARCHING"
5375
- #cellComponentRef
5376
- [isFormControl]="false" [required]="getRequired(column)"
5377
- [row]="result" [columnDef]="column.columnDef"
5378
- [searchFn]="column.searchFn"
5379
- [mappingConfig]="column.mappingConfig"
5380
- [displayKey]="column.displayKey??''"
5381
- [errorMessages]="getErrorMessageMap(column)"
5382
- (onChange)="onCellValueChange(result, column, $event)">
5383
- </cva-live-searching>
5384
- </td>
5385
- </ng-container>
5386
- </ng-container>
5387
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5388
- <ng-container *matHeaderCellDef="let header">
5389
- <th mat-header-cell
5390
- [ngClass]="button.className"
5391
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5392
- (click)="$event.stopPropagation()"
5393
- [attr.colspan]="buttonColspan">
5394
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
5395
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5396
- <button mat-icon-button type="button"
5397
- class="{{button.className}}"
5398
- color="{{$any(btnHeader).color}}"
5399
- (click)="onClick($any(btnHeader).click, null, null)"
5400
- [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5401
- *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5402
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5403
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
5404
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
5405
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5406
- </button>
5407
- </ng-container>
5408
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5409
- <div title="{{$any(btnHeader) | translate}}"
5410
- class="viewData"
5411
- fxLayout="row"
5412
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5413
- {{ $any(btnHeader) | translate }}
5414
- </div>
5415
- </ng-container>
5416
- </th>
5417
- </ng-container>
5418
- <ng-container *matCellDef="let cell; let i = index">
5419
- <td mat-cell [ngClass]="button.className"
5420
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
5421
- (click)="$event.stopPropagation()">
5422
- <button mat-icon-button type="button"
5423
- color="{{button.color}}"
5424
- [ngClass]="button.className"
5425
- (click)="onClick(button.click, cell, i)"
5426
- disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5427
- matTooltip="{{(button.title ? button.title : '') | translate}}"
5428
- [ngSwitch]="TableService.getIconType(button)">
5429
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5430
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
5431
- </button>
5432
- </td>
5433
- </ng-container>
5434
- </ng-container>
5435
- <ng-container *ngFor="let column of columns">
5436
- <ng-container *ngFor="let footer of column.footers; let i = index"
5437
- matColumnDef="{{i}}-{{column.columnDef}}">
5438
- <ng-container *matFooterCellDef>
5439
- <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5440
- [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5441
- class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5442
- <div title="{{footer.title(datasource.data)}}"
5443
- class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5444
- fxLayout="row"
5445
- [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5446
- {{ footer.cell(datasource.data) }}
5447
- </div>
5448
- </td>
5449
- </ng-container>
5450
- </ng-container>
5451
- </ng-container>
5452
- <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: isSticky||isStickyHeader"></tr>
5453
- <tr mat-row *matRowDef="let result; columns: displayedColumns;" class="{{result.className}}"
5454
- [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5413
+ [errorMessages]="getErrorMessageMap(column)"
5414
+ (onChange)="onCellValueChange(result, column, $event);">
5415
+ </cva-date-picker>
5416
+ <cva-multi-select-autocomplete [isFormControl]="false"
5417
+ #cellComponentRef
5418
+ *ngSwitchCase="ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE"
5419
+ class="multiSelectAutocomplete"
5420
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5421
+ [isTree]="column.isTree??false"
5422
+ [value]="result[column.columnDef]"
5423
+ [errorMessages]="getErrorMessageMap(column)"
5424
+ [required]="TableService.getRequired(column)"
5425
+ [disabled]="column.disabled ? column.disabled(result) : false"
5426
+ [multiple]="column.isMultipleSelect??false"
5427
+ [options]="column.optionValues ? column.optionValues(result) : []"
5428
+ (selectionChange)="onCellValueChange(result, column, $event);">
5429
+ </cva-multi-select-autocomplete>
5430
+ <div class="checkbox-cell"
5431
+ fxLayout="row"
5432
+ [fxLayoutAlign]="TableService.alignCellContent(column)"
5433
+ *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
5434
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5435
+ *ngIf="column.display ? column.display(result) : true"
5436
+ [disabled]="column.disabled ? column.disabled(result) : false"
5437
+ (change)="toggleSelect($event,result, column)">
5438
+ </mat-checkbox>
5439
+ </div>
5440
+ <cva-live-searching *ngSwitchCase="ColumnTypeEnum.LIVE_SEARCHING"
5441
+ #cellComponentRef
5442
+ [isFormControl]="false" [required]="TableService.getRequired(column)"
5443
+ [row]="result" [columnDef]="column.columnDef"
5444
+ [searchFn]="column.searchFn"
5445
+ [mappingConfig]="column.mappingConfig"
5446
+ [displayKey]="column.displayKey??''"
5447
+ [errorMessages]="getErrorMessageMap(column)"
5448
+ (onChange)="onCellValueChange(result, column, $event)">
5449
+ </cva-live-searching>
5450
+ </td>
5451
+ </ng-container>
5452
+ </ng-container>
5453
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5454
+ <ng-container *matHeaderCellDef="let header">
5455
+ <th mat-header-cell
5456
+ [ngClass]="button.className"
5457
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5458
+ (click)="$event.stopPropagation()"
5459
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
5460
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5461
+ <button mat-icon-button type="button"
5462
+ class="{{button.className}}"
5463
+ color="{{$any(btnHeader).color}}"
5464
+ (click)="onClick($any(btnHeader).click, null, null)"
5465
+ [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5466
+ *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5467
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5468
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
5469
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
5470
+ </mat-icon>
5471
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5472
+ </button>
5473
+ </ng-container>
5474
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5475
+ <div title="{{$any(btnHeader) | translate}}"
5476
+ class="viewData"
5477
+ fxLayout="row"
5478
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5479
+ {{ $any(btnHeader) | translate }}
5480
+ </div>
5481
+ </ng-container>
5482
+ </th>
5483
+ </ng-container>
5484
+ <ng-container *matCellDef="let cell; let i = index">
5485
+ <td mat-cell [ngClass]="button.className"
5486
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
5487
+ (click)="$event.stopPropagation()">
5488
+ <button mat-icon-button type="button"
5489
+ color="{{button.color}}"
5490
+ [ngClass]="button.className"
5491
+ (click)="onClick(button.click, cell, i)"
5492
+ disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5493
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
5494
+ [ngSwitch]="TableService.getIconType(button)">
5495
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5496
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
5497
+ </button>
5498
+ </td>
5499
+ </ng-container>
5500
+ </ng-container>
5501
+ <ng-container *ngFor="let column of columns">
5502
+ <ng-container *ngFor="let footer of column.footers; let i = index"
5503
+ matColumnDef="{{i}}-{{column.columnDef}}">
5504
+ <ng-container *matFooterCellDef>
5505
+ <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5506
+ [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5507
+ class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5508
+ <div title="{{footer.title(datasource.data)}}"
5509
+ class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5510
+ fxLayout="row"
5511
+ [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5512
+ {{ footer.cell(datasource.data) }}
5513
+ </div>
5514
+ </td>
5515
+ </ng-container>
5516
+ </ng-container>
5517
+ </ng-container>
5518
+
5519
+ <ng-container *ngFor="let row of superHeaders">
5520
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
5521
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
5522
+ <th mat-header-cell *matHeaderCellDef
5523
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
5524
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
5525
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5526
+ [selectAllChecked]="selectAllChecked"
5527
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5528
+ </cva-table-header-cell>
5529
+ </th>
5530
+ </ng-container>
5531
+ </ng-container>
5532
+ </ng-container>
5533
+
5534
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
5535
+ <tr mat-header-row
5536
+ *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons); sticky: isSticky||isStickyHeader"></tr>
5537
+ </ng-container>
5538
+ <tr mat-header-row
5539
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons); sticky: isSticky||isStickyHeader"></tr>
5540
+ <tr mat-row *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons);"
5541
+ class="{{result.className}}"
5542
+ [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5455
5543
  'parentRow0': !result.isChildRow && result.parentRowClassIndex === 0,
5456
5544
  'childRow1': !!result.isChildRow && result.parentRowClassIndex === 1,
5457
5545
  'parentRow1': !result.isChildRow && result.parentRowClassIndex === 1}"
5458
- ></tr>
5459
- <ng-container *ngFor="let df of displayedFooters">
5460
- <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5461
- </ng-container>
5462
- </table>
5463
- </div>
5464
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i5.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i5.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaInputComponent, selector: "cva-input", inputs: ["label", "name", "placeholder", "hint", "required", "disabled", "text", "type", "pattern", "errorMessages", "multiline", "isLabelOutside", "isFloatLabel", "minLength", "maxLength", "alignText", "maxLengthDisplay", "percentOfLabelOutside", "suffixFontAwesomeClass", "patternFilter", "isFormControl", "formatFunc"], outputs: ["onChange"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "component", type: CvaDatePickerComponent, selector: "cva-date-picker", inputs: ["label", "placeholder", "value", "disabled", "required", "minDate", "maxDate", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["onChange"] }, { kind: "component", type: CvaMultiSelectAutocomplete, selector: "cva-multi-select-autocomplete", inputs: ["placeholder", "label", "hint", "value", "options", "disabled", "errorMessages", "multiple", "required", "isTree", "treeSymbol", "sizeOfItemsInListByPixels", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["selectionChange", "selectedOptionDataChange"] }, { kind: "component", type: CvaLiveSearchingComponent, selector: "cva-live-searching", inputs: ["label", "placeholder", "hint", "required", "disabled", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "suffixFontAwesomeClass", "displayKey", "mappingConfig", "searchFn", "isFormControl", "row", "columnDef"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
5546
+ ></tr>
5547
+ <ng-container *ngFor="let df of displayedFooters">
5548
+ <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5549
+ </ng-container>
5550
+ </table>
5551
+ </div>
5552
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i5.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i5.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i5.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i1$4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i9.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: CvaTableHeaderCellComponent, selector: "cva-table-header-cell", inputs: ["moduleName", "column", "selectAllChecked"], outputs: ["changeSelectAll"] }, { kind: "component", type: CvaInputComponent, selector: "cva-input", inputs: ["label", "name", "placeholder", "hint", "required", "disabled", "text", "type", "pattern", "errorMessages", "multiline", "isLabelOutside", "isFloatLabel", "minLength", "maxLength", "alignText", "maxLengthDisplay", "percentOfLabelOutside", "suffixFontAwesomeClass", "patternFilter", "isFormControl", "formatFunc"], outputs: ["onChange"] }, { kind: "component", type: CvaCounterInputComponent, selector: "cva-counter-input", inputs: ["label", "placeholder", "suffixText", "hint", "value", "disabled", "required", "errorMessages", "min", "max", "error", "isDecimal", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "alignNumber", "isFormControl"], outputs: ["onChange", "onEnter"] }, { kind: "component", type: CvaDatePickerComponent, selector: "cva-date-picker", inputs: ["label", "placeholder", "value", "disabled", "required", "minDate", "maxDate", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["onChange"] }, { kind: "component", type: CvaMultiSelectAutocomplete, selector: "cva-multi-select-autocomplete", inputs: ["placeholder", "label", "hint", "value", "options", "disabled", "errorMessages", "multiple", "required", "isTree", "treeSymbol", "sizeOfItemsInListByPixels", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "isFormControl"], outputs: ["selectionChange", "selectedOptionDataChange"] }, { kind: "component", type: CvaLiveSearchingComponent, selector: "cva-live-searching", inputs: ["label", "placeholder", "hint", "required", "disabled", "errorMessages", "isLabelOutside", "isFloatLabel", "percentOfLabelOutside", "suffixFontAwesomeClass", "displayKey", "mappingConfig", "searchFn", "isFormControl", "row", "columnDef"], outputs: ["onChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: SecureImgPipe, name: "secure" }] });
5465
5553
  }
5466
5554
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaSmartTableComponent, decorators: [{
5467
5555
  type: Component,
@@ -5469,252 +5557,275 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5469
5557
  selector: 'cva-smart-table',
5470
5558
  standalone: false,
5471
5559
  template: `
5472
- <div class="table-responsive"
5473
- [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5474
- <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5475
- <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5476
- <ng-container *matHeaderCellDef>
5477
- <th mat-header-cell class="{{TableService.getColumnHeaderClassName(column)}}"
5478
- *ngIf="onDisplayHeaderCell(column)">
5479
- <!-- *ngIf="getColumnType(column, result)!==ColumnTypes.CHECKBOX"-->
5480
- <div [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5481
- fxLayout="row"
5482
- [fxLayoutAlign]="column.alignHeader ? column.alignHeader : TableService.alignCellContent(column)">
5483
- <mat-checkbox
5484
- *ngIf="TableService.getColumnType(column, null)===ColumnTypes.CHECKBOX && !column.isNotShowHeaderCheckbox"
5485
- color="primary" class="box-select-all margin-right-5" [(ngModel)]="selectAllChecked"
5486
- (change)="toggleSelectAll($event, column)">
5487
- </mat-checkbox>
5488
- {{ TableService.displayHeaderName(column, moduleName) | translate }}<span
5489
- style="color: red">{{ getRequired(column) ? '*' : '' }}</span>
5490
- </div>
5491
- </th>
5492
- </ng-container>
5493
- <ng-container *matCellDef="let result; let i = index">
5494
- <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5495
- *ngIf="TableService.onDisplayCell(column, result)"
5496
- [ngSwitch]="TableService.getColumnType(column, result)">
5497
- <div title="{{column.title(result)}}"
5498
- *ngSwitchCase="ColumnTypes.VIEW"
5499
- class="viewData {{TableService.getColumnClassName(column,result)}}"
5500
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5501
- {{ column.cell(result) }}
5502
- </div>
5503
- <div class="link viewData"
5504
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5505
- *ngSwitchCase="ColumnTypes.LINK"
5506
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5507
- title="{{column.title(result)}}">
5508
- <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5509
- </div>
5510
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5511
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5512
- *ngSwitchCase="ColumnTypes.IMG"
5513
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5514
- title="{{column.title(result)}}">
5515
- <img [src]="column.cell(result) | secure | async"
5516
- #imgRef
5517
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5518
- </div>
5519
- <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5520
- [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5521
- *ngSwitchCase="ColumnTypes.IMG_NO_SECURE"
5522
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5523
- title="{{column.title(result)}}">
5524
- <img [src]="column.cell(result)"
5525
- #imgRef
5526
- (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5527
- </div>
5528
- <div *ngSwitchCase="ColumnTypes.BASE64"
5529
- class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5530
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5531
- title="{{column.title(result)}}">
5532
- <img [src]="'data:image/png;base64,'+column.cell(result)"
5533
- #base64ImgRef
5534
- (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)" alt="" />
5535
- </div>
5536
- <ng-container *ngSwitchCase="ColumnTypes.BUTTON">
5537
- <div *ngIf="!!column.button"
5538
- class="{{TableService.getColumnClassName(column, result)}}"
5539
- fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5540
- (click)="$event.stopPropagation()">
5541
- <button mat-icon-button type="button"
5542
- color="{{column.button.color}}"
5543
- [ngClass]="column.button.className"
5544
- (click)="onClick(column.button.click, result, i)"
5545
- disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5546
- matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5547
- [ngSwitch]="TableService.getIconType(column.button)">
5548
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ column.button.icon }}</mat-icon>
5549
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{column.button.icon}}"></i>
5550
- </button>
5551
- </div>
5552
- </ng-container>
5553
- <cva-counter-input *ngSwitchCase="ColumnTypes.INPUT_COUNTER"
5554
- #cellComponentRef
5555
- class="inputNumber" #nsCounterInput
5556
- [isFormControl]="false"
5557
- [alignNumber]="getAlign(column)"
5558
- [disabled]="column.disabled ? column.disabled(result) : false"
5559
- [value]="result[column.columnDef]"
5560
- [required]="getRequired(column)"
5561
- [errorMessages]="getErrorMessageMap(column)"
5562
- [isDecimal]="getIsDecimal(column)"
5563
- [min]="column.min ? column.min(result) : null"
5564
- [max]="column.max ? column.max(result) : null"
5565
- (onChange)="onCellValueChange(result, column, $event);">
5566
- </cva-counter-input>
5567
- <cva-input *ngSwitchCase="ColumnTypes.INPUT"
5568
- #cellComponentRef
5569
- [isFormControl]="false"
5570
- [alignText]="getAlign(column)"
5571
- [disabled]="column.disabled ? column.disabled(result) : false"
5572
- [text]="result[column.columnDef]"
5573
- [minLength]="column.min ? column.min(result) : undefined"
5574
- [maxLength]="column.max ? column.max(result) : undefined"
5575
- [required]="getRequired(column)"
5576
- [errorMessages]="getErrorMessageMap(column)"
5577
- (onChange)="onCellValueChange(result, column, $event);">
5578
- </cva-input>
5579
- <cva-input *ngSwitchCase="ColumnTypes.INPUT_CURRENCY"
5580
- #cellComponentRef
5581
- [isFormControl]="false"
5582
- [alignText]="getAlign(column)"
5583
- [disabled]="column.disabled ? column.disabled(result) : false"
5584
- [text]="result[column.columnDef]"
5585
- [minLength]="column.min ? column.min(result) : undefined"
5586
- [maxLength]="column.max ? column.max(result) : undefined"
5587
- [required]="getRequired(column)"
5588
- [errorMessages]="getErrorMessageMap(column)"
5589
- (onChange)="onCellValueChange(result, column, $event);"
5590
- [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5591
- [formatFunc]="formatFunc">
5592
- </cva-input>
5593
- <cva-date-picker *ngSwitchCase="ColumnTypes.DATE_PICKER"
5594
- #cellComponentRef
5595
- [value]="result[column.columnDef]"
5596
- [isFormControl]="false"
5597
- [minDate]="column.min ? column.min(result) : null"
5598
- [maxDate]="column.max ? column.max(result) : null"
5599
- [required]="getRequired(column)"
5600
- [disabled]="column.disabled ? column.disabled(result) : false"
5601
- [errorMessages]="getErrorMessageMap(column)"
5602
- (onChange)="onCellValueChange(result, column, $event);">
5603
- </cva-date-picker>
5604
- <cva-multi-select-autocomplete [isFormControl]="false"
5560
+ <div class="table-responsive"
5561
+ [ngClass]="{'fixed_header': isSticky||isStickyHeader, 'fixed_footer': isSticky||isStickyFooter}">
5562
+ <table mat-table [dataSource]="datasource" #matTable class="mat-elevation-z8 cva-smart-table">
5563
+ <ng-container *ngFor="let column of columns" matColumnDef="{{column.columnDef}}">
5564
+ <ng-container *matHeaderCellDef>
5565
+ <th mat-header-cell [ngClass]="TableService.getColumnHeaderClassName(column)"
5566
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan"
5567
+ *ngIf="onDisplayHeaderCell(column)">
5568
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5569
+ [selectAllChecked]="selectAllChecked"
5570
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5571
+ </cva-table-header-cell>
5572
+ </th>
5573
+ </ng-container>
5574
+ <ng-container *matCellDef="let result; let i = index">
5575
+ <td mat-cell [ngClass]="TableService.getColumnClassName(column,result)"
5576
+ *ngIf="TableService.onDisplayCell(column, result)"
5577
+ [ngSwitch]="TableService.getColumnType(column, result)">
5578
+ <div title="{{column.title(result)}}"
5579
+ *ngSwitchCase="ColumnTypeEnum.VIEW"
5580
+ class="viewData {{TableService.getColumnClassName(column,result)}}"
5581
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)">
5582
+ {{ column.cell(result) }}
5583
+ </div>
5584
+ <div class="link viewData"
5585
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5586
+ *ngSwitchCase="ColumnTypeEnum.LINK"
5587
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5588
+ title="{{column.title(result)}}">
5589
+ <a [routerLink]="[column.link ? column.link(result) : '']">{{ column.cell(result) }}</a>
5590
+ </div>
5591
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5592
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5593
+ *ngSwitchCase="ColumnTypeEnum.IMG"
5594
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5595
+ title="{{column.title(result)}}">
5596
+ <img [src]="column.cell(result) | secure | async"
5597
+ #imgRef
5598
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5599
+ </div>
5600
+ <div class="img-view viewData {{TableService.getColumnClassName(column,result)}}"
5601
+ [ngClass]="{'break-word-style-view': column.hasWordBreakStyle}"
5602
+ *ngSwitchCase="ColumnTypeEnum.IMG_NO_SECURE"
5603
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5604
+ title="{{column.title(result)}}">
5605
+ <img [src]="column.cell(result)"
5606
+ #imgRef
5607
+ (error)="TableService.onErrorImgEvent(imgRef, config.NO_IMAGE_AVAILABLE)" alt=""/>
5608
+ </div>
5609
+ <div *ngSwitchCase="ColumnTypeEnum.BASE64"
5610
+ class="viewData img-view base64 {{TableService.getColumnClassName(column,result)}}"
5611
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5612
+ title="{{column.title(result)}}">
5613
+ <img [src]="'data:image/png;base64,'+column.cell(result)"
5614
+ #base64ImgRef
5615
+ (error)="TableService.onErrorImgEvent(base64ImgRef, config.NO_IMAGE_AVAILABLE)"
5616
+ alt=""/>
5617
+ </div>
5618
+ <ng-container *ngSwitchCase="ColumnTypeEnum.BUTTON">
5619
+ <div *ngIf="!!column.button"
5620
+ class="{{TableService.getColumnClassName(column, result)}}"
5621
+ fxLayout="row" [fxLayoutAlign]="TableService.alignCellContent(column)"
5622
+ (click)="$event.stopPropagation()">
5623
+ <button mat-icon-button type="button"
5624
+ color="{{column.button.color}}"
5625
+ [ngClass]="column.button.className"
5626
+ (click)="onClick(column.button.click, result, i)"
5627
+ disabled="{{column.button && column.button.disabled ? column.button.disabled(result) : false}}"
5628
+ matTooltip="{{(column.button.title ? column.button.title : '') | translate}}"
5629
+ [ngSwitch]="TableService.getIconType(column.button)">
5630
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ column.button.icon }}
5631
+ </mat-icon>
5632
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{column.button.icon}}"></i>
5633
+ </button>
5634
+ </div>
5635
+ </ng-container>
5636
+ <cva-counter-input *ngSwitchCase="ColumnTypeEnum.INPUT_COUNTER"
5637
+ #cellComponentRef
5638
+ class="inputNumber" #nsCounterInput
5639
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5640
+ [isFormControl]="false"
5641
+ [alignNumber]="getAlign(column)"
5642
+ [disabled]="column.disabled ? column.disabled(result) : false"
5643
+ [value]="result[column.columnDef]"
5644
+ [required]="TableService.getRequired(column)"
5645
+ [errorMessages]="getErrorMessageMap(column)"
5646
+ [isDecimal]="getIsDecimal(column)"
5647
+ [min]="column.min ? column.min(result) : null"
5648
+ [max]="column.max ? column.max(result) : null"
5649
+ (onChange)="onCellValueChange(result, column, $event);">
5650
+ </cva-counter-input>
5651
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT"
5652
+ #cellComponentRef
5653
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5654
+ [isFormControl]="false"
5655
+ [alignText]="getAlign(column)"
5656
+ [disabled]="column.disabled ? column.disabled(result) : false"
5657
+ [text]="result[column.columnDef]"
5658
+ [minLength]="column.min ? column.min(result) : undefined"
5659
+ [maxLength]="column.max ? column.max(result) : undefined"
5660
+ [required]="TableService.getRequired(column)"
5661
+ [errorMessages]="getErrorMessageMap(column)"
5662
+ (onChange)="onCellValueChange(result, column, $event);"
5663
+ [pattern]="column.pattern ? column.pattern : undefined"
5664
+ [patternFilter]="column.patternFilter ? column.patternFilter : ''">
5665
+ </cva-input>
5666
+ <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT_CURRENCY"
5667
+ #cellComponentRef
5668
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5669
+ [isFormControl]="false"
5670
+ [alignText]="getAlign(column)"
5671
+ [disabled]="column.disabled ? column.disabled(result) : false"
5672
+ [text]="result[column.columnDef]"
5673
+ [minLength]="column.min ? column.min(result) : undefined"
5674
+ [maxLength]="column.max ? column.max(result) : undefined"
5675
+ [required]="TableService.getRequired(column)"
5676
+ [errorMessages]="getErrorMessageMap(column)"
5677
+ (onChange)="onCellValueChange(result, column, $event);"
5678
+ [pattern]="getIsDecimal(column) ? '^\\d{0,15}(\\.\\d*)?$' : '^\\d{0,15}$'"
5679
+ [formatFunc]="formatFunc">
5680
+ </cva-input>
5681
+ <cva-date-picker *ngSwitchCase="ColumnTypeEnum.DATE_PICKER"
5605
5682
  #cellComponentRef
5606
- *ngSwitchCase="ColumnTypes.MULTI_SELECT_AUTOCOMPLETE"
5607
- class="multiSelectAutocomplete"
5608
- [isTree]="column.isTree??false"
5609
5683
  [value]="result[column.columnDef]"
5610
- [errorMessages]="getErrorMessageMap(column)"
5611
- [required]="getRequired(column)"
5684
+ [isFormControl]="false"
5685
+ [minDate]="column.min ? column.min(result) : null"
5686
+ [maxDate]="column.max ? column.max(result) : null"
5687
+ [required]="TableService.getRequired(column)"
5612
5688
  [disabled]="column.disabled ? column.disabled(result) : false"
5613
- [multiple]="column.isMultipleSelect??false"
5614
- [options]="column.optionValues ? column.optionValues(result) : []"
5615
- (selectionChange)="onCellValueChange(result, column, $event);">
5616
- </cva-multi-select-autocomplete>
5617
- <div class="checkbox-cell"
5618
- fxLayout="row"
5619
- [fxLayoutAlign]="TableService.alignCellContent(column)"
5620
- *ngSwitchCase="ColumnTypes.CHECKBOX">
5621
- <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5622
- *ngIf="column.display ? column.display(result) : true"
5623
- [disabled]="column.disabled ? column.disabled(result) : false"
5624
- (change)="toggleSelect($event,result, column)">
5625
- </mat-checkbox>
5626
- </div>
5627
- <cva-live-searching *ngSwitchCase="ColumnTypes.LIVE_SEARCHING"
5628
- #cellComponentRef
5629
- [isFormControl]="false" [required]="getRequired(column)"
5630
- [row]="result" [columnDef]="column.columnDef"
5631
- [searchFn]="column.searchFn"
5632
- [mappingConfig]="column.mappingConfig"
5633
- [displayKey]="column.displayKey??''"
5634
- [errorMessages]="getErrorMessageMap(column)"
5635
- (onChange)="onCellValueChange(result, column, $event)">
5636
- </cva-live-searching>
5637
- </td>
5638
- </ng-container>
5639
- </ng-container>
5640
- <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5641
- <ng-container *matHeaderCellDef="let header">
5642
- <th mat-header-cell
5643
- [ngClass]="button.className"
5644
- *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5645
- (click)="$event.stopPropagation()"
5646
- [attr.colspan]="buttonColspan">
5647
- <!-- [fxFlex]="getHeaderButtonWidth(i) + 'px' "-->
5648
- <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5649
- <button mat-icon-button type="button"
5650
- class="{{button.className}}"
5651
- color="{{$any(btnHeader).color}}"
5652
- (click)="onClick($any(btnHeader).click, null, null)"
5653
- [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5654
- *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5655
- matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5656
- [ngSwitch]="TableService.getIconType($any(btnHeader))">
5657
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ $any(btnHeader).icon }}</mat-icon>
5658
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5659
- </button>
5660
- </ng-container>
5661
- <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5662
- <div title="{{$any(btnHeader) | translate}}"
5663
- class="viewData"
5664
- fxLayout="row"
5665
- fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5666
- {{ $any(btnHeader) | translate }}
5667
- </div>
5668
- </ng-container>
5669
- </th>
5670
- </ng-container>
5671
- <ng-container *matCellDef="let cell; let i = index">
5672
- <td mat-cell [ngClass]="button.className"
5673
- *ngIf="TableService.onDisplayButtonCell(button, cell)"
5674
- (click)="$event.stopPropagation()">
5675
- <button mat-icon-button type="button"
5676
- color="{{button.color}}"
5677
- [ngClass]="button.className"
5678
- (click)="onClick(button.click, cell, i)"
5679
- disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5680
- matTooltip="{{(button.title ? button.title : '') | translate}}"
5681
- [ngSwitch]="TableService.getIconType(button)">
5682
- <mat-icon *ngSwitchCase="IconTypes.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5683
- <i *ngSwitchCase="IconTypes.FONT_AWESOME" class="{{button.icon}}"></i>
5684
- </button>
5685
- </td>
5686
- </ng-container>
5687
- </ng-container>
5688
- <ng-container *ngFor="let column of columns">
5689
- <ng-container *ngFor="let footer of column.footers; let i = index"
5690
- matColumnDef="{{i}}-{{column.columnDef}}">
5691
- <ng-container *matFooterCellDef>
5692
- <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5693
- [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5694
- class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5695
- <div title="{{footer.title(datasource.data)}}"
5696
- class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5697
- fxLayout="row"
5698
- [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5699
- {{ footer.cell(datasource.data) }}
5700
- </div>
5701
- </td>
5702
- </ng-container>
5703
- </ng-container>
5704
- </ng-container>
5705
- <tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: isSticky||isStickyHeader"></tr>
5706
- <tr mat-row *matRowDef="let result; columns: displayedColumns;" class="{{result.className}}"
5707
- [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5689
+ [errorMessages]="getErrorMessageMap(column)"
5690
+ (onChange)="onCellValueChange(result, column, $event);">
5691
+ </cva-date-picker>
5692
+ <cva-multi-select-autocomplete [isFormControl]="false"
5693
+ #cellComponentRef
5694
+ *ngSwitchCase="ColumnTypeEnum.MULTI_SELECT_AUTOCOMPLETE"
5695
+ class="multiSelectAutocomplete"
5696
+ [placeholder]="moduleName + '.table.placeholder.' + column.columnDef"
5697
+ [isTree]="column.isTree??false"
5698
+ [value]="result[column.columnDef]"
5699
+ [errorMessages]="getErrorMessageMap(column)"
5700
+ [required]="TableService.getRequired(column)"
5701
+ [disabled]="column.disabled ? column.disabled(result) : false"
5702
+ [multiple]="column.isMultipleSelect??false"
5703
+ [options]="column.optionValues ? column.optionValues(result) : []"
5704
+ (selectionChange)="onCellValueChange(result, column, $event);">
5705
+ </cva-multi-select-autocomplete>
5706
+ <div class="checkbox-cell"
5707
+ fxLayout="row"
5708
+ [fxLayoutAlign]="TableService.alignCellContent(column)"
5709
+ *ngSwitchCase="ColumnTypeEnum.CHECKBOX">
5710
+ <mat-checkbox [(ngModel)]="result[column.columnDef]" color="primary"
5711
+ *ngIf="column.display ? column.display(result) : true"
5712
+ [disabled]="column.disabled ? column.disabled(result) : false"
5713
+ (change)="toggleSelect($event,result, column)">
5714
+ </mat-checkbox>
5715
+ </div>
5716
+ <cva-live-searching *ngSwitchCase="ColumnTypeEnum.LIVE_SEARCHING"
5717
+ #cellComponentRef
5718
+ [isFormControl]="false" [required]="TableService.getRequired(column)"
5719
+ [row]="result" [columnDef]="column.columnDef"
5720
+ [searchFn]="column.searchFn"
5721
+ [mappingConfig]="column.mappingConfig"
5722
+ [displayKey]="column.displayKey??''"
5723
+ [errorMessages]="getErrorMessageMap(column)"
5724
+ (onChange)="onCellValueChange(result, column, $event)">
5725
+ </cva-live-searching>
5726
+ </td>
5727
+ </ng-container>
5728
+ </ng-container>
5729
+ <ng-container *ngFor="let button of buttons; let i = index" matColumnDef="{{button.columnDef}}">
5730
+ <ng-container *matHeaderCellDef="let header">
5731
+ <th mat-header-cell
5732
+ [ngClass]="button.className"
5733
+ *ngIf="TableService.onDisplayButtonHeaderCell(buttons, button, header, i) && !!buttonColspan"
5734
+ (click)="$event.stopPropagation()"
5735
+ [attr.colspan]="buttonColspan" [attr.rowspan]="superHeaders.length + 1">
5736
+ <ng-container *ngIf="TableService.getButtonHeader(button) as btnHeader">
5737
+ <button mat-icon-button type="button"
5738
+ class="{{button.className}}"
5739
+ color="{{$any(btnHeader).color}}"
5740
+ (click)="onClick($any(btnHeader).click, null, null)"
5741
+ [disabled]="(btnHeader && $any(btnHeader).disabled) ? $any(btnHeader).disabled(header) : false"
5742
+ *ngIf="(btnHeader && btnHeader.display) ? btnHeader.display(header) : false"
5743
+ matTooltip="{{((btnHeader && $any(btnHeader).title) ? $any(btnHeader).title : '') | translate}}"
5744
+ [ngSwitch]="TableService.getIconType($any(btnHeader))">
5745
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ $any(btnHeader).icon }}
5746
+ </mat-icon>
5747
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{$any(btnHeader).icon}}"></i>
5748
+ </button>
5749
+ </ng-container>
5750
+ <ng-container *ngIf="TableService.getButtonHeaderString(button) as btnHeader">
5751
+ <div title="{{$any(btnHeader) | translate}}"
5752
+ class="viewData"
5753
+ fxLayout="row"
5754
+ fxLayoutAlign="{{button.alignHeader ? button.alignHeader : AlignEnum.LEFT}} center">
5755
+ {{ $any(btnHeader) | translate }}
5756
+ </div>
5757
+ </ng-container>
5758
+ </th>
5759
+ </ng-container>
5760
+ <ng-container *matCellDef="let cell; let i = index">
5761
+ <td mat-cell [ngClass]="button.className"
5762
+ *ngIf="TableService.onDisplayButtonCell(button, cell)"
5763
+ (click)="$event.stopPropagation()">
5764
+ <button mat-icon-button type="button"
5765
+ color="{{button.color}}"
5766
+ [ngClass]="button.className"
5767
+ (click)="onClick(button.click, cell, i)"
5768
+ disabled="{{button && button.disabled ? button.disabled(cell) : false}}"
5769
+ matTooltip="{{(button.title ? button.title : '') | translate}}"
5770
+ [ngSwitch]="TableService.getIconType(button)">
5771
+ <mat-icon *ngSwitchCase="IconTypeEnum.MATERIAL_ICON">{{ button.icon }}</mat-icon>
5772
+ <i *ngSwitchCase="IconTypeEnum.FONT_AWESOME" class="{{button.icon}}"></i>
5773
+ </button>
5774
+ </td>
5775
+ </ng-container>
5776
+ </ng-container>
5777
+ <ng-container *ngFor="let column of columns">
5778
+ <ng-container *ngFor="let footer of column.footers; let i = index"
5779
+ matColumnDef="{{i}}-{{column.columnDef}}">
5780
+ <ng-container *matFooterCellDef>
5781
+ <td mat-footer-cell *ngIf="onDisplayFooter(footer, datasource.data)"
5782
+ [attr.colspan]="TableService.getColspan(footer, datasource.data)"
5783
+ class="{{TableService.getColumnClassName(column,datasource.data)}} {{TableService.getColumnClassName(column.footer,datasource.data)}}">
5784
+ <div title="{{footer.title(datasource.data)}}"
5785
+ class="viewData {{TableService.getColumnClassName(column,datasource.data)}}"
5786
+ fxLayout="row"
5787
+ [fxLayoutAlign]="footer.align ? footer.align : AlignEnum.LEFT">
5788
+ {{ footer.cell(datasource.data) }}
5789
+ </div>
5790
+ </td>
5791
+ </ng-container>
5792
+ </ng-container>
5793
+ </ng-container>
5794
+
5795
+ <ng-container *ngFor="let row of superHeaders">
5796
+ <ng-container *ngFor="let column of row" matColumnDef="{{column.columnDef}}">
5797
+ <ng-container *ngIf="onDisplayHeaderCell(column)">
5798
+ <th mat-header-cell *matHeaderCellDef
5799
+ [ngClass]="TableService.getColumnHeaderClassName(column)"
5800
+ [attr.colspan]="column?.colSpan" [attr.rowspan]="column?.rowSpan">
5801
+ <cva-table-header-cell [moduleName]="moduleName" [column]="column"
5802
+ [selectAllChecked]="selectAllChecked"
5803
+ (changeSelectAll)="selectAllChecked = TableService.toggleSelectAll(value, $event)">
5804
+ </cva-table-header-cell>
5805
+ </th>
5806
+ </ng-container>
5807
+ </ng-container>
5808
+ </ng-container>
5809
+
5810
+ <ng-container *ngFor="let row of superHeaders; let rowIndex = index">
5811
+ <tr mat-header-row
5812
+ *matHeaderRowDef="TableService.getHeaderColumns(row, rowIndex, buttons); sticky: isSticky||isStickyHeader"></tr>
5813
+ </ng-container>
5814
+ <tr mat-header-row
5815
+ *matHeaderRowDef="TableService.getHeaderColumns(columns, superHeaders.length, buttons); sticky: isSticky||isStickyHeader"></tr>
5816
+ <tr mat-row *matRowDef="let result; columns: TableService.getHeaderColumns(columns, 0, buttons);"
5817
+ class="{{result.className}}"
5818
+ [ngClass]="{'childRow0': !!result.isChildRow && result.parentRowClassIndex === 0,
5708
5819
  'parentRow0': !result.isChildRow && result.parentRowClassIndex === 0,
5709
5820
  'childRow1': !!result.isChildRow && result.parentRowClassIndex === 1,
5710
5821
  'parentRow1': !result.isChildRow && result.parentRowClassIndex === 1}"
5711
- ></tr>
5712
- <ng-container *ngFor="let df of displayedFooters">
5713
- <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5714
- </ng-container>
5715
- </table>
5716
- </div>
5717
- `,
5822
+ ></tr>
5823
+ <ng-container *ngFor="let df of displayedFooters">
5824
+ <tr mat-footer-row *matFooterRowDef="df; sticky: isSticky||isStickyFooter"></tr>
5825
+ </ng-container>
5826
+ </table>
5827
+ </div>
5828
+ `,
5718
5829
  }]
5719
5830
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
5720
5831
  type: Inject,
@@ -5732,6 +5843,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5732
5843
  type: Input
5733
5844
  }], buttons: [{
5734
5845
  type: Input
5846
+ }], superHeaders: [{
5847
+ type: Input
5735
5848
  }], value: [{
5736
5849
  type: Input
5737
5850
  }], minRow: [{
@@ -8382,7 +8495,7 @@ class CvaFlatTreeComponent {
8382
8495
  children: [],
8383
8496
  };
8384
8497
  if (!node.children || !FlatTreeService.hasChild(node)) {
8385
- node.display = node.displayValue.toLowerCase().includes(this.searchText.toLowerCase())
8498
+ node.display = node.displayValue.toLowerCase().includes(this.searchText.toLowerCase().trim())
8386
8499
  && this.getDisplayInputFunc(node);
8387
8500
  if (node.display) {
8388
8501
  copiedData.push(node);
@@ -8391,7 +8504,7 @@ class CvaFlatTreeComponent {
8391
8504
  else {
8392
8505
  this.getDisplayTreeDataSource(node.children, copiedNode.children ? copiedNode.children : []);
8393
8506
  // parent display
8394
- node.display = (node.displayValue.toLowerCase().includes(this.searchText.toLowerCase())
8507
+ node.display = (node.displayValue.toLowerCase().includes(this.searchText.toLowerCase().trim())
8395
8508
  || node.children?.some(childNode => childNode.display)) && this.getDisplayInputFunc(node);
8396
8509
  node.checked = node.children.filter(child => child.display).length > 0 &&
8397
8510
  node.children.filter(child => child.display).every(childNode => childNode.checked);
@@ -9543,7 +9656,8 @@ class NiceComponentLibraryModule {
9543
9656
  };
9544
9657
  }
9545
9658
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: NiceComponentLibraryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9546
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: NiceComponentLibraryModule, declarations: [CvaTableComponent,
9659
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.5", ngImport: i0, type: NiceComponentLibraryModule, declarations: [CvaTableHeaderCellComponent,
9660
+ CvaTableComponent,
9547
9661
  CvaSmartTableComponent,
9548
9662
  CvaInputComponent,
9549
9663
  CvaCounterInputComponent,
@@ -9625,6 +9739,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
9625
9739
  FlexLayoutModule,
9626
9740
  ],
9627
9741
  declarations: [
9742
+ CvaTableHeaderCellComponent,
9628
9743
  CvaTableComponent,
9629
9744
  CvaSmartTableComponent,
9630
9745
  CvaInputComponent,