diff --git a/composeApp/src/androidMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.android.kt b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.android.kt new file mode 100644 index 0000000000000000000000000000000000000000..ae0088a2e0ae0ff9b0ae303520ade956d3a98619 --- /dev/null +++ b/composeApp/src/androidMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.android.kt @@ -0,0 +1,18 @@ +package band.effective.office.elevator.expects + +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import band.effective.office.elevator.AndroidApp +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.desc.desc + + +actual fun setClipboardText(text: String, label: String, toastMessage: StringResource) { + val context = AndroidApp.INSTANCE + + val clip = ClipData.newPlainText(label, text) + val clipboardService = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + clipboardService.setPrimaryClip(clip) + showToast(toastMessage.desc().toString(context)) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt index ef32a666e7ddfba8c0fc9d2c481a327ba5c0d72a..a291c039d0b215d118675c3567eb402ca762b812 100644 --- a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.kt @@ -1,6 +1,7 @@ package band.effective.office.elevator.expects import com.seiko.imageloader.component.ComponentRegistryBuilder +import dev.icerock.moko.resources.StringResource import okio.Path expect fun showToast(message: String) @@ -15,4 +16,6 @@ expect fun pickSBP(phoneNumber: String) internal expect fun ComponentRegistryBuilder.setupDefaultComponents() -internal expect fun getImageCacheDirectoryPath(): Path \ No newline at end of file +internal expect fun getImageCacheDirectoryPath(): Path + +expect fun setClipboardText(text: String, label: String, toastMessage: StringResource) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/booking/components/ErrorButton.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/booking/components/ErrorButton.kt index 8427bf5b93fe391d6c2424f8d6301900678fbc51..30ea8b7160c44f43e8afaf7a2c4cd2407b524f28 100644 --- a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/booking/components/ErrorButton.kt +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/booking/components/ErrorButton.kt @@ -27,7 +27,7 @@ fun ErrorButton( Button( onClick, shape = RectangleShape, - contentPadding = PaddingValues(0.dp), + contentPadding = PaddingValues(8.dp), elevation = ButtonDefaults.elevatedButtonElevation( defaultElevation = 0.dp, pressedElevation = 0.5.dp diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/AboutEmployee.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/AboutEmployee.kt index 31eda2c708e08dc2c206cb4044845e0e4807aefd..2cd08cd28dc5ae474dfad00b285d1701e8e60682 100644 --- a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/AboutEmployee.kt +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/AboutEmployee.kt @@ -2,6 +2,7 @@ package band.effective.office.elevator.ui.employee.aboutEmployee import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -115,14 +116,18 @@ fun AboutEmployee(component: AboutEmployeeComponent) { it ) ) - } + }, + onClickCopyEmail = { component.onEvent(AboutEmployeeStore.Intent.OnClickCopyEmail) }, + onClickCopyPhone = { component.onEvent(AboutEmployeeStore.Intent.OnClickCopyPhone) }, + onClickCopyTelegram = { component.onEvent(AboutEmployeeStore.Intent.OnClickCopyTelegram) } ) if (showModalCalendar) { Dialog( - onDismissRequest = { component.onEvent(AboutEmployeeStore.Intent.CloseCalendarClicked)}, + onDismissRequest = { component.onEvent(AboutEmployeeStore.Intent.CloseCalendarClicked) }, properties = DialogProperties(usePlatformDefaultWidth = false) - ) { ModalCalendarDateRange( + ) { + ModalCalendarDateRange( modifier = Modifier .padding(horizontal = 16.dp) .align(Alignment.Center), @@ -156,6 +161,9 @@ private fun AboutEmployeeContent( onClickOpenCalendar: () -> Unit, onClickOpenBottomDialog: () -> Unit, onClickCloseBottomDialog: (BookingsFilter) -> Unit, + onClickCopyPhone: () -> Unit, + onClickCopyEmail: () -> Unit, + onClickCopyTelegram: () -> Unit, isLoading: Boolean, isLoadingBooking: Boolean ) { @@ -219,12 +227,16 @@ private fun AboutEmployeeContent( ContactUserUIComponent( MainRes.images.icon_telegram, telegram, - modifier = Modifier.padding(top = 18.dp) + modifier = Modifier + .clickable(onClick = onClickCopyTelegram) + .padding(top = 18.dp) ) ContactUserUIComponent( MainRes.images.mail, email, - modifier = Modifier.padding(top = 10.dp) + modifier = Modifier + .clickable(onClick = onClickCopyEmail) + .padding(top = 10.dp) ) } Spacer(modifier = Modifier.weight(.1f)) @@ -263,7 +275,7 @@ private fun AboutEmployeeContent( EffectiveOutlinedButton( MainRes.images.spb_icon, text = MainRes.strings.transfer, - onClick = onClickOpenSpb, + onClick = onClickCopyPhone, modifier = Modifier.padding(end = 8.dp) ) } diff --git a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/store/AboutEmployeeStore.kt b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/store/AboutEmployeeStore.kt index 69db0277e8c10f4d8be8c104d0673838cc8beb61..561b55af51b8ddbc53fec1cde1a13d7206920ecc 100644 --- a/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/store/AboutEmployeeStore.kt +++ b/composeApp/src/commonMain/kotlin/band/effective/office/elevator/ui/employee/aboutEmployee/store/AboutEmployeeStore.kt @@ -19,6 +19,11 @@ interface AboutEmployeeStore : Store + setClipboardText( + text = getState().user.phoneNumber, + label = "Phone", + toastMessage = MainRes.strings.phone_clipboard + ) + Intent.OnClickCopyTelegram -> + setClipboardText( + text = "https://t.me/${getState().user.telegram}", + label = "Telegram", + toastMessage = MainRes.strings.telegram_clipboard + ) + Intent.OnClickCopyEmail -> + setClipboardText( + text = getState().user.email, + label = "Email", + toastMessage = MainRes.strings.email_clipboard + ) } } diff --git a/composeApp/src/commonMain/moko-resources/base/strings_ru.xml b/composeApp/src/commonMain/moko-resources/base/strings_ru.xml index 04881c49fe0942d83e6b8441334a1a0c770cf956..5963aa3cd8457386591aa5d1fdf25bd79296436f 100644 --- a/composeApp/src/commonMain/moko-resources/base/strings_ru.xml +++ b/composeApp/src/commonMain/moko-resources/base/strings_ru.xml @@ -185,4 +185,9 @@ У этого сотрудника пока нет таких бронирований У этого сотрудника нет бронирований на этот день У этого сотрудника нет таких бронирований на этот день + + + Номер телефона был успешно скопирован! + Почта была успешно скопирована! + Телеграм был успешно скопирован! diff --git a/composeApp/src/commonMain/moko-resources/en/strings_en.xml b/composeApp/src/commonMain/moko-resources/en/strings_en.xml index 4d4f34b175d4268a032d8a87302e746903537fd9..696d4407413ed86e1320cc123f61e581ef07aa70 100644 --- a/composeApp/src/commonMain/moko-resources/en/strings_en.xml +++ b/composeApp/src/commonMain/moko-resources/en/strings_en.xml @@ -170,4 +170,9 @@ This employee dont have such bookings yet This employee dont have bookings on this date This employee dont have such bookings on this date + + + Phone number was successfully copied! + Email was successfully copied! + Telegram was successfully copied! diff --git a/composeApp/src/iosMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.ios.kt b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.ios.kt new file mode 100644 index 0000000000000000000000000000000000000000..d9f176abc1550ed7495129402ac54d185a784f11 --- /dev/null +++ b/composeApp/src/iosMain/kotlin/band/effective/office/elevator/expects/PlatformExpects.ios.kt @@ -0,0 +1,9 @@ +package band.effective.office.elevator.expects + +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.desc.desc + +actual fun setClipboardText(text: String, label: String, toastMessage: StringResource) { + UIPasteboard.general.string = text + showToast(toastMessage.desc().localized()) +} \ No newline at end of file