From f6e9f28e3cba83a99ea9b3416dfc20c1b898da6d Mon Sep 17 00:00:00 2001 From: yastruckov Date: Thu, 20 Feb 2025 13:00:57 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=20=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=D1=81=D0=B5=D1=85=20=D1=81=D0=BE=D1=82=D1=80?= =?UTF-8?q?=D1=83=D0=B4=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B0=D0=B4=D0=BC=D0=B8=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/admin/usersList/EmployeeListAdapter.kt | 50 +++++++++++++++ .../usersList/EmployeeListPagingSource.kt | 36 +++++++++++ app/src/main/res/layout/fragment_admin.xml | 64 +++++++++++++------ app/src/main/res/layout/item_employee.xml | 4 +- 4 files changed, 131 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListAdapter.kt create mode 100644 app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListPagingSource.kt diff --git a/app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListAdapter.kt b/app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListAdapter.kt new file mode 100644 index 0000000..99887c5 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListAdapter.kt @@ -0,0 +1,50 @@ +package ru.myitschool.work.ui.admin.usersList + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.paging.PagingDataAdapter +import androidx.recyclerview.widget.RecyclerView +import ru.myitschool.work.R +import ru.myitschool.work.databinding.ItemEmployeeBinding +import ru.myitschool.work.databinding.ItemVisitBinding +import ru.myitschool.work.entities.EmployeeEntity +import ru.myitschool.work.entities.EmployeeEntranceEntity +import ru.myitschool.work.utils.monthConverter +import ru.myitschool.work.utils.timeConverter + +class EmployeeListAdapter : PagingDataAdapter(DiffUtil) { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) : ViewHolder{ + return ViewHolder( + ItemEmployeeBinding.inflate( + LayoutInflater.from(parent.context), parent, false + ) + ) + } + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = getItem(position) + if (item != null) { + holder.bind(item) + } + + } + inner class ViewHolder( + private val binding: ItemEmployeeBinding, + ) : RecyclerView.ViewHolder(binding.root) { + fun bind(item: EmployeeEntity) { + binding.userName.text = item.name + binding.position.text = item.position + + + + } + + } + object DiffUtil : androidx.recyclerview.widget.DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: EmployeeEntity, newItem: EmployeeEntity): Boolean { + return oldItem.id == newItem.id + } + override fun areContentsTheSame(oldItem: EmployeeEntity, newItem: EmployeeEntity): Boolean { + return oldItem == newItem + } + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListPagingSource.kt b/app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListPagingSource.kt new file mode 100644 index 0000000..023bbd1 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/admin/usersList/EmployeeListPagingSource.kt @@ -0,0 +1,36 @@ +package ru.myitschool.work.ui.admin.usersList + +import androidx.paging.PagingSource +import androidx.paging.PagingState +import ru.myitschool.work.entities.EmployeeEntity + +class EmployeeListPagingSource( + private val request: suspend(pageNum: Int, pageSize: Int) ->Result> +) : PagingSource() { + override fun getRefreshKey(state: PagingState): Int? { + return state.anchorPosition?.let{ + state.closestPageToPosition(it)?.prevKey?.plus(1) ?: + state.closestPageToPosition(it)?.nextKey?.minus(1) + } + } + + override suspend fun load(params: LoadParams): LoadResult { + val pageNum = params.key ?: 0 + return request.invoke( + pageNum, params.loadSize + ).fold( + onSuccess = { value -> + LoadResult.Page( + data = value, + prevKey = (pageNum - 1).takeIf { it >= 0 }, + nextKey = (pageNum + 1).takeIf { value.size == params.loadSize } + ) + + }, + onFailure = { e-> + println(e) + LoadResult.Error(e) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_admin.xml b/app/src/main/res/layout/fragment_admin.xml index 321f8c2..457d895 100644 --- a/app/src/main/res/layout/fragment_admin.xml +++ b/app/src/main/res/layout/fragment_admin.xml @@ -63,26 +63,28 @@ android:id="@+id/block_employee" android:layout_width="match_parent" android:layout_height="0dp" - android:orientation="vertical" android:layout_marginTop="20dp" android:background="@drawable/history_corner_radius" - android:paddingTop="16dp" + android:orientation="vertical" android:paddingHorizontal="20dp" - app:layout_constrainedWidth="true" + android:paddingTop="16dp" app:layout_constrainedHeight="true" - app:layout_constraintTop_toBottomOf="@+id/block_header" + app:layout_constrainedWidth="true" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintVertical_bias="1" + app:layout_constraintHorizontal_bias="0.0" app:layout_constraintLeft_toRightOf="@+id/guideline_left" - app:layout_constraintRight_toLeftOf="@+id/guideline_right"> + app:layout_constraintRight_toLeftOf="@+id/guideline_right" + app:layout_constraintTop_toBottomOf="@+id/block_header" + app:layout_constraintVertical_bias="0.0"> + android:visibility="gone" + tools:visibility="gone"> + android:orientation="vertical" + android:visibility="visible" + tools:visibility="visible"> + android:textSize="12sp" + tools:text="Артемий ФИО" /> + android:textSize="12sp" + tools:text="Вход" /> @@ -130,26 +134,44 @@ android:layout_gravity="center_vertical" android:layout_marginStart="16dp" android:backgroundTint="@color/accent_color" + android:fontFamily="@font/montserrat_medium" + android:singleLine="true" android:text="@string/block_btn" android:textAllCaps="false" - android:fontFamily="@font/montserrat_medium" android:textColor="@color/white" android:textSize="8sp" - android:singleLine="true" app:cornerRadius="16dp" tools:ignore="SmallSp" /> - + android:visibility="visible" + tools:listitem="@layout/item_employee" + tools:visibility="visible" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_employee.xml b/app/src/main/res/layout/item_employee.xml index 0ca1ffb..3735886 100644 --- a/app/src/main/res/layout/item_employee.xml +++ b/app/src/main/res/layout/item_employee.xml @@ -27,7 +27,7 @@ android:layout_gravity="center_vertical">