Skip to content

Commit

Permalink
feature : 상단 탭바 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
jeongjaino committed Jan 4, 2025
1 parent b6e2258 commit f2694ab
Show file tree
Hide file tree
Showing 3 changed files with 165 additions and 42 deletions.
132 changes: 131 additions & 1 deletion composeApp/src/wasmJsMain/kotlin/com/wespot/web/WeSpotService.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,142 @@
package com.wespot.web

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.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.wespot.web.about.AboutScreen
import com.wespot.web.designsystem.component.WSTopBar
import com.wespot.web.designsystem.theme.StaticTypography
import com.wespot.web.designsystem.theme.WeSpotTheme
import com.wespot.web.designsystem.theme.WeSpotThemeManager
import com.wespot.web.home.HomeScreen
import org.jetbrains.compose.resources.painterResource
import wespot_web.composeapp.generated.resources.Res
import wespot_web.composeapp.generated.resources.main_logo

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun WeSpotService() {
var currentSelectedItem by remember { mutableStateOf(0) }

WeSpotTheme {
HomeScreen()
Scaffold(
topBar = {
WSTopBar(
title = {
HomeTopNavigationTab(
selectedIndex = currentSelectedItem,
onSelected = {
currentSelectedItem = it
},
modifier = Modifier.fillMaxWidth(),
)
},
navigation = {
Image(
painter = painterResource(resource = Res.drawable.main_logo),
contentDescription = "Main_Logo",
)
},
)
},
modifier = Modifier.background(color = WeSpotThemeManager.colors.backgroundColor),
) {
Box(modifier = Modifier.padding(it)) {
RootNavigation(currentSelectedItem)
}
}
}
}

@Composable
fun RootNavigation(selectedIndex: Int) {
when (selectedIndex) {
TopNavigationTabState.HOME.ordinal -> {
HomeScreen()
}
TopNavigationTabState.ABOUT.ordinal -> {
AboutScreen()
}
TopNavigationTabState.CONTACT.ordinal -> {
HomeScreen()
}
TopNavigationTabState.MAKERS.ordinal -> {
HomeScreen()
}
}
}

@Composable
fun HomeTopNavigationTab(
selectedIndex: Int,
onSelected: (Int) -> Unit,
modifier: Modifier = Modifier,
) {
NavigationBar(
containerColor = WeSpotThemeManager.colors.backgroundColor,
modifier = modifier,
) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceAround,
verticalAlignment = Alignment.CenterVertically,
) {
TopNavigationTabState.entries.forEachIndexed { index, state ->
TabItem(
title = state.title,
selected = selectedIndex == index,
onClick = { onSelected(index) },
)
}
}
}
}

@Composable
private fun RowScope.TabItem(
title: String,
selected: Boolean = false,
onClick: () -> Unit,
) {
Box(
modifier = Modifier
.size(80.dp)
.weight(1f)
.clickable { onClick.invoke() },
contentAlignment = Alignment.Center,
) {
Text(
text = title,
style = StaticTypography().body9,
color = if (selected) {
WeSpotThemeManager.colors.abledIconColor
} else {
WeSpotThemeManager.colors.disableIcnColor
},
)
}
}

enum class TopNavigationTabState(
val title: String,
) {
HOME(title = "Home"),
ABOUT(title = "About"),
CONTACT(title = "Contact"),
MAKERS(title = "Makers"),
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.wespot.web.about

import androidx.compose.runtime.Composable

@Composable
fun AboutScreen() {

}
67 changes: 26 additions & 41 deletions composeApp/src/wasmJsMain/kotlin/com/wespot/web/home/HomeScreen.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
package com.wespot.web.home

import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.collectIsDraggedAsState
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.pager.VerticalPager
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import com.wespot.web.designsystem.component.WSTopBar
import androidx.compose.ui.unit.dp
import com.wespot.web.designsystem.theme.StaticTypography
import com.wespot.web.designsystem.theme.WeSpotThemeManager
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.delay
Expand All @@ -28,7 +29,6 @@ import wespot_web.composeapp.generated.resources.landing2
import wespot_web.composeapp.generated.resources.landing3
import wespot_web.composeapp.generated.resources.landing4
import wespot_web.composeapp.generated.resources.landing5
import wespot_web.composeapp.generated.resources.main_logo

private val imageList = persistentListOf(
Res.drawable.landing1,
Expand All @@ -38,7 +38,6 @@ private val imageList = persistentListOf(
Res.drawable.landing5,
)

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun HomeScreen() {
val pagerState = rememberPagerState { imageList.size }
Expand All @@ -57,42 +56,28 @@ fun HomeScreen() {
}

Scaffold(
topBar = {
WSTopBar(
title = {
// HomeTopBarTab()
},
navigation = {
Image(
painter = painterResource(resource = Res.drawable.main_logo),
contentDescription = "Main_Logo",
)
},
)
}
modifier = Modifier.fillMaxSize(),
) { innerPadding ->
VerticalPager(
modifier = Modifier
.fillMaxSize()
.background(color = WeSpotThemeManager.colors.backgroundColor)
.padding(innerPadding),
state = pagerState,
Column(
modifier = Modifier.padding(innerPadding),
verticalArrangement = Arrangement.spacedBy(32.dp),
) {
Image(
painter = painterResource(imageList[it]),
contentDescription = "Lading Page Image $it",
modifier = Modifier
.fillMaxWidth()
.clickable { openPlayStore() },
contentScale = ContentScale.FillWidth,
Text(
text = "WeSpot",
style = StaticTypography().header1,
color = WeSpotThemeManager.colors.txtTitleColor,
)

HorizontalPager(
state = pagerState,
modifier = Modifier.width(512.dp)
) {
Image(
painter = painterResource(imageList[it]),
contentDescription = "Lading Page Image $it",
contentScale = ContentScale.FillWidth,
)
}
}
}
}

@Composable
fun HomeTopBarTab(
onTabClick: (Int) -> Unit,
) {

}

0 comments on commit f2694ab

Please sign in to comment.