before merge
This commit is contained in:
@@ -0,0 +1,804 @@
|
||||
#
|
||||
# There is insufficient memory for the Java Runtime Environment to continue.
|
||||
# Native memory allocation (malloc) failed to allocate 1048576 bytes. Error detail: AllocateHeap
|
||||
# Possible reasons:
|
||||
# The system is out of physical RAM or swap space
|
||||
# This process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap
|
||||
# Possible solutions:
|
||||
# Reduce memory load on the system
|
||||
# Increase physical memory or swap space
|
||||
# Check if swap backing store is full
|
||||
# Decrease Java heap size (-Xmx/-Xms)
|
||||
# Decrease number of Java threads
|
||||
# Decrease Java thread stack sizes (-Xss)
|
||||
# Set larger code cache with -XX:ReservedCodeCacheSize=
|
||||
# JVM is running with Unscaled Compressed Oops mode in which the Java heap is
|
||||
# placed in the first 4GB address space. The Java Heap base address is the
|
||||
# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress
|
||||
# to set the Java Heap base and to place the Java Heap above 4GB virtual address.
|
||||
# This output file may be truncated or incomplete.
|
||||
#
|
||||
# Out of Memory Error (allocation.cpp:44), pid=17560, tid=11928
|
||||
#
|
||||
# JRE version: OpenJDK Runtime Environment Temurin-21.0.9+10 (21.0.9+10) (build 21.0.9+10-LTS)
|
||||
# Java VM: OpenJDK 64-Bit Server VM Temurin-21.0.9+10 (21.0.9+10-LTS, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, parallel gc, windows-amd64)
|
||||
# No core dump will be written. Minidumps are not enabled by default on client versions of Windows
|
||||
#
|
||||
|
||||
--------------- S U M M A R Y ------------
|
||||
|
||||
Command Line: --add-modules=ALL-SYSTEM --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/sun.nio.fs=ALL-UNNAMED -Declipse.application=org.eclipse.jdt.ls.core.id1 -Dosgi.bundles.defaultStartLevel=4 -Declipse.product=org.eclipse.jdt.ls.core.product -Djava.import.generatesMetadataFilesAtProjectRoot=false -DDetectVMInstallationsJob.disabled=true -Dfile.encoding=utf8 -XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable -javaagent:c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\lombok\lombok-1.18.39-4050.jar -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:\Users\Lincpay\AppData\Roaming\Code\User\workspaceStorage\abb5375ad198b0834a895dbe2777821e\redhat.java -Daether.dependencyCollector.impl=bf c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\server\plugins\org.eclipse.equinox.launcher_1.7.100.v20251111-0406.jar -configuration c:\Users\Lincpay\AppData\Roaming\Code\User\globalStorage\redhat.java\1.51.0\config_win -data c:\Users\Lincpay\AppData\Roaming\Code\User\workspaceStorage\abb5375ad198b0834a895dbe2777821e\redhat.java\jdt_ws --pipe=\\.\pipe\lsp-d9bf6c0eeb4dea7218c68c5739457689-sock
|
||||
|
||||
Host: Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz, 8 cores, 15G, Windows 11 , 64 bit Build 26100 (10.0.26100.6725)
|
||||
Time: Mon Jan 12 10:55:29 2026 India Standard Time elapsed time: 2458.902032 seconds (0d 0h 40m 58s)
|
||||
|
||||
--------------- T H R E A D ---------------
|
||||
|
||||
Current thread (0x000001bbd7fe60b0): JavaThread "Attach Listener" daemon [_thread_in_vm, id=11928, stack(0x0000005f24a00000,0x0000005f24b00000) (1024K)]
|
||||
|
||||
Stack: [0x0000005f24a00000,0x0000005f24b00000]
|
||||
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
|
||||
V [jvm.dll+0x6d6e29]
|
||||
V [jvm.dll+0x8b4b76]
|
||||
V [jvm.dll+0x8b712e]
|
||||
V [jvm.dll+0x8b7813]
|
||||
V [jvm.dll+0x283d86]
|
||||
V [jvm.dll+0xc1277]
|
||||
V [jvm.dll+0x6d76d9]
|
||||
V [jvm.dll+0x133466]
|
||||
V [jvm.dll+0x3f7ea6]
|
||||
V [jvm.dll+0x85e9ad]
|
||||
V [jvm.dll+0x6d565d]
|
||||
C [ucrtbase.dll+0x37b0]
|
||||
C [KERNEL32.DLL+0x2e8d7]
|
||||
C [ntdll.dll+0x8c53c]
|
||||
|
||||
|
||||
--------------- P R O C E S S ---------------
|
||||
|
||||
Threads class SMR info:
|
||||
_java_thread_list=0x000001bbf5edd5c0, length=35, elements={
|
||||
0x000001bbd806b110, 0x000001bbd812a4b0, 0x000001bbd812daf0, 0x000001bbd7fe52e0,
|
||||
0x000001bbd7fe60b0, 0x000001bbd7fe8260, 0x000001bbd7feadf0, 0x000001bbd7ff74f0,
|
||||
0x000001bbf02f78a0, 0x000001bbf0435cf0, 0x000001bbf05d4750, 0x000001bbf05e6770,
|
||||
0x000001bbf0e5b9f0, 0x000001bbf0ac41f0, 0x000001bbf0aca770, 0x000001bbf0751f70,
|
||||
0x000001bbf5946030, 0x000001bbf57e1fc0, 0x000001bbf0b2aa00, 0x000001bbf0809680,
|
||||
0x000001bbf83b0560, 0x000001bbf83b2cc0, 0x000001bbf83b39e0, 0x000001bbf83b1910,
|
||||
0x000001bbf83b0bf0, 0x000001bbf83b4700, 0x000001bbf83b1280, 0x000001bbf83b5420,
|
||||
0x000001bbf83b4d90, 0x000001bbf83b1fa0, 0x000001bbf83b5ab0, 0x000001bbf83b6140,
|
||||
0x000001bbf83b6e60, 0x000001bbf83b7b80, 0x000001bbf0cf4d60
|
||||
}
|
||||
|
||||
Java Threads: ( => current thread )
|
||||
0x000001bbd806b110 JavaThread "main" [_thread_blocked, id=5300, stack(0x0000005f24300000,0x0000005f24400000) (1024K)]
|
||||
0x000001bbd812a4b0 JavaThread "Reference Handler" daemon [_thread_blocked, id=17440, stack(0x0000005f24700000,0x0000005f24800000) (1024K)]
|
||||
0x000001bbd812daf0 JavaThread "Finalizer" daemon [_thread_blocked, id=9728, stack(0x0000005f24800000,0x0000005f24900000) (1024K)]
|
||||
0x000001bbd7fe52e0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=13724, stack(0x0000005f24900000,0x0000005f24a00000) (1024K)]
|
||||
=>0x000001bbd7fe60b0 JavaThread "Attach Listener" daemon [_thread_in_vm, id=11928, stack(0x0000005f24a00000,0x0000005f24b00000) (1024K)]
|
||||
0x000001bbd7fe8260 JavaThread "Service Thread" daemon [_thread_blocked, id=17620, stack(0x0000005f24b00000,0x0000005f24c00000) (1024K)]
|
||||
0x000001bbd7feadf0 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=17040, stack(0x0000005f24c00000,0x0000005f24d00000) (1024K)]
|
||||
0x000001bbd7ff74f0 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=14280, stack(0x0000005f24d00000,0x0000005f24e00000) (1024K)]
|
||||
0x000001bbf02f78a0 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=14472, stack(0x0000005f24e00000,0x0000005f24f00000) (1024K)]
|
||||
0x000001bbf0435cf0 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=17656, stack(0x0000005f24f00000,0x0000005f25000000) (1024K)]
|
||||
0x000001bbf05d4750 JavaThread "Notification Thread" daemon [_thread_blocked, id=17648, stack(0x0000005f25100000,0x0000005f25200000) (1024K)]
|
||||
0x000001bbf05e6770 JavaThread "Active Thread: Equinox Container: 8a7227d3-6f18-4dfa-b5e8-383ec85e9893" [_thread_blocked, id=2832, stack(0x0000005f25900000,0x0000005f25a00000) (1024K)]
|
||||
0x000001bbf0e5b9f0 JavaThread "Refresh Thread: Equinox Container: 8a7227d3-6f18-4dfa-b5e8-383ec85e9893" daemon [_thread_blocked, id=1920, stack(0x0000005f25a00000,0x0000005f25b00000) (1024K)]
|
||||
0x000001bbf0ac41f0 JavaThread "Framework Event Dispatcher: Equinox Container: 8a7227d3-6f18-4dfa-b5e8-383ec85e9893" daemon [_thread_blocked, id=16204, stack(0x0000005f25b00000,0x0000005f25c00000) (1024K)]
|
||||
0x000001bbf0aca770 JavaThread "Start Level: Equinox Container: 8a7227d3-6f18-4dfa-b5e8-383ec85e9893" daemon [_thread_blocked, id=5656, stack(0x0000005f25000000,0x0000005f25100000) (1024K)]
|
||||
0x000001bbf0751f70 JavaThread "Bundle File Closer" daemon [_thread_blocked, id=4792, stack(0x0000005f25e00000,0x0000005f25f00000) (1024K)]
|
||||
0x000001bbf5946030 JavaThread "SCR Component Actor" daemon [_thread_blocked, id=17508, stack(0x0000005f25d00000,0x0000005f25e00000) (1024K)]
|
||||
0x000001bbf57e1fc0 JavaThread "Worker-JM" [_thread_blocked, id=17632, stack(0x0000005f26000000,0x0000005f26100000) (1024K)]
|
||||
0x000001bbf0b2aa00 JavaThread "JNA Cleaner" daemon [_thread_blocked, id=15484, stack(0x0000005f25c00000,0x0000005f25d00000) (1024K)]
|
||||
0x000001bbf0809680 JavaThread "Worker-2" [_thread_blocked, id=11760, stack(0x0000005f26400000,0x0000005f26500000) (1024K)]
|
||||
0x000001bbf83b0560 JavaThread "Java indexing" daemon [_thread_blocked, id=17644, stack(0x0000005f26500000,0x0000005f26600000) (1024K)]
|
||||
0x000001bbf83b2cc0 JavaThread "Worker-3" [_thread_blocked, id=2784, stack(0x0000005f26600000,0x0000005f26700000) (1024K)]
|
||||
0x000001bbf83b39e0 JavaThread "Thread-1" daemon [_thread_in_native, id=17880, stack(0x0000005f26b00000,0x0000005f26c00000) (1024K)]
|
||||
0x000001bbf83b1910 JavaThread "Thread-2" daemon [_thread_in_native, id=11460, stack(0x0000005f26c00000,0x0000005f26d00000) (1024K)]
|
||||
0x000001bbf83b0bf0 JavaThread "Thread-3" daemon [_thread_in_native, id=17608, stack(0x0000005f26d00000,0x0000005f26e00000) (1024K)]
|
||||
0x000001bbf83b4700 JavaThread "Thread-4" daemon [_thread_in_native, id=7776, stack(0x0000005f26e00000,0x0000005f26f00000) (1024K)]
|
||||
0x000001bbf83b1280 JavaThread "Thread-5" daemon [_thread_in_native, id=14608, stack(0x0000005f26f00000,0x0000005f27000000) (1024K)]
|
||||
0x000001bbf83b5420 JavaThread "Thread-6" daemon [_thread_in_native, id=17524, stack(0x0000005f27000000,0x0000005f27100000) (1024K)]
|
||||
0x000001bbf83b4d90 JavaThread "Thread-7" daemon [_thread_in_native, id=1328, stack(0x0000005f27100000,0x0000005f27200000) (1024K)]
|
||||
0x000001bbf83b1fa0 JavaThread "Thread-8" daemon [_thread_in_native, id=18348, stack(0x0000005f27200000,0x0000005f27300000) (1024K)]
|
||||
0x000001bbf83b5ab0 JavaThread "Thread-9" daemon [_thread_in_native, id=18312, stack(0x0000005f27300000,0x0000005f27400000) (1024K)]
|
||||
0x000001bbf83b6140 JavaThread "pool-2-thread-1" [_thread_blocked, id=5408, stack(0x0000005f27400000,0x0000005f27500000) (1024K)]
|
||||
0x000001bbf83b6e60 JavaThread "WorkspaceEventsHandler" [_thread_blocked, id=18040, stack(0x0000005f27600000,0x0000005f27700000) (1024K)]
|
||||
0x000001bbf83b7b80 JavaThread "pool-1-thread-1" [_thread_blocked, id=18324, stack(0x0000005f27700000,0x0000005f27800000) (1024K)]
|
||||
0x000001bbf0cf4d60 JavaThread "Timer-0" [_thread_blocked, id=14520, stack(0x0000005f28000000,0x0000005f28100000) (1024K)]
|
||||
Total: 35
|
||||
|
||||
Other Threads:
|
||||
0x000001bbd7fe1e30 VMThread "VM Thread" [id=17652, stack(0x0000005f24600000,0x0000005f24700000) (1024K)]
|
||||
0x000001bbd7efca00 WatcherThread "VM Periodic Task Thread" [id=17636, stack(0x0000005f24500000,0x0000005f24600000) (1024K)]
|
||||
0x000001bbd8089840 WorkerThread "GC Thread#0" [id=17616, stack(0x0000005f24400000,0x0000005f24500000) (1024K)]
|
||||
0x000001bbf08668b0 WorkerThread "GC Thread#1" [id=17856, stack(0x0000005f25300000,0x0000005f25400000) (1024K)]
|
||||
0x000001bbf0866c50 WorkerThread "GC Thread#2" [id=17680, stack(0x0000005f25400000,0x0000005f25500000) (1024K)]
|
||||
0x000001bbf0866ff0 WorkerThread "GC Thread#3" [id=18060, stack(0x0000005f25500000,0x0000005f25600000) (1024K)]
|
||||
0x000001bbf0d203d0 WorkerThread "GC Thread#4" [id=17708, stack(0x0000005f25600000,0x0000005f25700000) (1024K)]
|
||||
0x000001bbf0d20770 WorkerThread "GC Thread#5" [id=17852, stack(0x0000005f25700000,0x0000005f25800000) (1024K)]
|
||||
0x000001bbf0d20b10 WorkerThread "GC Thread#6" [id=5232, stack(0x0000005f25800000,0x0000005f25900000) (1024K)]
|
||||
0x000001bbf0e57b90 WorkerThread "GC Thread#7" [id=7540, stack(0x0000005f25200000,0x0000005f25300000) (1024K)]
|
||||
Total: 10
|
||||
|
||||
Threads with active compile tasks:
|
||||
Total: 0
|
||||
|
||||
VM state: not at safepoint (normal execution)
|
||||
|
||||
VM Mutex/Monitor currently owned by a thread: None
|
||||
|
||||
Heap address: 0x0000000080000000, size: 2048 MB, Compressed Oops mode: 32-bit
|
||||
|
||||
CDS archive(s) mapped at: [0x000001bb80000000-0x000001bb80ba0000-0x000001bb80ba0000), size 12189696, SharedBaseAddress: 0x000001bb80000000, ArchiveRelocationMode: 1.
|
||||
Compressed class space mapped at: 0x000001bb81000000-0x000001bbc1000000, reserved size: 1073741824
|
||||
Narrow klass base: 0x000001bb80000000, Narrow klass shift: 0, Narrow klass range: 0x100000000
|
||||
|
||||
GC Precious Log:
|
||||
CardTable entry size: 512
|
||||
CPUs: 8 total, 8 available
|
||||
Memory: 16198M
|
||||
Large Page Support: Disabled
|
||||
NUMA Support: Disabled
|
||||
Compressed Oops: Enabled (32-bit)
|
||||
Alignments: Space 512K, Generation 512K, Heap 2M
|
||||
Heap Min Capacity: 100M
|
||||
Heap Initial Capacity: 100M
|
||||
Heap Max Capacity: 2G
|
||||
Pre-touch: Disabled
|
||||
Parallel Workers: 8
|
||||
|
||||
Heap:
|
||||
PSYoungGen total 6656K, used 1188K [0x00000000d5580000, 0x00000000d5d00000, 0x0000000100000000)
|
||||
eden space 6144K, 14% used [0x00000000d5580000,0x00000000d56610f8,0x00000000d5b80000)
|
||||
from space 512K, 56% used [0x00000000d5c80000,0x00000000d5cc8000,0x00000000d5d00000)
|
||||
to space 512K, 0% used [0x00000000d5c00000,0x00000000d5c00000,0x00000000d5c80000)
|
||||
ParOldGen total 120320K, used 119893K [0x0000000080000000, 0x0000000087580000, 0x00000000d5580000)
|
||||
object space 120320K, 99% used [0x0000000080000000,0x0000000087515668,0x0000000087580000)
|
||||
Metaspace used 63591K, committed 65024K, reserved 1114112K
|
||||
class space used 7351K, committed 7936K, reserved 1048576K
|
||||
|
||||
Card table byte_map: [0x000001bbd7a10000,0x000001bbd7e20000] _byte_map_base: 0x000001bbd7610000
|
||||
|
||||
Marking Bits: (ParMarkBitMap*) 0x00007ff87ff82460
|
||||
Begin Bits: [0x000001bbea520000, 0x000001bbec520000)
|
||||
End Bits: [0x000001bbec520000, 0x000001bbee520000)
|
||||
|
||||
Polling page: 0x000001bbd6090000
|
||||
|
||||
Metaspace:
|
||||
|
||||
Usage:
|
||||
Non-class: 54.92 MB used.
|
||||
Class: 7.18 MB used.
|
||||
Both: 62.10 MB used.
|
||||
|
||||
Virtual space:
|
||||
Non-class space: 64.00 MB reserved, 55.75 MB ( 87%) committed, 1 nodes.
|
||||
Class space: 1.00 GB reserved, 7.75 MB ( <1%) committed, 1 nodes.
|
||||
Both: 1.06 GB reserved, 63.50 MB ( 6%) committed.
|
||||
|
||||
Chunk freelists:
|
||||
Non-Class: 7.73 MB
|
||||
Class: 8.31 MB
|
||||
Both: 16.05 MB
|
||||
|
||||
MaxMetaspaceSize: unlimited
|
||||
CompressedClassSpaceSize: 1.00 GB
|
||||
Initial GC threshold: 21.00 MB
|
||||
Current GC threshold: 98.12 MB
|
||||
CDS: on
|
||||
- commit_granule_bytes: 65536.
|
||||
- commit_granule_words: 8192.
|
||||
- virtual_space_node_default_size: 8388608.
|
||||
- enlarge_chunks_in_place: 1.
|
||||
- use_allocation_guard: 0.
|
||||
|
||||
|
||||
Internal statistics:
|
||||
|
||||
num_allocs_failed_limit: 13.
|
||||
num_arena_births: 1064.
|
||||
num_arena_deaths: 14.
|
||||
num_vsnodes_births: 2.
|
||||
num_vsnodes_deaths: 0.
|
||||
num_space_committed: 1016.
|
||||
num_space_uncommitted: 0.
|
||||
num_chunks_returned_to_freelist: 27.
|
||||
num_chunks_taken_from_freelist: 3737.
|
||||
num_chunk_merges: 18.
|
||||
num_chunk_splits: 2344.
|
||||
num_chunks_enlarged: 1407.
|
||||
num_inconsistent_stats: 0.
|
||||
|
||||
CodeHeap 'non-profiled nmethods': size=120000Kb used=6682Kb max_used=6682Kb free=113318Kb
|
||||
bounds [0x000001bbe2d40000, 0x000001bbe33d0000, 0x000001bbea270000]
|
||||
CodeHeap 'profiled nmethods': size=120000Kb used=18793Kb max_used=18793Kb free=101206Kb
|
||||
bounds [0x000001bbdb270000, 0x000001bbdc4d0000, 0x000001bbe27a0000]
|
||||
CodeHeap 'non-nmethods': size=5760Kb used=1430Kb max_used=1529Kb free=4329Kb
|
||||
bounds [0x000001bbe27a0000, 0x000001bbe2a10000, 0x000001bbe2d40000]
|
||||
CodeCache: size=245760Kb, used=26905Kb, max_used=27004Kb, free=218853Kb
|
||||
total_blobs=10262, nmethods=9530, adapters=637, full_count=0
|
||||
Compilation: enabled, stopped_count=0, restarted_count=0
|
||||
|
||||
Compilation events (20 events):
|
||||
Event: 2290.471 Thread 0x000001bbf02f78a0 10368 3 java.util.HashMap::compute (339 bytes)
|
||||
Event: 2290.479 Thread 0x000001bbf02f78a0 nmethod 10368 0x000001bbdc4c3590 code [0x000001bbdc4c38c0, 0x000001bbdc4c4d98]
|
||||
Event: 2290.479 Thread 0x000001bbf02f78a0 10366 1 org.eclipse.core.internal.events.BuilderPersistentInfo::setInterestingProjects (6 bytes)
|
||||
Event: 2290.479 Thread 0x000001bbf02f78a0 nmethod 10366 0x000001bbe33c4610 code [0x000001bbe33c47a0, 0x000001bbe33c4880]
|
||||
Event: 2290.479 Thread 0x000001bbf02f78a0 10367 1 org.eclipse.core.internal.events.BuilderPersistentInfo::getLastBuiltTree (5 bytes)
|
||||
Event: 2290.479 Thread 0x000001bbf02f78a0 nmethod 10367 0x000001bbe33c4910 code [0x000001bbe33c4aa0, 0x000001bbe33c4b68]
|
||||
Event: 2290.605 Thread 0x000001bbf02f78a0 10369 3 java.util.Formatter::parse (208 bytes)
|
||||
Event: 2290.610 Thread 0x000001bbd7ff74f0 10372 4 com.google.gson.stream.JsonWriter::beforeValue (140 bytes)
|
||||
Event: 2290.615 Thread 0x000001bbf02f78a0 nmethod 10369 0x000001bbdc4c5390 code [0x000001bbdc4c5860, 0x000001bbdc4c8168]
|
||||
Event: 2290.615 Thread 0x000001bbf02f78a0 10370 3 java.lang.AbstractStringBuilder::append (70 bytes)
|
||||
Event: 2290.616 Thread 0x000001bbf02f78a0 nmethod 10370 0x000001bbdc4c9290 code [0x000001bbdc4c94a0, 0x000001bbdc4c99d0]
|
||||
Event: 2290.616 Thread 0x000001bbf02f78a0 10371 3 java.lang.AbstractStringBuilder::inflateIfNeededFor (22 bytes)
|
||||
Event: 2290.617 Thread 0x000001bbf02f78a0 nmethod 10371 0x000001bbdc4c9b90 code [0x000001bbdc4c9d40, 0x000001bbdc4c9f50]
|
||||
Event: 2290.638 Thread 0x000001bbd7ff74f0 nmethod 10372 0x000001bbe33c4c10 code [0x000001bbe33c4e40, 0x000001bbe33c5810]
|
||||
Event: 2320.197 Thread 0x000001bbf02f78a0 10373 3 java.util.logging.LogManager::getProperty (9 bytes)
|
||||
Event: 2320.198 Thread 0x000001bbf02f78a0 nmethod 10373 0x000001bbdc4ca090 code [0x000001bbdc4ca240, 0x000001bbdc4ca418]
|
||||
Event: 2373.347 Thread 0x000001bbf02f78a0 10374 1 org.eclipse.osgi.internal.framework.EquinoxContainer::getStorage (5 bytes)
|
||||
Event: 2373.348 Thread 0x000001bbf02f78a0 nmethod 10374 0x000001bbe33c5f10 code [0x000001bbe33c60a0, 0x000001bbe33c6168]
|
||||
Event: 2399.064 Thread 0x000001bbd7ff74f0 10375 ! 4 java.lang.Object::wait (50 bytes)
|
||||
Event: 2399.090 Thread 0x000001bbd7ff74f0 nmethod 10375 0x000001bbe33c6210 code [0x000001bbe33c63e0, 0x000001bbe33c65a8]
|
||||
|
||||
GC Heap History (20 events):
|
||||
Event: 50.456 GC heap before
|
||||
{Heap before GC invocations=122 (full 3):
|
||||
PSYoungGen total 7168K, used 7135K [0x00000000d5580000, 0x00000000d5f00000, 0x0000000100000000)
|
||||
eden space 6144K, 99% used [0x00000000d5580000,0x00000000d5b7fff8,0x00000000d5b80000)
|
||||
from space 1024K, 96% used [0x00000000d5d00000,0x00000000d5df8000,0x00000000d5e00000)
|
||||
to space 1536K, 0% used [0x00000000d5b80000,0x00000000d5b80000,0x00000000d5d00000)
|
||||
ParOldGen total 116224K, used 115821K [0x0000000080000000, 0x0000000087180000, 0x00000000d5580000)
|
||||
object space 116224K, 99% used [0x0000000080000000,0x000000008711b4e8,0x0000000087180000)
|
||||
Metaspace used 62151K, committed 63552K, reserved 1114112K
|
||||
class space used 7224K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.459 GC heap after
|
||||
{Heap after GC invocations=122 (full 3):
|
||||
PSYoungGen total 7168K, used 608K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 1024K, 59% used [0x00000000d5b80000,0x00000000d5c18000,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 116736K, used 116730K [0x0000000080000000, 0x0000000087200000, 0x00000000d5580000)
|
||||
object space 116736K, 99% used [0x0000000080000000,0x00000000871feb18,0x0000000087200000)
|
||||
Metaspace used 62151K, committed 63552K, reserved 1114112K
|
||||
class space used 7224K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.485 GC heap before
|
||||
{Heap before GC invocations=123 (full 3):
|
||||
PSYoungGen total 7168K, used 6752K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 100% used [0x00000000d5580000,0x00000000d5b80000,0x00000000d5b80000)
|
||||
from space 1024K, 59% used [0x00000000d5b80000,0x00000000d5c18000,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 116736K, used 116730K [0x0000000080000000, 0x0000000087200000, 0x00000000d5580000)
|
||||
object space 116736K, 99% used [0x0000000080000000,0x00000000871feb18,0x0000000087200000)
|
||||
Metaspace used 62230K, committed 63616K, reserved 1114112K
|
||||
class space used 7227K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.488 GC heap after
|
||||
{Heap after GC invocations=123 (full 3):
|
||||
PSYoungGen total 7168K, used 576K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 1024K, 56% used [0x00000000d5c80000,0x00000000d5d10000,0x00000000d5d80000)
|
||||
to space 1024K, 0% used [0x00000000d5b80000,0x00000000d5b80000,0x00000000d5c80000)
|
||||
ParOldGen total 117248K, used 117234K [0x0000000080000000, 0x0000000087280000, 0x00000000d5580000)
|
||||
object space 117248K, 99% used [0x0000000080000000,0x000000008727cb18,0x0000000087280000)
|
||||
Metaspace used 62230K, committed 63616K, reserved 1114112K
|
||||
class space used 7227K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.505 GC heap before
|
||||
{Heap before GC invocations=124 (full 3):
|
||||
PSYoungGen total 7168K, used 6719K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 99% used [0x00000000d5580000,0x00000000d5b7fff8,0x00000000d5b80000)
|
||||
from space 1024K, 56% used [0x00000000d5c80000,0x00000000d5d10000,0x00000000d5d80000)
|
||||
to space 1024K, 0% used [0x00000000d5b80000,0x00000000d5b80000,0x00000000d5c80000)
|
||||
ParOldGen total 117248K, used 117234K [0x0000000080000000, 0x0000000087280000, 0x00000000d5580000)
|
||||
object space 117248K, 99% used [0x0000000080000000,0x000000008727cb18,0x0000000087280000)
|
||||
Metaspace used 62234K, committed 63616K, reserved 1114112K
|
||||
class space used 7227K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.507 GC heap after
|
||||
{Heap after GC invocations=124 (full 3):
|
||||
PSYoungGen total 7168K, used 576K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 1024K, 56% used [0x00000000d5b80000,0x00000000d5c10000,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 117760K, used 117706K [0x0000000080000000, 0x0000000087300000, 0x00000000d5580000)
|
||||
object space 117760K, 99% used [0x0000000080000000,0x00000000872f2b18,0x0000000087300000)
|
||||
Metaspace used 62234K, committed 63616K, reserved 1114112K
|
||||
class space used 7227K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.518 GC heap before
|
||||
{Heap before GC invocations=125 (full 3):
|
||||
PSYoungGen total 7168K, used 6720K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 100% used [0x00000000d5580000,0x00000000d5b80000,0x00000000d5b80000)
|
||||
from space 1024K, 56% used [0x00000000d5b80000,0x00000000d5c10000,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 117760K, used 117706K [0x0000000080000000, 0x0000000087300000, 0x00000000d5580000)
|
||||
object space 117760K, 99% used [0x0000000080000000,0x00000000872f2b18,0x0000000087300000)
|
||||
Metaspace used 62234K, committed 63616K, reserved 1114112K
|
||||
class space used 7227K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.520 GC heap after
|
||||
{Heap after GC invocations=125 (full 3):
|
||||
PSYoungGen total 7168K, used 608K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 1024K, 59% used [0x00000000d5c80000,0x00000000d5d18000,0x00000000d5d80000)
|
||||
to space 1024K, 0% used [0x00000000d5b80000,0x00000000d5b80000,0x00000000d5c80000)
|
||||
ParOldGen total 118272K, used 118170K [0x0000000080000000, 0x0000000087380000, 0x00000000d5580000)
|
||||
object space 118272K, 99% used [0x0000000080000000,0x0000000087366b18,0x0000000087380000)
|
||||
Metaspace used 62234K, committed 63616K, reserved 1114112K
|
||||
class space used 7227K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.552 GC heap before
|
||||
{Heap before GC invocations=126 (full 3):
|
||||
PSYoungGen total 7168K, used 6751K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 99% used [0x00000000d5580000,0x00000000d5b7ffd8,0x00000000d5b80000)
|
||||
from space 1024K, 59% used [0x00000000d5c80000,0x00000000d5d18000,0x00000000d5d80000)
|
||||
to space 1024K, 0% used [0x00000000d5b80000,0x00000000d5b80000,0x00000000d5c80000)
|
||||
ParOldGen total 118272K, used 118170K [0x0000000080000000, 0x0000000087380000, 0x00000000d5580000)
|
||||
object space 118272K, 99% used [0x0000000080000000,0x0000000087366b18,0x0000000087380000)
|
||||
Metaspace used 62379K, committed 63744K, reserved 1114112K
|
||||
class space used 7244K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.555 GC heap after
|
||||
{Heap after GC invocations=126 (full 3):
|
||||
PSYoungGen total 7168K, used 608K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 1024K, 59% used [0x00000000d5b80000,0x00000000d5c18000,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 118784K, used 118644K [0x0000000080000000, 0x0000000087400000, 0x00000000d5580000)
|
||||
object space 118784K, 99% used [0x0000000080000000,0x00000000873dd1c8,0x0000000087400000)
|
||||
Metaspace used 62379K, committed 63744K, reserved 1114112K
|
||||
class space used 7244K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.620 GC heap before
|
||||
{Heap before GC invocations=127 (full 3):
|
||||
PSYoungGen total 7168K, used 6751K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 99% used [0x00000000d5580000,0x00000000d5b7fe40,0x00000000d5b80000)
|
||||
from space 1024K, 59% used [0x00000000d5b80000,0x00000000d5c18000,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 118784K, used 118644K [0x0000000080000000, 0x0000000087400000, 0x00000000d5580000)
|
||||
object space 118784K, 99% used [0x0000000080000000,0x00000000873dd1c8,0x0000000087400000)
|
||||
Metaspace used 62507K, committed 63808K, reserved 1114112K
|
||||
class space used 7256K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.622 GC heap after
|
||||
{Heap after GC invocations=127 (full 3):
|
||||
PSYoungGen total 7168K, used 644K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 1024K, 62% used [0x00000000d5c80000,0x00000000d5d211e0,0x00000000d5d80000)
|
||||
to space 1024K, 0% used [0x00000000d5b80000,0x00000000d5b80000,0x00000000d5c80000)
|
||||
ParOldGen total 119296K, used 119012K [0x0000000080000000, 0x0000000087480000, 0x00000000d5580000)
|
||||
object space 119296K, 99% used [0x0000000080000000,0x00000000874391c8,0x0000000087480000)
|
||||
Metaspace used 62507K, committed 63808K, reserved 1114112K
|
||||
class space used 7256K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.784 GC heap before
|
||||
{Heap before GC invocations=128 (full 3):
|
||||
PSYoungGen total 7168K, used 6788K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 100% used [0x00000000d5580000,0x00000000d5b80000,0x00000000d5b80000)
|
||||
from space 1024K, 62% used [0x00000000d5c80000,0x00000000d5d211e0,0x00000000d5d80000)
|
||||
to space 1024K, 0% used [0x00000000d5b80000,0x00000000d5b80000,0x00000000d5c80000)
|
||||
ParOldGen total 119296K, used 119012K [0x0000000080000000, 0x0000000087480000, 0x00000000d5580000)
|
||||
object space 119296K, 99% used [0x0000000080000000,0x00000000874391c8,0x0000000087480000)
|
||||
Metaspace used 62618K, committed 63936K, reserved 1114112K
|
||||
class space used 7264K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 50.785 GC heap after
|
||||
{Heap after GC invocations=128 (full 3):
|
||||
PSYoungGen total 7168K, used 256K [0x00000000d5580000, 0x00000000d5d00000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 1024K, 25% used [0x00000000d5b80000,0x00000000d5bc0000,0x00000000d5c80000)
|
||||
to space 512K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d00000)
|
||||
ParOldGen total 119296K, used 119156K [0x0000000080000000, 0x0000000087480000, 0x00000000d5580000)
|
||||
object space 119296K, 99% used [0x0000000080000000,0x000000008745d1c8,0x0000000087480000)
|
||||
Metaspace used 62618K, committed 63936K, reserved 1114112K
|
||||
class space used 7264K, committed 7808K, reserved 1048576K
|
||||
}
|
||||
Event: 480.441 GC heap before
|
||||
{Heap before GC invocations=129 (full 3):
|
||||
PSYoungGen total 7168K, used 6399K [0x00000000d5580000, 0x00000000d5d00000, 0x0000000100000000)
|
||||
eden space 6144K, 99% used [0x00000000d5580000,0x00000000d5b7fff8,0x00000000d5b80000)
|
||||
from space 1024K, 25% used [0x00000000d5b80000,0x00000000d5bc0000,0x00000000d5c80000)
|
||||
to space 512K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d00000)
|
||||
ParOldGen total 119296K, used 119156K [0x0000000080000000, 0x0000000087480000, 0x00000000d5580000)
|
||||
object space 119296K, 99% used [0x0000000080000000,0x000000008745d1c8,0x0000000087480000)
|
||||
Metaspace used 62870K, committed 64256K, reserved 1114112K
|
||||
class space used 7291K, committed 7872K, reserved 1048576K
|
||||
}
|
||||
Event: 480.453 GC heap after
|
||||
{Heap after GC invocations=129 (full 3):
|
||||
PSYoungGen total 6656K, used 416K [0x00000000d5580000, 0x00000000d5d00000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 512K, 81% used [0x00000000d5c80000,0x00000000d5ce8000,0x00000000d5d00000)
|
||||
to space 512K, 0% used [0x00000000d5c00000,0x00000000d5c00000,0x00000000d5c80000)
|
||||
ParOldGen total 119296K, used 119228K [0x0000000080000000, 0x0000000087480000, 0x00000000d5580000)
|
||||
object space 119296K, 99% used [0x0000000080000000,0x000000008746f1d8,0x0000000087480000)
|
||||
Metaspace used 62870K, committed 64256K, reserved 1114112K
|
||||
class space used 7291K, committed 7872K, reserved 1048576K
|
||||
}
|
||||
Event: 780.451 GC heap before
|
||||
{Heap before GC invocations=130 (full 3):
|
||||
PSYoungGen total 6656K, used 6560K [0x00000000d5580000, 0x00000000d5d00000, 0x0000000100000000)
|
||||
eden space 6144K, 100% used [0x00000000d5580000,0x00000000d5b80000,0x00000000d5b80000)
|
||||
from space 512K, 81% used [0x00000000d5c80000,0x00000000d5ce8000,0x00000000d5d00000)
|
||||
to space 512K, 0% used [0x00000000d5c00000,0x00000000d5c00000,0x00000000d5c80000)
|
||||
ParOldGen total 119296K, used 119228K [0x0000000080000000, 0x0000000087480000, 0x00000000d5580000)
|
||||
object space 119296K, 99% used [0x0000000080000000,0x000000008746f1d8,0x0000000087480000)
|
||||
Metaspace used 63446K, committed 64832K, reserved 1114112K
|
||||
class space used 7349K, committed 7936K, reserved 1048576K
|
||||
}
|
||||
Event: 780.455 GC heap after
|
||||
{Heap after GC invocations=130 (full 3):
|
||||
PSYoungGen total 6656K, used 480K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 512K, 93% used [0x00000000d5c00000,0x00000000d5c78020,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 119808K, used 119524K [0x0000000080000000, 0x0000000087500000, 0x00000000d5580000)
|
||||
object space 119808K, 99% used [0x0000000080000000,0x00000000874b91d8,0x0000000087500000)
|
||||
Metaspace used 63446K, committed 64832K, reserved 1114112K
|
||||
class space used 7349K, committed 7936K, reserved 1048576K
|
||||
}
|
||||
Event: 2290.285 GC heap before
|
||||
{Heap before GC invocations=131 (full 3):
|
||||
PSYoungGen total 6656K, used 6624K [0x00000000d5580000, 0x00000000d5d80000, 0x0000000100000000)
|
||||
eden space 6144K, 100% used [0x00000000d5580000,0x00000000d5b80000,0x00000000d5b80000)
|
||||
from space 512K, 93% used [0x00000000d5c00000,0x00000000d5c78020,0x00000000d5c80000)
|
||||
to space 1024K, 0% used [0x00000000d5c80000,0x00000000d5c80000,0x00000000d5d80000)
|
||||
ParOldGen total 119808K, used 119524K [0x0000000080000000, 0x0000000087500000, 0x00000000d5580000)
|
||||
object space 119808K, 99% used [0x0000000080000000,0x00000000874b91d8,0x0000000087500000)
|
||||
Metaspace used 63581K, committed 64960K, reserved 1114112K
|
||||
class space used 7351K, committed 7936K, reserved 1048576K
|
||||
}
|
||||
Event: 2290.347 GC heap after
|
||||
{Heap after GC invocations=131 (full 3):
|
||||
PSYoungGen total 6656K, used 288K [0x00000000d5580000, 0x00000000d5d00000, 0x0000000100000000)
|
||||
eden space 6144K, 0% used [0x00000000d5580000,0x00000000d5580000,0x00000000d5b80000)
|
||||
from space 512K, 56% used [0x00000000d5c80000,0x00000000d5cc8000,0x00000000d5d00000)
|
||||
to space 512K, 0% used [0x00000000d5c00000,0x00000000d5c00000,0x00000000d5c80000)
|
||||
ParOldGen total 120320K, used 119893K [0x0000000080000000, 0x0000000087580000, 0x00000000d5580000)
|
||||
object space 120320K, 99% used [0x0000000080000000,0x0000000087515668,0x0000000087580000)
|
||||
Metaspace used 63581K, committed 64960K, reserved 1114112K
|
||||
class space used 7351K, committed 7936K, reserved 1048576K
|
||||
}
|
||||
|
||||
Dll operation events (15 events):
|
||||
Event: 0.024 Loaded shared library c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\java.dll
|
||||
Event: 0.177 Loaded shared library c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\zip.dll
|
||||
Event: 0.210 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\instrument.dll
|
||||
Event: 0.217 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\net.dll
|
||||
Event: 0.220 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\nio.dll
|
||||
Event: 0.225 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\zip.dll
|
||||
Event: 0.252 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\jimage.dll
|
||||
Event: 0.395 Loaded shared library c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\verify.dll
|
||||
Event: 2.954 Loaded shared library C:\Users\Lincpay\AppData\Roaming\Code\User\globalStorage\redhat.java\1.51.0\config_win\org.eclipse.equinox.launcher\org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.1400.v20250801-0854\eclipse_11916.dll
|
||||
Event: 5.981 Loaded shared library C:\Users\Lincpay\AppData\Local\Temp\jna-1841511254\jna1170528911156299814.dll
|
||||
Event: 10.146 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\sunmscapi.dll
|
||||
Event: 10.263 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\extnet.dll
|
||||
Event: 30.636 Loaded shared library C:\Users\Lincpay\.gradle\native\1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac\windows-amd64\native-platform.dll
|
||||
Event: 46.903 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\management.dll
|
||||
Event: 46.906 Loaded shared library C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\management_ext.dll
|
||||
|
||||
Deoptimization events (20 events):
|
||||
Event: 1744.327 Thread 0x000001bbf0809680 DEOPT PACKING pc=0x000001bbe33997e4 sp=0x0000005f264fefc0
|
||||
Event: 1744.327 Thread 0x000001bbf0809680 DEOPT UNPACKING pc=0x000001bbe27f3aa2 sp=0x0000005f264fef00 mode 2
|
||||
Event: 2107.218 Thread 0x000001bbf83b2cc0 Uncommon trap: trap_request=0xffffffde fr.pc=0x000001bbe33a6c8c relative=0x00000000000016ec
|
||||
Event: 2107.218 Thread 0x000001bbf83b2cc0 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000001bbe33a6c8c method=org.eclipse.core.internal.dtree.AbstractDataTreeNode.storeStrings(Lorg/eclipse/core/internal/utils/StringPool;)V @ 31 c2
|
||||
Event: 2107.218 Thread 0x000001bbf83b2cc0 DEOPT PACKING pc=0x000001bbe33a6c8c sp=0x0000005f266feef0
|
||||
Event: 2107.219 Thread 0x000001bbf83b2cc0 DEOPT UNPACKING pc=0x000001bbe27f3aa2 sp=0x0000005f266feeb8 mode 2
|
||||
Event: 2107.221 Thread 0x000001bbf83b2cc0 Uncommon trap: trap_request=0xffffffde fr.pc=0x000001bbe33a9944 relative=0x0000000000000aa4
|
||||
Event: 2107.221 Thread 0x000001bbf83b2cc0 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000001bbe33a9944 method=org.eclipse.core.internal.dtree.AbstractDataTreeNode.storeStrings(Lorg/eclipse/core/internal/utils/StringPool;)V @ 31 c2
|
||||
Event: 2107.221 Thread 0x000001bbf83b2cc0 DEOPT PACKING pc=0x000001bbe33a9944 sp=0x0000005f266fee50
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 DEOPT UNPACKING pc=0x000001bbe27f3aa2 sp=0x0000005f266fee38 mode 2
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 Uncommon trap: trap_request=0xffffffde fr.pc=0x000001bbe33a9944 relative=0x0000000000000aa4
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000001bbe33a9944 method=org.eclipse.core.internal.dtree.AbstractDataTreeNode.storeStrings(Lorg/eclipse/core/internal/utils/StringPool;)V @ 31 c2
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 DEOPT PACKING pc=0x000001bbe33a9944 sp=0x0000005f266fedd0
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 DEOPT UNPACKING pc=0x000001bbe27f3aa2 sp=0x0000005f266fedb8 mode 2
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 Uncommon trap: trap_request=0xffffffde fr.pc=0x000001bbe33a9944 relative=0x0000000000000aa4
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 Uncommon trap: reason=class_check action=maybe_recompile pc=0x000001bbe33a9944 method=org.eclipse.core.internal.dtree.AbstractDataTreeNode.storeStrings(Lorg/eclipse/core/internal/utils/StringPool;)V @ 31 c2
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 DEOPT PACKING pc=0x000001bbe33a9944 sp=0x0000005f266fed50
|
||||
Event: 2107.222 Thread 0x000001bbf83b2cc0 DEOPT UNPACKING pc=0x000001bbe27f3aa2 sp=0x0000005f266fed38 mode 2
|
||||
Event: 2107.282 Thread 0x000001bbf83b2cc0 DEOPT PACKING pc=0x000001bbdc3fcd2b sp=0x0000005f266fec00
|
||||
Event: 2107.282 Thread 0x000001bbf83b2cc0 DEOPT UNPACKING pc=0x000001bbe27f4242 sp=0x0000005f266fe070 mode 0
|
||||
|
||||
Classes loaded (20 events):
|
||||
Event: 780.401 Loading class java/util/stream/Nodes$CollectorTask$OfRef
|
||||
Event: 780.402 Loading class java/util/stream/Nodes$CollectorTask
|
||||
Event: 780.403 Loading class java/util/stream/Nodes$CollectorTask done
|
||||
Event: 780.403 Loading class java/util/stream/Nodes$CollectorTask$OfRef done
|
||||
Event: 780.403 Loading class java/util/function/LongFunction
|
||||
Event: 780.403 Loading class java/util/function/LongFunction done
|
||||
Event: 780.403 Loading class java/util/stream/Nodes$ConcNode
|
||||
Event: 780.403 Loading class java/util/stream/Nodes$AbstractConcNode
|
||||
Event: 780.403 Loading class java/util/stream/Nodes$AbstractConcNode done
|
||||
Event: 780.403 Loading class java/util/stream/Nodes$ConcNode done
|
||||
Event: 780.433 Loading class java/util/stream/Nodes$ToArrayTask$OfRef
|
||||
Event: 780.433 Loading class java/util/stream/Nodes$ToArrayTask
|
||||
Event: 780.434 Loading class java/util/stream/Nodes$ToArrayTask done
|
||||
Event: 780.434 Loading class java/util/stream/Nodes$ToArrayTask$OfRef done
|
||||
Event: 780.439 Loading class java/io/ObjectOutputStream$BlockDataOutputStream
|
||||
Event: 780.440 Loading class java/io/ObjectOutputStream$BlockDataOutputStream done
|
||||
Event: 780.440 Loading class java/io/ObjectOutputStream$HandleTable
|
||||
Event: 780.440 Loading class java/io/ObjectOutputStream$HandleTable done
|
||||
Event: 780.440 Loading class java/io/ObjectOutputStream$ReplaceTable
|
||||
Event: 780.440 Loading class java/io/ObjectOutputStream$ReplaceTable done
|
||||
|
||||
Classes unloaded (7 events):
|
||||
Event: 7.680 Thread 0x000001bbd7fe1e30 Unloading class 0x000001bb811a4000 'java/lang/invoke/LambdaForm$MH+0x000001bb811a4000'
|
||||
Event: 7.680 Thread 0x000001bbd7fe1e30 Unloading class 0x000001bb811a3c00 'java/lang/invoke/LambdaForm$MH+0x000001bb811a3c00'
|
||||
Event: 7.680 Thread 0x000001bbd7fe1e30 Unloading class 0x000001bb811a3800 'java/lang/invoke/LambdaForm$MH+0x000001bb811a3800'
|
||||
Event: 7.680 Thread 0x000001bbd7fe1e30 Unloading class 0x000001bb811a3400 'java/lang/invoke/LambdaForm$MH+0x000001bb811a3400'
|
||||
Event: 7.680 Thread 0x000001bbd7fe1e30 Unloading class 0x000001bb811a3000 'java/lang/invoke/LambdaForm$BMH+0x000001bb811a3000'
|
||||
Event: 7.680 Thread 0x000001bbd7fe1e30 Unloading class 0x000001bb811a2c00 'java/lang/invoke/LambdaForm$DMH+0x000001bb811a2c00'
|
||||
Event: 7.680 Thread 0x000001bbd7fe1e30 Unloading class 0x000001bb811a1800 'java/lang/invoke/LambdaForm$DMH+0x000001bb811a1800'
|
||||
|
||||
Classes redefined (0 events):
|
||||
No events
|
||||
|
||||
Internal exceptions (20 events):
|
||||
Event: 2290.281 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5b7b590}> (0x00000000d5b7b590)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.282 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5b7bf18}> (0x00000000d5b7bf18)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.282 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5b7d700}> (0x00000000d5b7d700)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.282 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5b7e348}> (0x00000000d5b7e348)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.285 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5b7fb30}> (0x00000000d5b7fb30)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.348 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5580788}> (0x00000000d5580788)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.348 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5581f70}> (0x00000000d5581f70)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.349 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d55828f8}> (0x00000000d55828f8)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.349 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d55840e0}> (0x00000000d55840e0)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.349 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5584a68}> (0x00000000d5584a68)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.350 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5586250}> (0x00000000d5586250)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.350 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5586bd8}> (0x00000000d5586bd8)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.351 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d55883c0}> (0x00000000d55883c0)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.351 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5588d48}> (0x00000000d5588d48)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.352 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d558a4e0}> (0x00000000d558a4e0)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.352 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d558b168}> (0x00000000d558b168)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.354 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d558dce0}> (0x00000000d558dce0)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.354 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d558e6a8}> (0x00000000d558e6a8)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.356 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d558ff40}> (0x00000000d558ff40)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
Event: 2290.356 Thread 0x000001bbf0809680 Exception <a 'sun/nio/fs/WindowsException'{0x00000000d5590908}> (0x00000000d5590908)
|
||||
thrown [s\src\hotspot\share\prims\jni.cpp, line 520]
|
||||
|
||||
ZGC Phase Switch (0 events):
|
||||
No events
|
||||
|
||||
VM Operations (20 events):
|
||||
Event: 1804.153 Executing VM operation: HandshakeAllThreads (HandshakeForDeflation)
|
||||
Event: 1804.153 Executing VM operation: HandshakeAllThreads (HandshakeForDeflation) done
|
||||
Event: 1804.154 Executing VM operation: RendezvousGCThreads
|
||||
Event: 1804.154 Executing VM operation: RendezvousGCThreads done
|
||||
Event: 1990.673 Executing VM operation: Cleanup
|
||||
Event: 1990.673 Executing VM operation: Cleanup done
|
||||
Event: 2015.728 Executing VM operation: Cleanup
|
||||
Event: 2015.743 Executing VM operation: Cleanup done
|
||||
Event: 2164.842 Executing VM operation: HandshakeAllThreads (HandshakeForDeflation)
|
||||
Event: 2164.842 Executing VM operation: HandshakeAllThreads (HandshakeForDeflation) done
|
||||
Event: 2164.842 Executing VM operation: RendezvousGCThreads
|
||||
Event: 2164.842 Executing VM operation: RendezvousGCThreads done
|
||||
Event: 2290.285 Executing VM operation: ParallelGCFailedAllocation (Allocation Failure)
|
||||
Event: 2290.347 Executing VM operation: ParallelGCFailedAllocation (Allocation Failure) done
|
||||
Event: 2291.352 Executing VM operation: Cleanup
|
||||
Event: 2291.353 Executing VM operation: Cleanup done
|
||||
Event: 2345.058 Executing VM operation: HandshakeAllThreads (HandshakeForDeflation)
|
||||
Event: 2345.058 Executing VM operation: HandshakeAllThreads (HandshakeForDeflation) done
|
||||
Event: 2345.059 Executing VM operation: RendezvousGCThreads
|
||||
Event: 2345.059 Executing VM operation: RendezvousGCThreads done
|
||||
|
||||
Memory protections (0 events):
|
||||
No events
|
||||
|
||||
Nmethod flushes (20 events):
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc03290
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc04f10
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc07810
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc07c90
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc08290
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc09990
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc09e10
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc0a390
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc0ac90
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc0b290
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc0bb10
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc0be90
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc0da90
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc0f190
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc13c90
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc17990
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc27c90
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc43410
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing nmethod 0x000001bbdbc45a10
|
||||
Event: 48.296 Thread 0x000001bbd7fe1e30 flushing osr nmethod 0x000001bbdbc5aa10
|
||||
|
||||
Events (20 events):
|
||||
Event: 1744.299 Thread 0x000001bbf0cf3320 Thread exited: 0x000001bbf0cf3320
|
||||
Event: 1744.299 Thread 0x000001bbf0cf2600 Thread exited: 0x000001bbf0cf2600
|
||||
Event: 1744.299 Thread 0x000001bbf0cf39b0 Thread exited: 0x000001bbf0cf39b0
|
||||
Event: 1744.299 Thread 0x000001bbf0cf46d0 Thread exited: 0x000001bbf0cf46d0
|
||||
Event: 2290.198 Thread 0x000001bbf0809680 Thread added: 0x000001bbf0cf39b0
|
||||
Event: 2290.207 Thread 0x000001bbf0cf39b0 Thread exited: 0x000001bbf0cf39b0
|
||||
Event: 2290.358 Thread 0x000001bbf0809680 Thread added: 0x000001bbf0cf5a80
|
||||
Event: 2290.361 Thread 0x000001bbf0cf5a80 Thread added: 0x000001bbf0cf53f0
|
||||
Event: 2290.362 Thread 0x000001bbf0cf5a80 Thread added: 0x000001bbf0cf2600
|
||||
Event: 2290.362 Thread 0x000001bbf0cf5a80 Thread added: 0x000001bbf0cf2c90
|
||||
Event: 2290.363 Thread 0x000001bbf0cf5a80 Thread added: 0x000001bbf0cf3320
|
||||
Event: 2290.365 Thread 0x000001bbf0cf5a80 Thread added: 0x000001bbf0cf39b0
|
||||
Event: 2290.365 Thread 0x000001bbf0cf53f0 Thread added: 0x000001bbf0cf74c0
|
||||
Event: 2290.372 Thread 0x000001bbf0cf2c90 Thread exited: 0x000001bbf0cf2c90
|
||||
Event: 2290.372 Thread 0x000001bbf0cf2600 Thread exited: 0x000001bbf0cf2600
|
||||
Event: 2290.372 Thread 0x000001bbf0cf39b0 Thread exited: 0x000001bbf0cf39b0
|
||||
Event: 2290.372 Thread 0x000001bbf0cf5a80 Thread exited: 0x000001bbf0cf5a80
|
||||
Event: 2290.372 Thread 0x000001bbf0cf53f0 Thread exited: 0x000001bbf0cf53f0
|
||||
Event: 2290.372 Thread 0x000001bbf0cf74c0 Thread exited: 0x000001bbf0cf74c0
|
||||
Event: 2290.372 Thread 0x000001bbf0cf3320 Thread exited: 0x000001bbf0cf3320
|
||||
|
||||
|
||||
Dynamic libraries:
|
||||
0x00007ff601390000 - 0x00007ff60139e000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\java.exe
|
||||
0x00007ff907940000 - 0x00007ff907ba8000 C:\WINDOWS\SYSTEM32\ntdll.dll
|
||||
0x00007ff906260000 - 0x00007ff906329000 C:\WINDOWS\System32\KERNEL32.DLL
|
||||
0x00007ff904ed0000 - 0x00007ff9052c2000 C:\WINDOWS\System32\KERNELBASE.dll
|
||||
0x00007ff904d80000 - 0x00007ff904ecb000 C:\WINDOWS\System32\ucrtbase.dll
|
||||
0x00007ff880a30000 - 0x00007ff880a48000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\jli.dll
|
||||
0x00007ff880a50000 - 0x00007ff880a6e000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\VCRUNTIME140.dll
|
||||
0x00007ff906aa0000 - 0x00007ff906c65000 C:\WINDOWS\System32\USER32.dll
|
||||
0x00007ff9056e0000 - 0x00007ff905707000 C:\WINDOWS\System32\win32u.dll
|
||||
0x00007ff8e7990000 - 0x00007ff8e7c23000 C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.6899_none_3e0efeeae32e88c1\COMCTL32.dll
|
||||
0x00007ff905d20000 - 0x00007ff905dc9000 C:\WINDOWS\System32\msvcrt.dll
|
||||
0x00007ff906020000 - 0x00007ff90604b000 C:\WINDOWS\System32\GDI32.dll
|
||||
0x00007ff904c50000 - 0x00007ff904d7d000 C:\WINDOWS\System32\gdi32full.dll
|
||||
0x00007ff905570000 - 0x00007ff905613000 C:\WINDOWS\System32\msvcp_win.dll
|
||||
0x00007ff906510000 - 0x00007ff90653f000 C:\WINDOWS\System32\IMM32.DLL
|
||||
0x00007ff8efef0000 - 0x00007ff8efefc000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\vcruntime140_1.dll
|
||||
0x00007ff880430000 - 0x00007ff8804bd000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\msvcp140.dll
|
||||
0x00007ff87f2c0000 - 0x00007ff880060000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\server\jvm.dll
|
||||
0x00007ff906060000 - 0x00007ff906114000 C:\WINDOWS\System32\ADVAPI32.dll
|
||||
0x00007ff905dd0000 - 0x00007ff905e76000 C:\WINDOWS\System32\sechost.dll
|
||||
0x00007ff9065e0000 - 0x00007ff9066f8000 C:\WINDOWS\System32\RPCRT4.dll
|
||||
0x00007ff907720000 - 0x00007ff907794000 C:\WINDOWS\System32\WS2_32.dll
|
||||
0x00007ff904950000 - 0x00007ff9049ae000 C:\WINDOWS\SYSTEM32\POWRPROF.dll
|
||||
0x00007ff8f8250000 - 0x00007ff8f825b000 C:\WINDOWS\SYSTEM32\VERSION.dll
|
||||
0x00007ff8e88e0000 - 0x00007ff8e8915000 C:\WINDOWS\SYSTEM32\WINMM.dll
|
||||
0x00007ff904930000 - 0x00007ff904944000 C:\WINDOWS\SYSTEM32\UMPDC.dll
|
||||
0x00007ff903860000 - 0x00007ff90387b000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
|
||||
0x00007ff8817d0000 - 0x00007ff8817da000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\jimage.dll
|
||||
0x00007ff8f36e0000 - 0x00007ff8f3922000 C:\WINDOWS\SYSTEM32\DBGHELP.DLL
|
||||
0x00007ff906720000 - 0x00007ff906a9b000 C:\WINDOWS\System32\combase.dll
|
||||
0x00007ff906170000 - 0x00007ff906247000 C:\WINDOWS\System32\OLEAUT32.dll
|
||||
0x00007ff8dbb40000 - 0x00007ff8dbb7c000 C:\WINDOWS\SYSTEM32\dbgcore.DLL
|
||||
0x00007ff905440000 - 0x00007ff9054d8000 C:\WINDOWS\System32\bcryptPrimitives.dll
|
||||
0x00007ff8ef2e0000 - 0x00007ff8ef2ef000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\instrument.dll
|
||||
0x00007ff880180000 - 0x00007ff8801a0000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\java.dll
|
||||
0x00007ff906d00000 - 0x00007ff90744d000 C:\WINDOWS\System32\SHELL32.dll
|
||||
0x00007ff9052d0000 - 0x00007ff90543b000 C:\WINDOWS\System32\wintypes.dll
|
||||
0x00007ff9026e0000 - 0x00007ff902f3d000 C:\WINDOWS\SYSTEM32\windows.storage.dll
|
||||
0x00007ff905e80000 - 0x00007ff905f72000 C:\WINDOWS\System32\SHCORE.dll
|
||||
0x00007ff905f80000 - 0x00007ff905fe2000 C:\WINDOWS\System32\shlwapi.dll
|
||||
0x00007ff9049f0000 - 0x00007ff904a19000 C:\WINDOWS\SYSTEM32\profapi.dll
|
||||
0x00007ff880a10000 - 0x00007ff880a28000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\zip.dll
|
||||
0x00007ff880a00000 - 0x00007ff880a10000 C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\net.dll
|
||||
0x00007ff8fddc0000 - 0x00007ff8fdedf000 C:\WINDOWS\SYSTEM32\WINHTTP.dll
|
||||
0x00007ff903db0000 - 0x00007ff903e1b000 C:\WINDOWS\system32\mswsock.dll
|
||||
0x00007ff880300000 - 0x00007ff880316000 C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\nio.dll
|
||||
0x00007ff8ef2d0000 - 0x00007ff8ef2e0000 c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\verify.dll
|
||||
0x00007ff880130000 - 0x00007ff880174000 C:\Users\Lincpay\AppData\Roaming\Code\User\globalStorage\redhat.java\1.51.0\config_win\org.eclipse.equinox.launcher\org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.1400.v20250801-0854\eclipse_11916.dll
|
||||
0x00007ff907460000 - 0x00007ff9075f8000 C:\WINDOWS\System32\ole32.dll
|
||||
0x00007ff904190000 - 0x00007ff9041ab000 C:\WINDOWS\SYSTEM32\CRYPTSP.dll
|
||||
0x00007ff9037c0000 - 0x00007ff9037fb000 C:\WINDOWS\system32\rsaenh.dll
|
||||
0x00007ff903e50000 - 0x00007ff903e7b000 C:\WINDOWS\SYSTEM32\USERENV.dll
|
||||
0x00007ff9049c0000 - 0x00007ff9049e6000 C:\WINDOWS\SYSTEM32\bcrypt.dll
|
||||
0x00007ff903ff0000 - 0x00007ff903ffc000 C:\WINDOWS\SYSTEM32\CRYPTBASE.dll
|
||||
0x00007ff903310000 - 0x00007ff903344000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
|
||||
0x00007ff906250000 - 0x00007ff90625a000 C:\WINDOWS\System32\NSI.dll
|
||||
0x00007ff89cc90000 - 0x00007ff89ccd9000 C:\Users\Lincpay\AppData\Local\Temp\jna-1841511254\jna1170528911156299814.dll
|
||||
0x00007ff9065d0000 - 0x00007ff9065d8000 C:\WINDOWS\System32\PSAPI.DLL
|
||||
0x00007ff8fe310000 - 0x00007ff8fe32e000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
|
||||
0x00007ff8fe2c0000 - 0x00007ff8fe2e3000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
|
||||
0x00007ff8c6e30000 - 0x00007ff8c6e3e000 C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\sunmscapi.dll
|
||||
0x00007ff904ad0000 - 0x00007ff904c47000 C:\WINDOWS\System32\CRYPT32.dll
|
||||
0x00007ff9042e0000 - 0x00007ff904310000 C:\WINDOWS\SYSTEM32\ncrypt.dll
|
||||
0x00007ff904290000 - 0x00007ff9042cf000 C:\WINDOWS\SYSTEM32\NTASN1.dll
|
||||
0x00007ff903350000 - 0x00007ff903476000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
|
||||
0x00007ff8f8210000 - 0x00007ff8f821b000 C:\Windows\System32\rasadhlp.dll
|
||||
0x00007ff8fe8c0000 - 0x00007ff8fe946000 C:\WINDOWS\System32\fwpuclnt.dll
|
||||
0x00007ff8c6e20000 - 0x00007ff8c6e29000 C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\extnet.dll
|
||||
0x00007ff8c7f90000 - 0x00007ff8c7fb7000 C:\Users\Lincpay\.gradle\native\1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac\windows-amd64\native-platform.dll
|
||||
0x00007ff8ec0d0000 - 0x00007ff8ec0da000 C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\management.dll
|
||||
0x00007ff8c6e40000 - 0x00007ff8c6e4c000 C:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\management_ext.dll
|
||||
|
||||
JVMTI agents:
|
||||
c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\lombok\lombok-1.18.39-4050.jar path:c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\instrument.dll, loaded, initialized, instrumentlib options:none
|
||||
|
||||
dbghelp: loaded successfully - version: 4.0.5 - missing functions: none
|
||||
symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin;C:\WINDOWS\SYSTEM32;C:\WINDOWS\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.6899_none_3e0efeeae32e88c1;c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\jre\21.0.9-win32-x86_64\bin\server;C:\Users\Lincpay\AppData\Roaming\Code\User\globalStorage\redhat.java\1.51.0\config_win\org.eclipse.equinox.launcher\org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.1400.v20250801-0854;C:\Users\Lincpay\AppData\Local\Temp\jna-1841511254;C:\Users\Lincpay\.gradle\native\1def1411415f61bf3af743bc5b6707747c0891f09f0c88961ee8f79bc544acac\windows-amd64
|
||||
|
||||
VM Arguments:
|
||||
jvm_args: --add-modules=ALL-SYSTEM --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/sun.nio.fs=ALL-UNNAMED -Declipse.application=org.eclipse.jdt.ls.core.id1 -Dosgi.bundles.defaultStartLevel=4 -Declipse.product=org.eclipse.jdt.ls.core.product -Djava.import.generatesMetadataFilesAtProjectRoot=false -DDetectVMInstallationsJob.disabled=true -Dfile.encoding=utf8 -XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable -javaagent:c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\lombok\lombok-1.18.39-4050.jar -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:\Users\Lincpay\AppData\Roaming\Code\User\workspaceStorage\abb5375ad198b0834a895dbe2777821e\redhat.java -Daether.dependencyCollector.impl=bf
|
||||
java_command: c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\server\plugins\org.eclipse.equinox.launcher_1.7.100.v20251111-0406.jar -configuration c:\Users\Lincpay\AppData\Roaming\Code\User\globalStorage\redhat.java\1.51.0\config_win -data c:\Users\Lincpay\AppData\Roaming\Code\User\workspaceStorage\abb5375ad198b0834a895dbe2777821e\redhat.java\jdt_ws --pipe=\\.\pipe\lsp-d9bf6c0eeb4dea7218c68c5739457689-sock
|
||||
java_class_path (initial): c:\Users\Lincpay\.vscode\extensions\redhat.java-1.51.0-win32-x64\server\plugins\org.eclipse.equinox.launcher_1.7.100.v20251111-0406.jar
|
||||
Launcher Type: SUN_STANDARD
|
||||
|
||||
[Global flags]
|
||||
uintx AdaptiveSizePolicyWeight = 90 {product} {command line}
|
||||
intx CICompilerCount = 4 {product} {ergonomic}
|
||||
uintx GCTimeRatio = 4 {product} {command line}
|
||||
bool HeapDumpOnOutOfMemoryError = true {manageable} {command line}
|
||||
ccstr HeapDumpPath = c:\Users\Lincpay\AppData\Roaming\Code\User\workspaceStorage\abb5375ad198b0834a895dbe2777821e\redhat.java {manageable} {command line}
|
||||
size_t InitialHeapSize = 104857600 {product} {command line}
|
||||
size_t MaxHeapSize = 2147483648 {product} {command line}
|
||||
size_t MaxNewSize = 715653120 {product} {ergonomic}
|
||||
size_t MinHeapDeltaBytes = 524288 {product} {ergonomic}
|
||||
size_t MinHeapSize = 104857600 {product} {command line}
|
||||
size_t NewSize = 34603008 {product} {ergonomic}
|
||||
uintx NonNMethodCodeHeapSize = 5839372 {pd product} {ergonomic}
|
||||
uintx NonProfiledCodeHeapSize = 122909434 {pd product} {ergonomic}
|
||||
size_t OldSize = 70254592 {product} {ergonomic}
|
||||
uintx ProfiledCodeHeapSize = 122909434 {pd product} {ergonomic}
|
||||
uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic}
|
||||
bool SegmentedCodeCache = true {product} {ergonomic}
|
||||
size_t SoftMaxHeapSize = 2147483648 {manageable} {ergonomic}
|
||||
bool UseCompressedOops = true {product lp64_product} {ergonomic}
|
||||
bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic}
|
||||
bool UseParallelGC = true {product} {command line}
|
||||
|
||||
Logging:
|
||||
Log output configuration:
|
||||
#0: stdout all=off uptime,level,tags foldmultilines=false
|
||||
#1: stderr all=off uptime,level,tags foldmultilines=false
|
||||
|
||||
Release file:
|
||||
JAVA_VERSION="21.0.9"
|
||||
MODULES="java.base java.compiler java.datatransfer java.xml java.prefs java.desktop java.instrument java.logging java.management java.security.sasl java.naming java.rmi java.management.rmi java.net.http java.scripting java.security.jgss java.transaction.xa java.sql java.sql.rowset java.xml.crypto java.se java.smartcardio jdk.accessibility jdk.internal.jvmstat jdk.attach jdk.charsets jdk.internal.opt jdk.zipfs jdk.compiler jdk.crypto.ec jdk.crypto.cryptoki jdk.crypto.mscapi jdk.dynalink jdk.internal.ed jdk.editpad jdk.hotspot.agent jdk.httpserver jdk.internal.le jdk.internal.vm.ci jdk.internal.vm.compiler jdk.internal.vm.compiler.management jdk.jartool jdk.javadoc jdk.jcmd jdk.management jdk.management.agent jdk.jconsole jdk.jdeps jdk.jdwp.agent jdk.jdi jdk.jfr jdk.jshell jdk.jsobject jdk.jstatd jdk.localedata jdk.management.jfr jdk.naming.dns jdk.naming.rmi jdk.net jdk.nio.mapmode jdk.random jdk.sctp jdk.security.auth jdk.security.jgss jdk.unsupported jdk.unsupported.desktop jdk.xml.dom"
|
||||
|
||||
Environment Variables:
|
||||
JAVA_HOME=C:\Program Files\Microsoft\jdk-17.0.14.7-hotspot\
|
||||
PATH=C:\Python313\Scripts\;C:\Python313\;C:\Program Files\Microsoft\jdk-17.0.14.7-hotspot\bin;C:\Program Files\Java\jdk-17\bin;C:\Users\Lincpay\AppData\Local\Android\Sdk\platform-tools;C:\ProgramData\chocolatey\bin;C:\Users\DELL\AppData\Local\nvm;C:\nvm4w\nodejs;C:\Program Files\nodejs\;C:\Users\Lincpay\AppData\Local\Android\Sdk\emulator;C:\Users\Lincpay\.console-ninja\.bin;C:\Users\Lincpay\AppData\Local\Microsoft\WindowsApps;C:\Users\Lincpay\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\Lincpay\AppData\Local\Programs\Git\cmd;C:\Users\Lincpay\AppData\Local\Microsoft\WindowsApps;C:\Users\Lincpay\AppData\Roaming\npm
|
||||
USERNAME=Lincpay
|
||||
OS=Windows_NT
|
||||
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 142 Stepping 12, GenuineIntel
|
||||
TMP=C:\Users\Lincpay\AppData\Local\Temp
|
||||
TEMP=C:\Users\Lincpay\AppData\Local\Temp
|
||||
|
||||
|
||||
|
||||
|
||||
Periodic native trim disabled
|
||||
|
||||
--------------- S Y S T E M ---------------
|
||||
|
||||
OS:
|
||||
Windows 11 , 64 bit Build 26100 (10.0.26100.6725)
|
||||
OS uptime: 0 days 0:42 hours
|
||||
Hyper-V role detected
|
||||
|
||||
CPU: total 8 (initial active 8) (4 cores per cpu, 2 threads per core) family 6 model 142 stepping 12 microcode 0x100, cx8, cmov, fxsr, ht, mmx, 3dnowpref, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, lzcnt, tsc, tscinvbit, avx, avx2, aes, erms, clmul, bmi1, bmi2, adx, fma, vzeroupper, clflush, clflushopt, hv, rdtscp, f16c
|
||||
Processor Information for the first 8 processors :
|
||||
Max Mhz: 2112, Current Mhz: 1910, Mhz Limit: 1900
|
||||
|
||||
Memory: 4k page, system-wide physical 16198M (563M free)
|
||||
TotalPageFile size 28990M (AvailPageFile size 3M)
|
||||
current process WorkingSet (physical memory assigned to process): 36M, peak: 373M
|
||||
current process commit charge ("private bytes"): 386M, peak: 439M
|
||||
|
||||
vm_info: OpenJDK 64-Bit Server VM (21.0.9+10-LTS) for windows-amd64 JRE (21.0.9+10-LTS), built on 2025-10-21T00:00:00Z by "admin" with unknown MS VC++:1942
|
||||
|
||||
END.
|
||||
Generated
+264
-72
@@ -30,8 +30,9 @@
|
||||
"react-native": "0.79.0",
|
||||
"react-native-alert-notification": "^0.4.2",
|
||||
"react-native-app-intro-slider": "^4.0.4",
|
||||
"react-native-bouncy-checkbox": "^4.1.2",
|
||||
"react-native-bouncy-checkbox": "^4.1.3",
|
||||
"react-native-date-picker": "^5.0.13",
|
||||
"react-native-element-dropdown": "^2.12.4",
|
||||
"react-native-gesture-handler": "^2.30.0",
|
||||
"react-native-gifted-charts": "^1.4.70",
|
||||
"react-native-haptic-feedback": "^2.3.3",
|
||||
@@ -55,7 +56,7 @@
|
||||
"@babel/core": "^7.25.2",
|
||||
"@babel/preset-env": "^7.25.3",
|
||||
"@babel/runtime": "^7.25.0",
|
||||
"@react-native-community/cli": "18.0.0",
|
||||
"@react-native-community/cli": "^18.0.1",
|
||||
"@react-native-community/cli-platform-android": "18.0.0",
|
||||
"@react-native-community/cli-platform-ios": "18.0.0",
|
||||
"@react-native/babel-preset": "0.79.0",
|
||||
@@ -105,7 +106,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
|
||||
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.5",
|
||||
@@ -137,7 +137,6 @@
|
||||
"integrity": "sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
|
||||
"eslint-visitor-keys": "^2.1.0",
|
||||
@@ -2784,19 +2783,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-18.0.0.tgz",
|
||||
"integrity": "sha512-DyKptlG78XPFo7tDod+we5a3R+U9qjyhaVFbOPvH4pFNu5Dehewtol/srl44K6Cszq0aEMlAJZ3juk0W4WnOJA==",
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-18.0.1.tgz",
|
||||
"integrity": "sha512-nEEYwfyP00j9i4nr/HhwPabDscoBhhCjxDBpcKERi2oTYHcBr3FTu9PV1gbeJCa4vRCHr6b6VgOcVTdy99NddQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-clean": "18.0.0",
|
||||
"@react-native-community/cli-config": "18.0.0",
|
||||
"@react-native-community/cli-doctor": "18.0.0",
|
||||
"@react-native-community/cli-server-api": "18.0.0",
|
||||
"@react-native-community/cli-tools": "18.0.0",
|
||||
"@react-native-community/cli-types": "18.0.0",
|
||||
"@react-native-community/cli-clean": "18.0.1",
|
||||
"@react-native-community/cli-config": "18.0.1",
|
||||
"@react-native-community/cli-doctor": "18.0.1",
|
||||
"@react-native-community/cli-server-api": "18.0.1",
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"@react-native-community/cli-types": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"commander": "^9.4.1",
|
||||
"deepmerge": "^4.3.0",
|
||||
@@ -2815,26 +2813,58 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-clean": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-18.0.0.tgz",
|
||||
"integrity": "sha512-+k64EnJaMI5U8iNDF9AftHBJW+pO/isAhncEXuKRc6IjRtIh6yoaUIIf5+C98fgjfux7CNRZAMQIkPbZodv2Gw==",
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-18.0.1.tgz",
|
||||
"integrity": "sha512-brXqk//lmA2Vs5lGq9YLhk7X4IYBSrDRte6t1AktouJpCrH4Tp1sl45yJDS2CHOi/OY1oOfI3kA61tXNX5a/5A==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.0",
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"fast-glob": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-config": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-18.0.0.tgz",
|
||||
"integrity": "sha512-GUGvyek06JRF4mfd9zXao9YQW4+H8ny69HznqNXVRtVSIIekFyjOpKQeSEzdcyqJEEa5gej22GOz1JCHMKBccg==",
|
||||
"node_modules/@react-native-community/cli-clean/node_modules/@react-native-community/cli-tools": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.1.tgz",
|
||||
"integrity": "sha512-WxWFXwfYhHR2eYiB4lkHZVC/PmIkRWeVHBQKmn0h1mecr3GrHYO4BzW1jpD5Xt6XZ9jojQ9wE5xrCqXjiMSAIQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.0",
|
||||
"@vscode/sudo-prompt": "^9.0.0",
|
||||
"appdirsjs": "^1.2.4",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"find-up": "^5.0.0",
|
||||
"launch-editor": "^2.9.1",
|
||||
"mime": "^2.4.1",
|
||||
"ora": "^5.4.1",
|
||||
"prompts": "^2.4.2",
|
||||
"semver": "^7.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-clean/node_modules/semver": {
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||
"devOptional": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-config": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-18.0.1.tgz",
|
||||
"integrity": "sha512-O4DDJVMx+DYfwEgF/6lB4hoI9sVjrYW6AlLqeJY/D2XH2e4yqK/Pr3SAi4sOMgvjvYZKzLHqIQVxx54v+LyMQA==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"cosmiconfig": "^9.0.0",
|
||||
"deepmerge": "^4.3.0",
|
||||
@@ -2846,7 +2876,7 @@
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-18.0.0.tgz",
|
||||
"integrity": "sha512-pgnhEO2cmOeb+bBFEBZFYjeFjDTqWoV0JTorTiugj9bb4RQRCl8cr35baVlBGhxAuaio3722CsJ9GRF1oHjP8w==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.0",
|
||||
@@ -2859,7 +2889,7 @@
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-18.0.0.tgz",
|
||||
"integrity": "sha512-6edjTt3mlNMFBuB/Xd6u0O7GEkhJiKvQgmcoBH18FsNy5cpiHDwQsG8EWM5cHeINp1gMK845qq9fFsTko6gqyQ==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.0",
|
||||
@@ -2868,18 +2898,50 @@
|
||||
"fast-glob": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-18.0.0.tgz",
|
||||
"integrity": "sha512-cD3LJfu2h2QSFmZai+fl7RrORKodd5XHSuB7Y9oF1zkebpRYN720vaUtK+GsepqBOElwKk5gl8uVolJ3j+xm8A==",
|
||||
"node_modules/@react-native-community/cli-config/node_modules/@react-native-community/cli-tools": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.1.tgz",
|
||||
"integrity": "sha512-WxWFXwfYhHR2eYiB4lkHZVC/PmIkRWeVHBQKmn0h1mecr3GrHYO4BzW1jpD5Xt6XZ9jojQ9wE5xrCqXjiMSAIQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-config": "18.0.0",
|
||||
"@react-native-community/cli-platform-android": "18.0.0",
|
||||
"@react-native-community/cli-platform-apple": "18.0.0",
|
||||
"@react-native-community/cli-platform-ios": "18.0.0",
|
||||
"@react-native-community/cli-tools": "18.0.0",
|
||||
"@vscode/sudo-prompt": "^9.0.0",
|
||||
"appdirsjs": "^1.2.4",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"find-up": "^5.0.0",
|
||||
"launch-editor": "^2.9.1",
|
||||
"mime": "^2.4.1",
|
||||
"ora": "^5.4.1",
|
||||
"prompts": "^2.4.2",
|
||||
"semver": "^7.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-config/node_modules/semver": {
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||
"devOptional": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-18.0.1.tgz",
|
||||
"integrity": "sha512-B1UWpiVeJ45DX0ip1Et62knAHLzeA1B3XcTJu16PscednnNxV6GBH52kRUoWMsB8HQ8f9IWdFTol8LAp5Y0wwg==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-config": "18.0.1",
|
||||
"@react-native-community/cli-platform-android": "18.0.1",
|
||||
"@react-native-community/cli-platform-apple": "18.0.1",
|
||||
"@react-native-community/cli-platform-ios": "18.0.1",
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"command-exists": "^1.2.8",
|
||||
"deepmerge": "^4.3.0",
|
||||
@@ -2892,6 +2954,89 @@
|
||||
"yaml": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-config-android": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config-android/-/cli-config-android-18.0.1.tgz",
|
||||
"integrity": "sha512-1wzmGLfS7qgzm0ZfwX/f6Lat/af8/UYdjwtb3ap6RfKNclvIoap0wN6uBeiANmLfk0/BhoG8K1vKtIPwlU/V1A==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"fast-glob": "^3.3.2",
|
||||
"fast-xml-parser": "^4.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-config-apple": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-config-apple/-/cli-config-apple-18.0.1.tgz",
|
||||
"integrity": "sha512-ybr1ZrOSd/Z+oCJ1qVSKVQauvneObTu3VjvYPhhrme7tUUSaYmd3iikaWonbKk5rVp+2WqOFR6Cy7XqVfwwG8A==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"fast-glob": "^3.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-platform-android": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-18.0.1.tgz",
|
||||
"integrity": "sha512-DCltVWDR7jfZZG5MXREVKG0fmIr1b0irEhmdkk/R87dG6HJ8tGXWXnAa4Kap8bx2v6lKFXDW5QxNecyyLCOkVw==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-config-android": "18.0.1",
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"logkitty": "^0.7.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-platform-apple": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-18.0.1.tgz",
|
||||
"integrity": "sha512-7WxGXT/ui7VtyLVjx5rkYkkTMlbufI6p5BdRKjGp/zQDnDzs/0rle0JEHJxwgvs5VQnt+VOnHBMipkQAhydIqQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-config-apple": "18.0.1",
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"fast-xml-parser": "^4.4.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-platform-ios": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-18.0.1.tgz",
|
||||
"integrity": "sha512-GtO1FB+xaz+vcHIdvl94AkD5B8Y+H8XHb6QwnYX+A3WwteGsHrR8iD/bLLcRtNPtLaAWMa/RgWJpgs4KG+eU4w==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-platform-apple": "18.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor/node_modules/@react-native-community/cli-tools": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.1.tgz",
|
||||
"integrity": "sha512-WxWFXwfYhHR2eYiB4lkHZVC/PmIkRWeVHBQKmn0h1mecr3GrHYO4BzW1jpD5Xt6XZ9jojQ9wE5xrCqXjiMSAIQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vscode/sudo-prompt": "^9.0.0",
|
||||
"appdirsjs": "^1.2.4",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"find-up": "^5.0.0",
|
||||
"launch-editor": "^2.9.1",
|
||||
"mime": "^2.4.1",
|
||||
"ora": "^5.4.1",
|
||||
"prompts": "^2.4.2",
|
||||
"semver": "^7.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-doctor/node_modules/semver": {
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
@@ -2909,7 +3054,7 @@
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-18.0.0.tgz",
|
||||
"integrity": "sha512-3Y3RleN/des1C3oRS6s6fDvFYKN0KwsLrYFRpVx9vzdDnH1OGyFJOy4DbrruSPtdNiHUpvvHnOOxeLMj0+/tmw==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-config-android": "18.0.0",
|
||||
@@ -2923,7 +3068,7 @@
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-apple/-/cli-platform-apple-18.0.0.tgz",
|
||||
"integrity": "sha512-zD18gdP5Wr8BSLJ79xtHuPYcg2Vi/nL+WsGsPm7TZjzR5ZU2WbY/tZ+qTGVTQYhQaah+92sU+Dam7gStMrF/fA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-config-apple": "18.0.0",
|
||||
@@ -2937,20 +3082,20 @@
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-18.0.0.tgz",
|
||||
"integrity": "sha512-05Nvkkre/4Gao1TYqyP1wGet8td1dAH0CLJKqLNl9Te6ihnrQ8/8OhjIna5xw0iEFr9An8VdLfaPu1Dgv2qAnQ==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-platform-apple": "18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-server-api": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-18.0.0.tgz",
|
||||
"integrity": "sha512-tdmGV7ZntYmzrXWheZNpAy6dVI2yrsX4sQH+xAzU7lCfKHk6J8GucxedduXnB5qBB4JgSrrbzg2RLNxv5v0S/Q==",
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-18.0.1.tgz",
|
||||
"integrity": "sha512-ZRy2IjEM4ljP05bZcnXho0sCxVGI/9SkWkLuzXl+cRu/4I8vLRleihn2GJCopg82QHLLrajUCHhpDKE8NJWcRw==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@react-native-community/cli-tools": "18.0.0",
|
||||
"@react-native-community/cli-tools": "18.0.1",
|
||||
"body-parser": "^1.20.3",
|
||||
"compression": "^1.7.1",
|
||||
"connect": "^3.6.5",
|
||||
@@ -2962,11 +3107,43 @@
|
||||
"ws": "^6.2.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-server-api/node_modules/@react-native-community/cli-tools": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.1.tgz",
|
||||
"integrity": "sha512-WxWFXwfYhHR2eYiB4lkHZVC/PmIkRWeVHBQKmn0h1mecr3GrHYO4BzW1jpD5Xt6XZ9jojQ9wE5xrCqXjiMSAIQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vscode/sudo-prompt": "^9.0.0",
|
||||
"appdirsjs": "^1.2.4",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"find-up": "^5.0.0",
|
||||
"launch-editor": "^2.9.1",
|
||||
"mime": "^2.4.1",
|
||||
"ora": "^5.4.1",
|
||||
"prompts": "^2.4.2",
|
||||
"semver": "^7.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-server-api/node_modules/semver": {
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||
"devOptional": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-tools": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.0.tgz",
|
||||
"integrity": "sha512-oR6FcDEcSDYos79vZy4+Tj8jgAE0Xf5HEiRXMJFGISYLRx7tvslSaK8SodUOW9TZe2bCZOb5QSvj8zeMpORmxg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vscode/sudo-prompt": "^9.0.0",
|
||||
@@ -2985,7 +3162,7 @@
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
@@ -2995,15 +3172,34 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli-types": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-18.0.0.tgz",
|
||||
"integrity": "sha512-J84+4IRXl8WlVdoe1maTD5skYZZO9CbQ6LNXEHx1kaZcFmvPZKfjsaxuyQ+8BsSqZnM2izOw8dEWnAp/Zuwb0w==",
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-18.0.1.tgz",
|
||||
"integrity": "sha512-pGxr/TSP9Xiw2+9TUn3OWLdcuI4+PJozPsCYZVTGWJ96X6Pv7YX/rNy4emIDkaWaFZ7IWgWXUA725KhEINSf3Q==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"joi": "^17.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli/node_modules/@react-native-community/cli-tools": {
|
||||
"version": "18.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-18.0.1.tgz",
|
||||
"integrity": "sha512-WxWFXwfYhHR2eYiB4lkHZVC/PmIkRWeVHBQKmn0h1mecr3GrHYO4BzW1jpD5Xt6XZ9jojQ9wE5xrCqXjiMSAIQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vscode/sudo-prompt": "^9.0.0",
|
||||
"appdirsjs": "^1.2.4",
|
||||
"chalk": "^4.1.2",
|
||||
"execa": "^5.0.0",
|
||||
"find-up": "^5.0.0",
|
||||
"launch-editor": "^2.9.1",
|
||||
"mime": "^2.4.1",
|
||||
"ora": "^5.4.1",
|
||||
"prompts": "^2.4.2",
|
||||
"semver": "^7.5.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@react-native-community/cli/node_modules/semver": {
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
@@ -3032,7 +3228,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@react-native-masked-view/masked-view/-/masked-view-0.3.2.tgz",
|
||||
"integrity": "sha512-XwuQoW7/GEgWRMovOQtX3A4PrXhyaZm0lVUiY8qJDvdngjLms9Cpdck6SmGAUNqQwcj2EadHC1HwL0bEyoa/SQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"peerDependencies": {
|
||||
"react": ">=16",
|
||||
"react-native": ">=0.57"
|
||||
@@ -3463,7 +3658,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-7.1.26.tgz",
|
||||
"integrity": "sha512-RhKmeD0E2ejzKS6z8elAfdfwShpcdkYY8zJzvHYLq+wv183BBcElTeyMLcIX6wIn7QutXeI92Yi21t7aUWfqNQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@react-navigation/core": "^7.13.7",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
@@ -3755,7 +3949,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz",
|
||||
"integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.21.3",
|
||||
"@svgr/babel-preset": "8.1.0",
|
||||
@@ -4089,7 +4282,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
|
||||
"integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"csstype": "^3.2.2"
|
||||
}
|
||||
@@ -4158,7 +4350,6 @@
|
||||
"integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/regexpp": "^4.10.0",
|
||||
"@typescript-eslint/scope-manager": "7.18.0",
|
||||
@@ -4193,7 +4384,6 @@
|
||||
"integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@typescript-eslint/scope-manager": "7.18.0",
|
||||
"@typescript-eslint/types": "7.18.0",
|
||||
@@ -4425,7 +4615,6 @@
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
@@ -5098,7 +5287,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.9.0",
|
||||
"caniuse-lite": "^1.0.30001759",
|
||||
@@ -6424,7 +6612,6 @@
|
||||
"integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
|
||||
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
@@ -8623,7 +8810,6 @@
|
||||
"integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jest/core": "^29.7.0",
|
||||
"@jest/types": "^29.6.3",
|
||||
@@ -11213,7 +11399,6 @@
|
||||
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"prettier": "bin-prettier.js"
|
||||
},
|
||||
@@ -11451,7 +11636,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
|
||||
"integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -11516,7 +11700,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-native/-/react-native-0.79.0.tgz",
|
||||
"integrity": "sha512-fLG/zl/YF30TWTmp2bbo3flHSFGe4WTyVkb7/wJnMEC39jjXVSCxfDtvSUVavhCc03fA/RTkWWvlmg7NEJk7Vg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@jest/create-cache-key-function": "^29.7.0",
|
||||
"@react-native/assets-registry": "0.79.0",
|
||||
@@ -11598,12 +11781,13 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/react-native-bouncy-checkbox": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/react-native-bouncy-checkbox/-/react-native-bouncy-checkbox-4.1.2.tgz",
|
||||
"integrity": "sha512-hB7YwCGTNoMpTPOPiP+RWyQH35S6vxUbc7IGEW/Rqyp7GonEyhtqtthmxiphneRXnywMh8CZwND7OnvppJZscg==",
|
||||
"version": "4.1.4",
|
||||
"resolved": "https://registry.npmjs.org/react-native-bouncy-checkbox/-/react-native-bouncy-checkbox-4.1.4.tgz",
|
||||
"integrity": "sha512-JK/ib8nICVhbi6RJpRQwozqEr6mHneAECSHYh6ZreMj8f27t95xiihZPrTF/rVPHWcC3FQm7+eSfgtihMXDncg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@freakycoder/react-native-bounceable": "^1.0.3"
|
||||
"@freakycoder/react-native-bounceable": "^1.0.3",
|
||||
"react-native-bouncy-checkbox": "^4.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/react-native-date-picker": {
|
||||
@@ -11616,12 +11800,27 @@
|
||||
"react-native": ">= 0.64.3"
|
||||
}
|
||||
},
|
||||
"node_modules/react-native-element-dropdown": {
|
||||
"version": "2.12.4",
|
||||
"resolved": "https://registry.npmjs.org/react-native-element-dropdown/-/react-native-element-dropdown-2.12.4.tgz",
|
||||
"integrity": "sha512-abZc5SVji9FIt7fjojRYrbuvp03CoeZJrgvezQoDoSOrpiTqkX69ix5m+j06W2AVncA0VWvbT+vCMam8SoVadw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"lodash": "^4.17.21"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 16.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "*",
|
||||
"react-native": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/react-native-gesture-handler": {
|
||||
"version": "2.30.0",
|
||||
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.30.0.tgz",
|
||||
"integrity": "sha512-5YsnKHGa0X9C8lb5oCnKm0fLUPM6CRduvUUw2Bav4RIj/C3HcFh4RIUnF8wgG6JQWCL1//gRx4v+LVWgcIQdGA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@egjs/hammerjs": "^2.0.17",
|
||||
"hoist-non-react-statics": "^3.3.0",
|
||||
@@ -11683,7 +11882,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz",
|
||||
"integrity": "sha512-KflAXZcEg54PXkLyflaSZQ3PJp4uC4whM7nT/Uot9m0e/qxFV3p6uor1983D1YOBJbJN7rrWdqIjq0T42jOJyA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"peerDependencies": {
|
||||
"react": "*",
|
||||
"react-native": "*"
|
||||
@@ -11757,7 +11955,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-5.6.2.tgz",
|
||||
"integrity": "sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"peerDependencies": {
|
||||
"react": "*",
|
||||
"react-native": "*"
|
||||
@@ -11768,7 +11965,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.12.0.tgz",
|
||||
"integrity": "sha512-T2KL6RcDSYDRZswh9glRe600Hvaeq240U21eaqv0uxCNmJz05UeFc4YGQgbFPI8XsakPKx3HjNonItxElFy+QA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"react-freeze": "^1.0.0",
|
||||
"react-native-is-edge-to-edge": "^1.1.7",
|
||||
@@ -11796,7 +11992,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.15.1.tgz",
|
||||
"integrity": "sha512-ZUD1xwc3Hwo4cOmOLumjJVoc7lEf9oQFlHnLmgccLC19fNm6LVEdtB+Cnip6gEi0PG3wfvVzskViEtrySQP8Fw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"css-select": "^5.1.0",
|
||||
"css-tree": "^1.1.3",
|
||||
@@ -11904,7 +12099,6 @@
|
||||
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
|
||||
"integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@types/use-sync-external-store": "^0.0.6",
|
||||
"use-sync-external-store": "^1.4.0"
|
||||
@@ -11965,8 +12159,7 @@
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
|
||||
"integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
|
||||
"license": "MIT",
|
||||
"peer": true
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/redux-persist": {
|
||||
"version": "6.0.0",
|
||||
@@ -13443,7 +13636,6 @@
|
||||
"integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
|
||||
"devOptional": true,
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"react-native-app-intro-slider": "^4.0.4",
|
||||
"react-native-bouncy-checkbox": "^4.1.3",
|
||||
"react-native-date-picker": "^5.0.13",
|
||||
"react-native-element-dropdown": "^2.12.4",
|
||||
"react-native-gesture-handler": "^2.30.0",
|
||||
"react-native-gifted-charts": "^1.4.70",
|
||||
"react-native-haptic-feedback": "^2.3.3",
|
||||
|
||||
+22
-2
@@ -12,8 +12,27 @@ export const apiCall = async <R, D = {}>(
|
||||
): Promise<R> => {
|
||||
try {
|
||||
const token: any = store.getState().token.token;
|
||||
|
||||
console.log("url : ", url)
|
||||
console.log("token : ", token)
|
||||
|
||||
// Generate curl command
|
||||
let curlCmd = `curl -X ${method.toUpperCase()} "${url}"`;
|
||||
if (token?.token) curlCmd += ` -H "Authentication: Bearer ${token.token}"`;
|
||||
curlCmd += ` -H "Content-Type: ${contentType || 'application/json'}"`;
|
||||
if (data) {
|
||||
if (contentType === 'multipart/form-data') {
|
||||
curlCmd += ` --form "${JSON.stringify(data).slice(1,-1).replace(/"/g, '\\"')}"`;
|
||||
} else {
|
||||
curlCmd += ` -d '${JSON.stringify(data)}'`;
|
||||
}
|
||||
}
|
||||
if (params) {
|
||||
curlCmd += ` ${Object.entries(params).map(([k,v]) => `-${k}=${v}`).join(' ')}`;
|
||||
}
|
||||
console.log("=== CURL ===");
|
||||
console.log(curlCmd);
|
||||
console.log("============");
|
||||
|
||||
const response = await axios({
|
||||
method,
|
||||
url,
|
||||
@@ -26,7 +45,8 @@ export const apiCall = async <R, D = {}>(
|
||||
'Content-Type': contentType || 'application/json',
|
||||
},
|
||||
});
|
||||
console.log("url : ", url)
|
||||
|
||||
console.log("Api response",response)
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
const errorMessage = error?.response?.data?.error;
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
import React from 'react';
|
||||
import { StyleSheet, Text, View, StyleProp, ViewStyle, TextStyle } from 'react-native';
|
||||
import { Dropdown } from 'react-native-element-dropdown';
|
||||
import { Shield } from 'lucide-react-native';
|
||||
|
||||
const colors = {
|
||||
primary: '#F97316',
|
||||
primaryLight: '#FDBA74',
|
||||
primaryHighlight: '#f4f1efff',
|
||||
secondary: '#1B4B66',
|
||||
secondaryLight: '#639599',
|
||||
success: '#22C55E',
|
||||
error: '#EF4444',
|
||||
warning: '#F59E0B',
|
||||
info: '#3B82F6',
|
||||
golden: '#FFD700',
|
||||
white: '#FFFFFF',
|
||||
black: '#000000',
|
||||
darkText: '#2B2B2B',
|
||||
grayText: '#6B7280',
|
||||
lightText: '#9CA3AF',
|
||||
border: '#E5E7EB',
|
||||
lightGray: '#F9FAFB',
|
||||
disabled: '#D1D5DB',
|
||||
placeholder: '#9CA3AF',
|
||||
backdrop: 'rgba(0,0,0,0.5)',
|
||||
shadow: 'rgba(0,0,0,0.12)',
|
||||
Orange: '#F97316',
|
||||
OrangeLight: '#FDBA74',
|
||||
OrangeSoft: '#FFF3E8',
|
||||
darkGray: '#5f6368',
|
||||
lightestGray: '#f1f3f4',
|
||||
successLight: '#e6f4ea',
|
||||
};
|
||||
|
||||
type DropdownItem = {
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
type MyDropdownProps = {
|
||||
label?: string;
|
||||
data: DropdownItem[];
|
||||
placeholder?: string;
|
||||
labelField: string;
|
||||
valueField: string;
|
||||
value: any;
|
||||
onChange: (item: DropdownItem) => void;
|
||||
style?: StyleProp<ViewStyle>;
|
||||
containerStyle?: StyleProp<ViewStyle>;
|
||||
placeholderStyle?: StyleProp<TextStyle>;
|
||||
selectedTextStyle?: StyleProp<TextStyle>;
|
||||
focusedField?: boolean;
|
||||
onFocus?: () => void;
|
||||
onBlur?: () => void;
|
||||
dropdownStyle?: StyleProp<ViewStyle>;
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
const MyDropdown: React.FC<MyDropdownProps> = ({
|
||||
label,
|
||||
data,
|
||||
placeholder = 'Select an option',
|
||||
labelField,
|
||||
valueField,
|
||||
value,
|
||||
onChange,
|
||||
style,
|
||||
containerStyle,
|
||||
placeholderStyle,
|
||||
selectedTextStyle,
|
||||
focusedField,
|
||||
onFocus,
|
||||
onBlur,
|
||||
dropdownStyle,
|
||||
...rest
|
||||
}) => {
|
||||
return (
|
||||
<View style={[{ zIndex: 4000 }, containerStyle]}>
|
||||
{label && <Text style={styles.label}>{label}</Text>}
|
||||
<Dropdown
|
||||
data={data}
|
||||
labelField={labelField}
|
||||
valueField={valueField}
|
||||
placeholder={placeholder}
|
||||
value={value}
|
||||
onChange={onChange}
|
||||
style={[
|
||||
styles.dropdown,
|
||||
style,
|
||||
{ borderColor: focusedField ? colors.primary : '#e0e0e0' },
|
||||
]}
|
||||
containerStyle={[styles.dropdownContainer, dropdownStyle]}
|
||||
selectedTextStyle={[styles.selectedText, selectedTextStyle]}
|
||||
placeholderStyle={[styles.placeholderText, placeholderStyle]}
|
||||
onFocus={onFocus}
|
||||
onBlur={onBlur}
|
||||
search
|
||||
searchPlaceholder="Search Class"
|
||||
renderLeftIcon={() => (
|
||||
<Shield
|
||||
style={{ marginRight: 10 }}
|
||||
color={focusedField ? colors.primary : '#aaa'}
|
||||
size={20}
|
||||
/>
|
||||
)}
|
||||
{...rest}
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default MyDropdown;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
label: {
|
||||
marginVertical: 10,
|
||||
color: colors.darkText,
|
||||
},
|
||||
dropdown: {
|
||||
borderWidth: 1,
|
||||
borderRadius: 8,
|
||||
paddingHorizontal: 10,
|
||||
paddingVertical: 12,
|
||||
borderColor: colors.border,
|
||||
backgroundColor: colors.white,
|
||||
},
|
||||
dropdownContainer: {
|
||||
borderRadius: 12,
|
||||
borderColor: colors.border,
|
||||
},
|
||||
selectedText: {
|
||||
color: colors.darkText,
|
||||
},
|
||||
placeholderText: {
|
||||
color: colors.placeholder,
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,75 @@
|
||||
import { StyleSheet, Text, TouchableOpacity, ViewStyle } from 'react-native';
|
||||
import React from 'react';
|
||||
import LinearGradient from 'react-native-linear-gradient';
|
||||
import colors from '../../Constant/Color';
|
||||
|
||||
|
||||
type PrimaryButtonProps = {
|
||||
title: string;
|
||||
onPress: () => void | any;
|
||||
style?: ViewStyle;
|
||||
disabled?: boolean;
|
||||
};
|
||||
|
||||
const PrimaryButton: React.FC<PrimaryButtonProps> = ({ title, onPress, style, disabled }) => {
|
||||
return (
|
||||
<LinearGradient
|
||||
colors={[
|
||||
colors.primary, // #F97316 (Orange)
|
||||
colors.primaryLight, // #FDBA74 (OrangeLight)
|
||||
colors.OrangeLight, // #FDBA74 (backup)
|
||||
colors.OrangeSoft // #FFF3E8 (super soft orange end)
|
||||
]}
|
||||
start={{ x: 0, y: 0 }}
|
||||
end={{ x: 1, y: 1 }}
|
||||
locations={[0.0, 0.4, 0.7, 1.0]}
|
||||
style={[styles.primaryButton, style]}
|
||||
>
|
||||
<TouchableOpacity
|
||||
style={styles.touchable}
|
||||
onPress={onPress}
|
||||
activeOpacity={0.82}
|
||||
disabled={disabled}
|
||||
>
|
||||
<Text style={styles.buttonText}>{title}</Text>
|
||||
</TouchableOpacity>
|
||||
</LinearGradient>
|
||||
);
|
||||
};
|
||||
|
||||
export default PrimaryButton;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
primaryButton: {
|
||||
borderRadius: 14,
|
||||
paddingVertical: 16,
|
||||
paddingHorizontal: 28,
|
||||
marginBottom: 20,
|
||||
minHeight: 54,
|
||||
|
||||
// Orange-themed shadows
|
||||
shadowColor: colors.primary,
|
||||
shadowOffset: { width: 0, height: 6 },
|
||||
shadowOpacity: 0.3,
|
||||
shadowRadius: 12,
|
||||
elevation: 10,
|
||||
|
||||
overflow: 'hidden',
|
||||
},
|
||||
touchable: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
},
|
||||
buttonText: {
|
||||
textAlign: 'center',
|
||||
color: colors.white,
|
||||
fontWeight: '800', // Extra bold for orange contrast
|
||||
fontSize: 16,
|
||||
letterSpacing: 0.3,
|
||||
textShadowColor: 'rgba(0,0,0,0.2)',
|
||||
textShadowOffset: { width: 0, height: 1 },
|
||||
textShadowRadius: 2,
|
||||
includeFontPadding: false,
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,109 @@
|
||||
import React, { useRef, useEffect } from 'react';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
TouchableOpacity,
|
||||
StyleSheet,
|
||||
Animated,
|
||||
} from 'react-native';
|
||||
import colors from '../Constant/Color';
|
||||
|
||||
type StepProgressBarProps = {
|
||||
currentStep: number;
|
||||
steps: string[];
|
||||
onStepPress?: (stepIndex: number) => void;
|
||||
};
|
||||
|
||||
const StepProgressBar: React.FC<StepProgressBarProps> = ({
|
||||
currentStep,
|
||||
steps,
|
||||
onStepPress = () => {},
|
||||
}) => {
|
||||
const animations = useRef<Animated.Value[]>(
|
||||
steps.map(() => new Animated.Value(1))
|
||||
).current;
|
||||
|
||||
useEffect(() => {
|
||||
animations.forEach((anim, index) => {
|
||||
Animated.timing(anim, {
|
||||
toValue: index === currentStep ? 1.2 : 1,
|
||||
duration: 300,
|
||||
useNativeDriver: true,
|
||||
}).start();
|
||||
});
|
||||
}, [currentStep]);
|
||||
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
{steps.map((label, index) => {
|
||||
const isActive = index === currentStep;
|
||||
const isCompleted = index < currentStep;
|
||||
|
||||
return (
|
||||
<TouchableOpacity
|
||||
key={index}
|
||||
onPress={() => onStepPress(index)}
|
||||
style={styles.stepContainer}
|
||||
activeOpacity={0.8}
|
||||
>
|
||||
<Animated.View
|
||||
style={[
|
||||
styles.circle,
|
||||
isCompleted && styles.completedCircle,
|
||||
isActive && styles.activeCircle,
|
||||
{
|
||||
transform: [{ scale: animations[index] }],
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<Text
|
||||
style={[
|
||||
styles.label,
|
||||
isCompleted && { color: '#4caf50' },
|
||||
isActive && { color: '#2196f3' },
|
||||
]}
|
||||
>
|
||||
{label}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
);
|
||||
})}
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default StepProgressBar;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
paddingVertical: 20,
|
||||
flexWrap: 'wrap',
|
||||
justifyContent: 'center',
|
||||
},
|
||||
stepContainer: {
|
||||
alignItems: 'center',
|
||||
width: 70,
|
||||
},
|
||||
circle: {
|
||||
width: 50,
|
||||
height: 5,
|
||||
borderRadius: 25,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
backgroundColor: colors.primary,
|
||||
},
|
||||
completedCircle: {
|
||||
backgroundColor: '#4caf50',
|
||||
},
|
||||
activeCircle: {
|
||||
backgroundColor: '#2196f3',
|
||||
},
|
||||
label: {
|
||||
// marginTop: 6,
|
||||
// fontSize: 12,
|
||||
textAlign: 'center',
|
||||
color: '#555',
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,201 @@
|
||||
import React, { ReactNode } from 'react';
|
||||
import { View, Text, Modal, ScrollView, TouchableOpacity, StyleSheet, Dimensions } from 'react-native';
|
||||
import { CheckCircle, X } from 'lucide-react-native'; // Updated icons
|
||||
import colors from '../../Constant/Color';
|
||||
type ModalProps = {
|
||||
visible: boolean;
|
||||
onClose: () => void;
|
||||
onChecked: () => void
|
||||
}
|
||||
|
||||
const TermsAndConditionsModal: React.FC<ModalProps> = ({ visible, onClose, onChecked }) => {
|
||||
return (
|
||||
<Modal
|
||||
animationType="slide"
|
||||
transparent={false}
|
||||
visible={visible}
|
||||
onRequestClose={onClose}
|
||||
>
|
||||
<View style={styles.container}>
|
||||
<ScrollView contentContainerStyle={styles.scrollContainer}>
|
||||
<View style={styles.header}>
|
||||
<Text style={styles.title}>Terms & Conditions</Text>
|
||||
<Text style={styles.subtitle}>Last updated: {new Date().toLocaleDateString()}</Text>
|
||||
</View>
|
||||
|
||||
<View style={styles.content}>
|
||||
<Section title="1. Acceptance of Terms">
|
||||
<Text style={styles.paragraph}>
|
||||
By accessing or using our services, you agree to be bound by these Terms and Conditions.
|
||||
If you do not agree with any part of these terms, you must not use our services.
|
||||
</Text>
|
||||
</Section>
|
||||
|
||||
<Section title="2. User Responsibilities">
|
||||
<Text style={styles.paragraph}>
|
||||
You are responsible for maintaining the confidentiality of your account information and
|
||||
for all activities that occur under your account. You agree to notify us immediately
|
||||
of any unauthorized use of your account.
|
||||
</Text>
|
||||
</Section>
|
||||
|
||||
<Section title="3. Intellectual Property">
|
||||
<Text style={styles.paragraph}>
|
||||
All content included on our platform, such as text, graphics, logos, and software, is
|
||||
the property of our company and protected by intellectual property laws. You may not
|
||||
reproduce, distribute, or create derivative works without our express permission.
|
||||
</Text>
|
||||
</Section>
|
||||
|
||||
<Section title="4. Limitation of Liability">
|
||||
<Text style={styles.paragraph}>
|
||||
Our company shall not be liable for any indirect, incidental, special, or consequential
|
||||
damages resulting from the use or inability to use our services, even if we have been
|
||||
advised of the possibility of such damages.
|
||||
</Text>
|
||||
</Section>
|
||||
|
||||
<Section title="5. Privacy Policy">
|
||||
<Text style={styles.paragraph}>
|
||||
Your use of our services is also governed by our Privacy Policy, which explains how we
|
||||
collect, use, and protect your personal information. Please review our Privacy Policy
|
||||
to understand our practices.
|
||||
</Text>
|
||||
</Section>
|
||||
|
||||
<Section title="6. Changes to Terms">
|
||||
<Text style={styles.paragraph}>
|
||||
We reserve the right to modify these terms at any time. We will notify you of any changes
|
||||
by posting the new Terms and Conditions on this page. Your continued use of the service
|
||||
after such modifications constitutes your acceptance of the new terms.
|
||||
</Text>
|
||||
</Section>
|
||||
|
||||
<Section title="7. Governing Law">
|
||||
<Text style={styles.paragraph}>
|
||||
These Terms shall be governed by and construed in accordance with the laws of the
|
||||
jurisdiction in which our company is registered, without regard to its conflict of law provisions.
|
||||
</Text>
|
||||
</Section>
|
||||
|
||||
<Text style={styles.footerText}>
|
||||
If you have any questions about these Terms, please contact us at legal@company.com.
|
||||
</Text>
|
||||
</View>
|
||||
|
||||
{/* Accept Button */}
|
||||
<TouchableOpacity
|
||||
style={styles.acceptButton}
|
||||
onPress={() => {
|
||||
onClose();
|
||||
onChecked();
|
||||
}}
|
||||
>
|
||||
<CheckCircle color={colors.white} size={28} />
|
||||
<Text style={styles.acceptButtonText}>I Accept</Text>
|
||||
</TouchableOpacity>
|
||||
</ScrollView>
|
||||
</View>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
// Reusable Section component
|
||||
type SectionProps = {
|
||||
title: string;
|
||||
children: ReactNode;
|
||||
};
|
||||
|
||||
const Section: React.FC<SectionProps> = ({ title, children }) => (
|
||||
<View style={styles.section}>
|
||||
<Text style={styles.sectionTitle}>{title}</Text>
|
||||
{children}
|
||||
</View>
|
||||
);
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: colors.lightGray, // Updated with your colors
|
||||
},
|
||||
scrollContainer: {
|
||||
paddingBottom: 120, // Space for accept button
|
||||
flexGrow: 1,
|
||||
},
|
||||
header: {
|
||||
backgroundColor: colors.primary, // Orange header
|
||||
paddingVertical: 32,
|
||||
paddingHorizontal: 24,
|
||||
borderBottomLeftRadius: 24,
|
||||
borderBottomRightRadius: 24,
|
||||
marginBottom: 24,
|
||||
shadowColor: colors.shadow,
|
||||
shadowOffset: { width: 0, height: 6 },
|
||||
shadowOpacity: 0.25,
|
||||
shadowRadius: 12,
|
||||
elevation: 8,
|
||||
},
|
||||
title: {
|
||||
fontSize: 28,
|
||||
fontWeight: '800',
|
||||
color: colors.white,
|
||||
marginBottom: 4,
|
||||
},
|
||||
subtitle: {
|
||||
fontSize: 14,
|
||||
color: 'rgba(255,255,255,0.85)',
|
||||
},
|
||||
content: {
|
||||
paddingHorizontal: 24,
|
||||
paddingBottom: 40,
|
||||
},
|
||||
section: {
|
||||
marginBottom: 28,
|
||||
},
|
||||
sectionTitle: {
|
||||
fontSize: 20,
|
||||
fontWeight: '700',
|
||||
color: colors.darkText,
|
||||
marginBottom: 12,
|
||||
},
|
||||
paragraph: {
|
||||
fontSize: 16,
|
||||
lineHeight: 25,
|
||||
color: colors.grayText,
|
||||
},
|
||||
footerText: {
|
||||
fontSize: 15,
|
||||
fontStyle: 'italic',
|
||||
color: colors.lightText,
|
||||
marginTop: 24,
|
||||
textAlign: 'center',
|
||||
lineHeight: 22,
|
||||
},
|
||||
acceptButton: {
|
||||
position: 'absolute',
|
||||
bottom: 40,
|
||||
left: 24,
|
||||
right: 24,
|
||||
backgroundColor: colors.primary,
|
||||
borderRadius: 16,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
paddingVertical: 18,
|
||||
paddingHorizontal: 20,
|
||||
shadowColor: colors.shadow,
|
||||
shadowOffset: { width: 0, height: 8 },
|
||||
shadowOpacity: 0.35,
|
||||
shadowRadius: 16,
|
||||
elevation: 12,
|
||||
},
|
||||
acceptButtonText: {
|
||||
color: colors.white,
|
||||
fontSize: 18,
|
||||
fontWeight: '700',
|
||||
marginLeft: 12,
|
||||
letterSpacing: 0.5,
|
||||
},
|
||||
});
|
||||
|
||||
export default TermsAndConditionsModal;
|
||||
@@ -17,5 +17,7 @@ const NavigationString = {
|
||||
ProceedToPurTender:'ProceedToPurTender',
|
||||
TenderBidding:'TenderBidding',
|
||||
ProceedToBidDetail:'ProceedToBidDetail',
|
||||
Signup:'Signup',
|
||||
Registration:'Registration',
|
||||
}
|
||||
export default NavigationString
|
||||
@@ -0,0 +1,18 @@
|
||||
export const formatDateInput = (text: string) => {
|
||||
// Remove any non-digit characters
|
||||
const cleaned = text.replace(/\D/g, '');
|
||||
|
||||
let formatted = '';
|
||||
if (cleaned.length <= 2) {
|
||||
formatted = cleaned;
|
||||
} else if (cleaned.length <= 4) {
|
||||
formatted = `${cleaned.slice(0, 2)}/${cleaned.slice(2)}`;
|
||||
} else {
|
||||
formatted = `${cleaned.slice(0, 2)}/${cleaned.slice(
|
||||
2,
|
||||
4,
|
||||
)}/${cleaned.slice(4, 8)}`;
|
||||
}
|
||||
|
||||
return formatted;
|
||||
};
|
||||
@@ -0,0 +1,9 @@
|
||||
import { Platform, ToastAndroid } from "react-native";
|
||||
|
||||
export const showToast = (message: string) => {
|
||||
if (Platform.OS === 'android') {
|
||||
ToastAndroid.show(message, ToastAndroid.SHORT);
|
||||
} else {
|
||||
console.log(message); // Fallback for iOS or other platforms
|
||||
}
|
||||
};
|
||||
@@ -29,8 +29,10 @@ export default function MainStack() {
|
||||
}}
|
||||
>
|
||||
<Stack.Screen name={NavigationString.Splash} component={Screens.Splash} options={option} />
|
||||
<Stack.Screen name={NavigationString.Signup} component={Screens.Signup} options={option} />
|
||||
<Stack.Screen name={NavigationString.Onboarding} component={Screens.Onboarding} options={option} />
|
||||
<Stack.Screen name={NavigationString.Login} component={Screens.Login} options={option} />
|
||||
|
||||
<Stack.Screen name={NavigationString.Home} component={BottomTab} options={option} />
|
||||
<Stack.Screen name={NavigationString.PurchaseList} component={Screens.PurchaseList} options={option} />
|
||||
<Stack.Screen name={NavigationString.Emd} component={Screens.Emd} options={option} />
|
||||
@@ -41,7 +43,7 @@ export default function MainStack() {
|
||||
<Stack.Screen name={NavigationString.TenderBidding} component={Screens.TenderBidding} options={option} />
|
||||
<Stack.Screen name={NavigationString.ProceedToBidDetail} component={Screens.ProceedToBidDetail} options={option} />
|
||||
<Stack.Screen name={NavigationString.StartReverseBidding} component={Screens.StartReverseBidding} options={option} />
|
||||
|
||||
<Stack.Screen name={NavigationString.Registration} component={Screens.Registration} options={option} />
|
||||
</Stack.Navigator>
|
||||
);
|
||||
}
|
||||
|
||||
+202
-65
@@ -1,5 +1,5 @@
|
||||
import React, { useState } from 'react';
|
||||
import { View, Text, Dimensions, TextInput, TouchableOpacity, StyleSheet, StatusBar, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';
|
||||
import { View, Text, Dimensions, TextInput, TouchableOpacity, StyleSheet, KeyboardAvoidingView, Platform, ScrollView, Alert } from 'react-native';
|
||||
import LinearGradient from 'react-native-linear-gradient';
|
||||
import { Formik } from 'formik';
|
||||
import * as Yup from 'yup';
|
||||
@@ -7,17 +7,18 @@ import Animated, { FadeInUp, FadeInDown } from 'react-native-reanimated';
|
||||
import { Mail, Lock, Eye, EyeOff, ArrowRight } from 'lucide-react-native';
|
||||
import colors from '../../Constant/Color';
|
||||
import ImagePath from '../../Constant/ImagePath';
|
||||
import { useLogin } from '../../Services/BBPS/Hooks';
|
||||
import { useAuctionLogin, usefetchMasterData, useGetDesignation, useLogin, useRagistrationState } from '../../Services/BBPS/Hooks';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { setToken } from '../../Redux/Slices/Token';
|
||||
import { showErrorAlert } from '../../Constant/ShowDailog';
|
||||
import { useNavigation, CommonActions } from '@react-navigation/native';
|
||||
import NavigationString from '../../Constant/NavigationString';
|
||||
import ReactNativeHapticFeedback from "react-native-haptic-feedback";
|
||||
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
|
||||
import { Loader } from '../../Component/Index';
|
||||
|
||||
const hapticOptions = {
|
||||
enableVibrateFallback: true,
|
||||
ignoreAndroidSystemSettings: false
|
||||
ignoreAndroidSystemSettings: false,
|
||||
};
|
||||
const { height, width } = Dimensions.get('window');
|
||||
|
||||
@@ -27,51 +28,145 @@ const LoginSchema = Yup.object().shape({
|
||||
});
|
||||
|
||||
const Login = () => {
|
||||
const Navigation: any = useNavigation()
|
||||
const Dispatch = useDispatch()
|
||||
const Navigation: any = useNavigation();
|
||||
const Dispatch = useDispatch();
|
||||
const [passwordVisible, setPasswordVisible] = React.useState(false);
|
||||
const [loading, setLoading] = useState(false)
|
||||
const { mutate, isPending } = useLogin()
|
||||
const [activeType, setActiveType] = useState<'tender' | 'auction'>('tender');
|
||||
const [loginLoading, setLoginLoading] = useState(false);
|
||||
const [auctionLoading, setAuctionLoading] = useState(false);
|
||||
const { mutate: loginMutate } = useLogin();
|
||||
const { mutate: auctionMutate } = useAuctionLogin();
|
||||
const {data}=useGetDesignation();
|
||||
const { mutate: registrationStateMutate } = useRagistrationState();
|
||||
|
||||
const HandleLogin = async (values: any) => {
|
||||
setLoading(true)
|
||||
mutate({ password: values.password, emailAdd: values.email }, {
|
||||
onSuccess: (res) => {
|
||||
if (res.statusCode == 200) {
|
||||
console.log("login token : ", res)
|
||||
Dispatch(setToken({ ...res.data, token: res.token }))
|
||||
const { data: MasterData}=usefetchMasterData()
|
||||
console.log("master data ",MasterData)
|
||||
|
||||
const handleGetData = async () => {
|
||||
|
||||
|
||||
registrationStateMutate(undefined, {
|
||||
onSuccess: (res: any) => {
|
||||
console.log('Registration status response try :', res);
|
||||
|
||||
if (res?.statusCode === 200) {
|
||||
const { registrationStatus, contOtherId, contOrganization } = res.data;
|
||||
const params = { otherId: contOtherId, orgType: contOrganization };
|
||||
|
||||
console.log('==========pop', registrationStatus);
|
||||
|
||||
switch (registrationStatus) {
|
||||
case null:
|
||||
case undefined:
|
||||
|
||||
Navigation.replace(NavigationString.Registration);
|
||||
break;
|
||||
case 'Pending':
|
||||
|
||||
// handleRoute(params);
|
||||
break;
|
||||
case 'Complete':
|
||||
case 'Completed':
|
||||
Navigation.dispatch(
|
||||
CommonActions.reset({
|
||||
index: 0,
|
||||
routes: [
|
||||
{ name: NavigationString.Home },
|
||||
],
|
||||
})
|
||||
routes: [{ name: NavigationString.Home }],
|
||||
}),
|
||||
);
|
||||
break;
|
||||
default:
|
||||
{
|
||||
console.log("attempting navigation to Ragistration")
|
||||
Navigation.replace(NavigationString.Registration);}
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (res?.statusCode === 404) {
|
||||
console.warn('Registration API returned 404');
|
||||
Navigation.replace('Registration');
|
||||
return;
|
||||
}
|
||||
|
||||
Navigation.replace('Registration');
|
||||
},
|
||||
onError: (error: any) => {
|
||||
console.error('Registration status error catch :', error);
|
||||
|
||||
if (error?.response?.status === 500) {
|
||||
Alert.alert('Server error', 'Something went wrong. Please try again later.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (error?.request) {
|
||||
Alert.alert('Network Error', 'Please check your internet connection.');
|
||||
return;
|
||||
}
|
||||
|
||||
Alert.alert('Error', error?.message || 'Something went wrong');
|
||||
Navigation.replace('Registration');
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
const HandleLogin = async (values: any) => {
|
||||
if (activeType === 'tender') {
|
||||
setLoginLoading(true);
|
||||
loginMutate(
|
||||
{ password: values.password, emailAdd: values.email },
|
||||
{
|
||||
onSuccess: res => {
|
||||
if (res.statusCode == 200) {
|
||||
Dispatch(setToken({ ...res.data, token: res.token }));
|
||||
handleGetData();
|
||||
|
||||
|
||||
}
|
||||
setLoginLoading(false);
|
||||
},
|
||||
onError: err => {
|
||||
showErrorAlert(err.message);
|
||||
setLoginLoading(false);
|
||||
},
|
||||
},
|
||||
);
|
||||
} else {
|
||||
setAuctionLoading(true);
|
||||
auctionMutate(
|
||||
{ password: values.password, emailAdd: values.email },
|
||||
{
|
||||
onSuccess: res => {
|
||||
if (res.statusCode == 200) {
|
||||
Dispatch(setToken({ ...res.data, token: res.token }));
|
||||
Navigation.dispatch(
|
||||
CommonActions.reset({
|
||||
index: 0,
|
||||
routes: [{ name: NavigationString.Home }],
|
||||
}),
|
||||
);
|
||||
}
|
||||
setLoading(false)
|
||||
setAuctionLoading(false);
|
||||
},
|
||||
onError: (err) => {
|
||||
showErrorAlert(err.message)
|
||||
setLoading(false)
|
||||
}
|
||||
})
|
||||
onError: err => {
|
||||
showErrorAlert(err.message);
|
||||
setAuctionLoading(false);
|
||||
},
|
||||
},
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
const isLoading = activeType === 'tender' ? loginLoading : auctionLoading;
|
||||
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<KeyboardAvoidingView
|
||||
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
|
||||
style={{ flex: 1 }}
|
||||
>
|
||||
<KeyboardAvoidingView behavior={Platform.OS === 'ios' ? 'padding' : 'height'} style={{ flex: 1 }}>
|
||||
<ScrollView contentContainerStyle={{ flexGrow: 1 }} bounces={false}>
|
||||
|
||||
{/* Header */}
|
||||
<View style={styles.header}>
|
||||
<LinearGradient
|
||||
colors={[colors.primary, colors.primaryLight || '#4c669f']}
|
||||
style={styles.gradient}
|
||||
>
|
||||
<LinearGradient colors={[colors.primary, colors.primaryLight || '#4c669f']} style={styles.gradient}>
|
||||
<Animated.Image
|
||||
entering={FadeInDown.delay(200).duration(800)}
|
||||
source={ImagePath.Icon.Logo}
|
||||
@@ -81,24 +176,42 @@ const Login = () => {
|
||||
</LinearGradient>
|
||||
</View>
|
||||
|
||||
<Animated.View
|
||||
entering={FadeInUp.springify().damping(15)}
|
||||
style={styles.formContainer}
|
||||
>
|
||||
<Animated.View entering={FadeInUp.springify().damping(15)} style={styles.formContainer}>
|
||||
<View style={styles.sheetHandle} />
|
||||
|
||||
<View style={styles.toggleWrapper}>
|
||||
<View style={styles.toggleContainer}>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.8}
|
||||
style={[styles.toggleButton, activeType === 'tender' && styles.toggleButtonActive]}
|
||||
onPress={() => setActiveType('tender')}
|
||||
disabled={isLoading}
|
||||
>
|
||||
<Text style={[styles.toggleText, activeType === 'tender' && styles.toggleTextActive]}>Tender</Text>
|
||||
</TouchableOpacity>
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.8}
|
||||
style={[styles.toggleButton, activeType === 'auction' && styles.toggleButtonActive]}
|
||||
onPress={() => setActiveType('auction')}
|
||||
disabled={isLoading}
|
||||
>
|
||||
<Text style={[styles.toggleText, activeType === 'auction' && styles.toggleTextActive]}>Auction</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
|
||||
<Text style={styles.title}>Welcome Back</Text>
|
||||
<Text style={styles.subtitle}>Enter your details to access your account</Text>
|
||||
|
||||
<Formik
|
||||
initialValues={{ email: '', password: '' }}
|
||||
validationSchema={LoginSchema}
|
||||
onSubmit={(values) => {
|
||||
HandleLogin(values)
|
||||
onSubmit={values => {
|
||||
HandleLogin(values);
|
||||
}}
|
||||
>
|
||||
{({ handleChange, handleBlur, handleSubmit, values, errors, touched }) => (
|
||||
<View style={{}}>
|
||||
<View>
|
||||
<Text style={styles.label}>Email Address</Text>
|
||||
<View style={[styles.inputWrapper, touched.email && errors.email && styles.inputError]}>
|
||||
<Mail size={20} color={touched.email && !errors.email ? colors.primary : colors.grayText} />
|
||||
@@ -140,11 +253,11 @@ const Login = () => {
|
||||
<TouchableOpacity
|
||||
activeOpacity={0.8}
|
||||
onPress={() => {
|
||||
ReactNativeHapticFeedback.trigger("impactLight", hapticOptions);
|
||||
ReactNativeHapticFeedback.trigger('impactLight', hapticOptions);
|
||||
handleSubmit();
|
||||
}}
|
||||
|
||||
style={styles.buttonShadow}
|
||||
disabled={isLoading}
|
||||
>
|
||||
<LinearGradient
|
||||
colors={[colors.primary, colors.primaryLight || '#4c669f']}
|
||||
@@ -152,13 +265,25 @@ const Login = () => {
|
||||
end={{ x: 1, y: 0 }}
|
||||
style={styles.button}
|
||||
>
|
||||
{
|
||||
loading ? <Loader color={colors.white} size='small'/> : <>
|
||||
{isLoading ? (
|
||||
<Loader color={colors.white} size="small" />
|
||||
) : (
|
||||
<>
|
||||
<Text style={styles.buttonText}>Sign In</Text>
|
||||
<ArrowRight size={20} color={colors.white} style={{ marginLeft: 8, marginTop: 5 }} /></>
|
||||
}
|
||||
<ArrowRight size={20} color={colors.white} style={{ marginLeft: 8, marginTop: 5 }} />
|
||||
</>
|
||||
)}
|
||||
</LinearGradient>
|
||||
</TouchableOpacity>
|
||||
|
||||
<View style={{ alignItems: 'center', marginTop: 16 }}>
|
||||
<View style={{ flexDirection: 'row' }}>
|
||||
<Text>Don't have an account? </Text>
|
||||
<TouchableOpacity onPress={() => Navigation.navigate('Signup')}>
|
||||
<Text style={{ color: colors.primary, fontWeight: '700' }}>Sign up</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
)}
|
||||
</Formik>
|
||||
@@ -195,12 +320,10 @@ const styles = StyleSheet.create({
|
||||
borderTopRightRadius: 35,
|
||||
paddingHorizontal: 28,
|
||||
paddingTop: 10,
|
||||
// Shadow for iOS
|
||||
shadowColor: '#000',
|
||||
shadowOffset: { width: 0, height: -10 },
|
||||
shadowOpacity: 0.1,
|
||||
shadowRadius: 10,
|
||||
// Elevation for Android
|
||||
elevation: 20,
|
||||
},
|
||||
sheetHandle: {
|
||||
@@ -209,8 +332,37 @@ const styles = StyleSheet.create({
|
||||
backgroundColor: '#E0E0E0',
|
||||
borderRadius: 10,
|
||||
alignSelf: 'center',
|
||||
marginBottom: 16,
|
||||
},
|
||||
toggleWrapper: {
|
||||
alignItems: 'center',
|
||||
marginBottom: 20,
|
||||
},
|
||||
toggleContainer: {
|
||||
flexDirection: 'row',
|
||||
backgroundColor: '#F1F3F5',
|
||||
borderRadius: 20,
|
||||
padding: 4,
|
||||
width: width * 0.5,
|
||||
},
|
||||
toggleButton: {
|
||||
flex: 1,
|
||||
paddingVertical: 8,
|
||||
borderRadius: 16,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
},
|
||||
toggleButtonActive: {
|
||||
backgroundColor: colors.primary,
|
||||
},
|
||||
toggleText: {
|
||||
fontSize: 14,
|
||||
fontWeight: '600',
|
||||
color: '#7C7C7C',
|
||||
},
|
||||
toggleTextActive: {
|
||||
color: colors.white,
|
||||
},
|
||||
title: {
|
||||
fontSize: 28,
|
||||
fontWeight: '800',
|
||||
@@ -287,21 +439,6 @@ const styles = StyleSheet.create({
|
||||
fontSize: 18,
|
||||
fontWeight: '700',
|
||||
},
|
||||
footer: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'center',
|
||||
marginTop: 30,
|
||||
paddingBottom: 20,
|
||||
},
|
||||
footerText: {
|
||||
color: '#7C7C7C',
|
||||
fontSize: 15,
|
||||
},
|
||||
signUpText: {
|
||||
color: colors.primary,
|
||||
fontWeight: '700',
|
||||
fontSize: 15,
|
||||
},
|
||||
});
|
||||
|
||||
export default Login;
|
||||
@@ -0,0 +1,866 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import { View, Text, TouchableOpacity, StyleSheet, Platform, KeyboardAvoidingView, SafeAreaView, ScrollView, BackHandler, ToastAndroid, Button, Alert } from 'react-native';
|
||||
// import AntDesign from 'react-native-vector-icons/AntDesign';
|
||||
import { ArrowLeft } from 'lucide-react-native';
|
||||
import { NavigationProp, RouteProp, useNavigation, useRoute } from '@react-navigation/native';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
// import { sendAadhaarOtp, verifyAadhaarOtp, verifyGstNumber, verifyPanHandlerRes } from '../../utils/helper/ragisterationApiCalls';
|
||||
|
||||
// import { getAllMsMeOrg, getCityDropdown, getClassDropdown, getMsmeDropdown, getOrgDropdown, getSocialDropdown, getStateDropdown } from '../../utils/helper/dropdownApis';
|
||||
import { ApiResponse, DocumentsType, FormDataType, OrgType, UserData } from './types/types';
|
||||
import { pick } from '@react-native-documents/picker';
|
||||
// import { REJ_STAGE_TWO } from '../../utils/services/apiUrl';
|
||||
// import LoaderModel from '../../component/LoaderModal';
|
||||
|
||||
import axios from 'axios';
|
||||
import StageOne from './ragistrationStages/StageOne';
|
||||
import StageTwo from './ragistrationStages/StageTwo';
|
||||
import StageZero from './ragistrationStages/StageZero';
|
||||
import StageThree from './ragistrationStages/StageThree';
|
||||
import StageFour from './ragistrationStages/StageFour';
|
||||
import colors from '../../Constant/Color';
|
||||
import PrimaryButton from '../../Component/PrimaryButton/PrimaryButton';
|
||||
import StepProgressBar from '../../Component/StepProgressBar';
|
||||
import { formatDateInput } from '../../Helper/formatDateInput';
|
||||
import { showToast } from '../../Constant/ShowDailog';
|
||||
import { useCityDropdown, useContractorStageTwoSubmit, usefetchMasterData, useSendAadhaarOtp, useVerifyAadhaarOtp, useVerifyGstNumber, useVerifyPan } from '../../Services/BBPS/Hooks';
|
||||
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
||||
import { useSelector } from 'react-redux';
|
||||
|
||||
type RouteParams = {
|
||||
userData?: {
|
||||
firstName?: string;
|
||||
lastName?: string;
|
||||
mobileNo?: string;
|
||||
middleName?: string;
|
||||
email?: string;
|
||||
};
|
||||
};
|
||||
|
||||
const Registration: React.FC = () => {
|
||||
const navigation = useNavigation<any>();
|
||||
const { params } = useRoute<RouteProp<Record<string, RouteParams>, string>>();
|
||||
const userData = params as RouteParams;
|
||||
const [stage, setStage] = useState(0);
|
||||
const insets = useSafeAreaInsets();
|
||||
const [focusedField, setFocusedField] = useState<null | string>(null);
|
||||
const [selectedOrg, setSelectedOrg] = useState<OrgType>(0);
|
||||
const [documents, setDocuments] = useState<DocumentsType>({
|
||||
panCard: null,
|
||||
gstnCertificate: null,
|
||||
registrationCertificate: null,
|
||||
msmefile: null,
|
||||
constractorClass: null,
|
||||
aadharCard: null,
|
||||
});
|
||||
const [formData, setFormData] = useState<FormDataType>({
|
||||
firstName: '',
|
||||
middleName: '',
|
||||
lastName: '',
|
||||
email: '',
|
||||
mobileNumber: '',
|
||||
organizationName: '',
|
||||
officialWebsite: '',
|
||||
registrationNumber: '',
|
||||
contractorClass: '',
|
||||
orgType: '',
|
||||
registrationDetail: '',
|
||||
socialCategory: '',
|
||||
orgPanNumber: '',
|
||||
dateOfIncorp: '',
|
||||
orgPanName: '',
|
||||
gstnNo: '',
|
||||
aadhaarNumber: '',
|
||||
aadhaarOtp: '',
|
||||
address: '',
|
||||
state: '',
|
||||
city: '',
|
||||
pinCode: '',
|
||||
agentContact2: '',
|
||||
expiryDate: '',
|
||||
});
|
||||
const [loader, setloader] = useState(false);
|
||||
const [aadhaarVerifying, setAadhaarVerifying] = useState(false);
|
||||
const [aadhaarVerified, setAadhaarVerified] = useState(false);
|
||||
const [panVerifying, setPanVerifying] = useState(false);
|
||||
const [panVerified, setPanVerified] = useState(false);
|
||||
const [contractorClassItems, setContractorClassItems] = useState([]);
|
||||
const [allOrganizations, setAllOrganizations] = useState([]);
|
||||
const [allSocialCategories, setAllSocialCategories] = useState([]);
|
||||
const [allMsmeOrgs, setAllMsmeOrgs] = useState([]);
|
||||
const [adharreference, setadharreference] = useState('');
|
||||
const [adharotpsend, setadharotpsend] = useState(false);
|
||||
const [gstverifying, setgstverifying] = useState(false);
|
||||
const [gstverified, setgstverified] = useState(false);
|
||||
const [states, setstates] = useState([]);
|
||||
const [cities, setCities] = useState([]);
|
||||
const [allMSME, setAllMSME] = useState([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
const { mutateAsync: verifyPanHandlerRes } = useVerifyPan();
|
||||
const { mutateAsync: sendAadhaarOtp } = useSendAadhaarOtp();
|
||||
const { mutateAsync: verifyAadhaarOtp } = useVerifyAadhaarOtp();
|
||||
const { mutateAsync: verifyGstNumber } = useVerifyGstNumber();
|
||||
const { mutateAsync: contractorStageTwoSubmit } = useContractorStageTwoSubmit();
|
||||
const { data: masterData } = usefetchMasterData();
|
||||
console.log("master",masterData)
|
||||
useEffect(() => {
|
||||
if (!masterData?.data) return;
|
||||
const contractorClasses = masterData.data.contractorClasses || [];
|
||||
const msmeOrgs = masterData.data.msmeOrgs || [];
|
||||
const mappedmsmeOrgs = msmeOrgs.map((item:any)=> ({
|
||||
label: item.comName,
|
||||
value: item.msmeId,
|
||||
}));
|
||||
const orgs = masterData.data.organizationTypes || [];
|
||||
const mappedcontractorClasses = contractorClasses.map((item:any)=> ({
|
||||
label: item.contClassName || '',
|
||||
value: item.contClassId,
|
||||
}));
|
||||
const mapped = orgs.map((item:any)=> ({
|
||||
label: item.organizationType,
|
||||
value: item.orgId,
|
||||
}));
|
||||
const socialCategories = masterData.data.socialCategories || [];
|
||||
const mappedsocialCategories = socialCategories.map((item:any)=> ({
|
||||
label: item.categoryName,
|
||||
value: item.socialCategoryId,
|
||||
}));
|
||||
const stateList = masterData.data.states || [];
|
||||
const mappedStates = stateList.map((item:any)=> ({
|
||||
label: item.stateName,
|
||||
value: item.stateId,
|
||||
}));
|
||||
setAllMsmeOrgs(mappedmsmeOrgs);
|
||||
setAllSocialCategories(mappedsocialCategories);
|
||||
setContractorClassItems(mappedcontractorClasses);
|
||||
setAllOrganizations(mapped);
|
||||
setstates(mappedStates);
|
||||
}, [masterData?.data]);
|
||||
|
||||
|
||||
const { mutate: cityDropdownMutate } = useCityDropdown();
|
||||
const { data: MasterData}=usefetchMasterData()
|
||||
const user = useSelector((state: any) => state.token.token);
|
||||
const steps = ['', '', '', '', ''];
|
||||
const dropdownStyle = {
|
||||
borderWidth: 1,
|
||||
borderColor: '#e0e0e0',
|
||||
borderRadius: 12,
|
||||
paddingHorizontal: 14,
|
||||
height: 50,
|
||||
backgroundColor: '#fff',
|
||||
marginBottom: 10,
|
||||
}
|
||||
useEffect(() => {
|
||||
const fetchUserData = async (user:any) => {
|
||||
console.log("hitting it ")
|
||||
try {
|
||||
|
||||
console.log("hitting it 1 ")
|
||||
console.log("object====",user)
|
||||
if (user) {
|
||||
const parsedUser = user;
|
||||
console.log(parsedUser);
|
||||
setFormData(prev => ({
|
||||
...prev,
|
||||
firstName: parsedUser?.firstName || userData?.userData?.firstName,
|
||||
lastName: parsedUser?.lastName || userData?.userData?.lastName,
|
||||
mobileNumber: parsedUser?.mobileNo || userData?.userData?.mobileNo,
|
||||
middleName: parsedUser?.middleName || userData?.userData?.middleName,
|
||||
email: parsedUser?.email || userData?.userData?.email,
|
||||
}));
|
||||
console.log('User Data from Storage:', parsedUser);
|
||||
} else {
|
||||
console.log('No user data found');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching user data:', error);
|
||||
}
|
||||
};
|
||||
|
||||
fetchUserData(user);
|
||||
}, []);
|
||||
|
||||
const isPANLinkedToGSTIN = (pan: string, gstin: string): { valid: boolean; message: string } => {
|
||||
pan = pan.toUpperCase();
|
||||
gstin = gstin.toUpperCase();
|
||||
|
||||
const panRegex = /^[A-Z]{5}[0-9]{4}[A-Z]$/;
|
||||
const gstinRegex = /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z][1-9A-Z]Z[0-9A-Z]$/;
|
||||
|
||||
if (!panRegex.test(pan)) {
|
||||
return { valid: false, message: "Invalid PAN format. It should be like 'ABCDE1234F'." };
|
||||
}
|
||||
|
||||
// if (!gstinRegex.test(gstin)) {
|
||||
// return { valid: false, message: "Invalid GSTIN format. It should be like '22ABCDE1234F1Z5'." };
|
||||
// }
|
||||
|
||||
// const gstinPAN = gstin.slice(2, 12); // Extract PAN part from GSTIN
|
||||
|
||||
// if (pan !== gstinPAN) {
|
||||
// return {
|
||||
// valid: false,
|
||||
// message: "PAN does not match the PAN embedded in GSTIN.",
|
||||
// };
|
||||
// }
|
||||
|
||||
return { valid: true, message: 'PAN and GSTIN are correctly linked.' };
|
||||
};
|
||||
|
||||
const handleChange = (field: string, value: string) => {
|
||||
setFormData(prev => ({ ...prev, [field]: value }));
|
||||
};
|
||||
|
||||
const verifyPanHandler = async () => {
|
||||
setPanVerifying(true); // Start loading
|
||||
const payload = {
|
||||
dob: formData?.dateOfIncorp.trim(),
|
||||
name: formData?.orgPanName.trim(),
|
||||
panNumber: formData?.orgPanNumber.trim(),
|
||||
};
|
||||
const result = await verifyPanHandlerRes(payload);
|
||||
|
||||
if (result) {
|
||||
setPanVerified(true);
|
||||
} else {
|
||||
setPanVerified(false);
|
||||
}
|
||||
setPanVerifying(false); // Stop loading
|
||||
};
|
||||
|
||||
const sendAdharOTPHandler = async (text: string) => {
|
||||
console.log('Sending Aadhaar OTP...');
|
||||
setAadhaarVerifying(true);
|
||||
setadharreference('');
|
||||
|
||||
const payload = {
|
||||
aadhaarNumber: text.trim(),
|
||||
};
|
||||
|
||||
const response = await sendAadhaarOtp(payload);
|
||||
|
||||
if (response) {
|
||||
setadharotpsend(true);
|
||||
setadharreference(response);
|
||||
} else {
|
||||
setadharotpsend(false);
|
||||
ToastAndroid.show('Failed to send Aadhaar OTP', ToastAndroid.SHORT);
|
||||
}
|
||||
|
||||
setAadhaarVerifying(false);
|
||||
};
|
||||
|
||||
const verifyAdharOtpHandler = async () => {
|
||||
if (formData?.aadhaarOtp?.length !== 6) {
|
||||
ToastAndroid.show('Please enter a valid 6-digit OTP', ToastAndroid.SHORT);
|
||||
return;
|
||||
}
|
||||
setAadhaarVerifying(true);
|
||||
const payload = {
|
||||
otp: formData.aadhaarOtp,
|
||||
refNumber: adharreference,
|
||||
};
|
||||
const response = await verifyAadhaarOtp(payload);
|
||||
if (response) {
|
||||
setAadhaarVerified(true);
|
||||
ToastAndroid.show('Aadhaar Verified', ToastAndroid.SHORT);
|
||||
} else {
|
||||
ToastAndroid.show('Verification failed', ToastAndroid.SHORT);
|
||||
}
|
||||
setAadhaarVerifying(false);
|
||||
};
|
||||
|
||||
const verifyGSTHandler = async () => {
|
||||
setgstverifying(true);
|
||||
const payload = {
|
||||
gstNumber: formData?.gstnNo.trim(),
|
||||
};
|
||||
const response = await verifyGstNumber(payload);
|
||||
if (response) {
|
||||
setgstverified(true);
|
||||
} else {
|
||||
ToastAndroid.show('GST verification failed', ToastAndroid.SHORT);
|
||||
}
|
||||
setgstverifying(false);
|
||||
};
|
||||
|
||||
const handleDocumentPick = async (field: string) => {
|
||||
try {
|
||||
const response = await pick({
|
||||
type: 'application/pdf',
|
||||
allowMultiSelection: false,
|
||||
presentationStyle: 'fullScreen',
|
||||
});
|
||||
|
||||
if (response && response?.length > 0) {
|
||||
const selectedFile = response[0];
|
||||
setDocuments(prev => ({
|
||||
...prev,
|
||||
[field]: selectedFile,
|
||||
}));
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Document pick error:', err);
|
||||
}
|
||||
};
|
||||
|
||||
const handleSubmit = async () => {
|
||||
setLoading(true);
|
||||
|
||||
const dtoData = {
|
||||
agentAddress: formData.address,
|
||||
agentCity: formData.city,
|
||||
agentState: formData.state,
|
||||
agentPincode: formData.pinCode,
|
||||
agentWebsite: formData.officialWebsite,
|
||||
agentContact2: formData.agentContact2,
|
||||
indianOrgName: formData.organizationName,
|
||||
contractorClass: formData.contractorClass,
|
||||
contOrganization: formData.orgType,
|
||||
expiryDate: formData.expiryDate,
|
||||
msmeOrg: formData.registrationDetail,
|
||||
socialCategory: formData.socialCategory,
|
||||
agentRegno: formData.registrationNumber,
|
||||
orgPANdob: formData.dateOfIncorp,
|
||||
orgPANname: formData.orgPanName,
|
||||
orgPAN: formData.orgPanNumber,
|
||||
comAadharNo: formData.aadhaarNumber,
|
||||
gistnNo: formData.gstnNo,
|
||||
};
|
||||
console.log('Form Data for registration',formData);
|
||||
|
||||
try {
|
||||
const fileData = new FormData();
|
||||
fileData.append('requestDto', JSON.stringify(dtoData));
|
||||
fileData.append('aadharcardfile', documents.aadharCard as any);
|
||||
fileData.append('conclassfile', documents.constractorClass as any);
|
||||
fileData.append('gistnfile', documents.gstnCertificate as any);
|
||||
fileData.append('msmefile', documents.registrationCertificate as any);
|
||||
fileData.append('pancardfile', documents.panCard as any);
|
||||
fileData.append('regfile', documents.registrationCertificate as any);
|
||||
|
||||
console.log('File Data for registration',fileData);
|
||||
|
||||
const res = await contractorStageTwoSubmit(fileData);
|
||||
console.log('Register contractor Response : ', res);
|
||||
|
||||
if (res.status === 200) {
|
||||
if (res) {
|
||||
showToast('Form submitted successfully!');
|
||||
console.log('response?.data?.contOtherId : ', res?.data?.contOtherId);
|
||||
|
||||
const orgType = selectedOrg;
|
||||
const params = { otherId: res?.data?.contOtherId, orgType: orgType };
|
||||
if ([4, 5, 6].includes(orgType)) {
|
||||
navigation.replace('StageThree' as never, params as never);
|
||||
} else if (orgType === 7) {
|
||||
console.log('org type else if : ', orgType);
|
||||
navigation.replace('PartnerShip' as never, { otherId: res?.data?.contOtherId } as never);
|
||||
} else {
|
||||
console.log('org type else : ', orgType);
|
||||
navigation.replace('Dashboard' as never);
|
||||
}
|
||||
} else {
|
||||
showToast('Form submission failed');
|
||||
}
|
||||
} else {
|
||||
showToast(res.message || 'Form submission failed. Please try again.');
|
||||
}
|
||||
} catch (error: any) {
|
||||
if (axios.isAxiosError(error)) {
|
||||
console.log('11111', error.response?.status);
|
||||
console.log('22222', error.response?.data);
|
||||
console.log('3333333', error.response?.headers);
|
||||
} else {
|
||||
console.error('Unexpected error', error);
|
||||
}
|
||||
console.error('Form submission failed:', error);
|
||||
showToast(error.message || 'Form submission failed. Please try again.');
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
// const fetchAllMSME = async () => {
|
||||
// try {
|
||||
// console.log('Fetching MSME');
|
||||
// const msmeOption = await getAllMsMeOrg();
|
||||
// console.log('msme options fetched:', msmeOption);
|
||||
// setAllMSME(msmeOption);
|
||||
// } catch (error) {
|
||||
// setAllMSME([]);
|
||||
// console.error('Error in city fetch:', error);
|
||||
// }
|
||||
// };
|
||||
|
||||
const fetchCity = async (stateId: number) => {
|
||||
cityDropdownMutate(stateId, {
|
||||
onSuccess: (data) => {
|
||||
console.log('City options fetched:', data);
|
||||
// const cityList = data.data || [];
|
||||
// const mappedCity = cityList.map((item:any)=> ({
|
||||
// label: item.name,
|
||||
// value: item.id,
|
||||
// }));
|
||||
setCities(data);
|
||||
},
|
||||
onError: (error) => {
|
||||
setCities([]);
|
||||
console.error('Error in city fetch:', error);
|
||||
}
|
||||
});
|
||||
// try {
|
||||
// console.log('Fetching cities for state ID:', stateId);
|
||||
|
||||
// console.log('City options fetched:', cityOptions);
|
||||
// setCities(cityOptions);
|
||||
// } catch (error) {
|
||||
// setCities([]);
|
||||
// console.error('Error in city fetch:', error);
|
||||
// }
|
||||
};
|
||||
|
||||
// const contactorClassHandler = async () => {
|
||||
// try {
|
||||
// setloader(true);
|
||||
// const mappedItems = await getClassDropdown();
|
||||
// console.log(mappedItems, 'Contractor class items');
|
||||
// setContractorClassItems(mappedItems);
|
||||
// } catch (error) {
|
||||
// console.log('Contractor class fetch error:', error);
|
||||
// } finally {
|
||||
// setloader(false);
|
||||
// }
|
||||
// };
|
||||
|
||||
// const contactorORG = async () => {
|
||||
// try {
|
||||
// setloader(true);
|
||||
// const mappedItems = await getOrgDropdown();
|
||||
// setAllOrganizations(mappedItems);
|
||||
// } catch (error) {
|
||||
// console.log('Contractor ORG fetch error:', error);
|
||||
// } finally {
|
||||
// setloader(false);
|
||||
// }
|
||||
// };
|
||||
|
||||
// const contactorRegistration = async () => {
|
||||
// try {
|
||||
// setloader(true);
|
||||
// const mappedItems = await getMsmeDropdown();
|
||||
// setAllMsmeOrgs(mappedItems);
|
||||
// } catch (error) {
|
||||
// console.log('Contractor ORG fetch error:', error);
|
||||
// } finally {
|
||||
// setloader(false);
|
||||
// }
|
||||
// };
|
||||
|
||||
console.log('formdata : ', formData);
|
||||
|
||||
// const contactorSocial = async () => {
|
||||
// try {
|
||||
// setloader(true);
|
||||
// const mappedItems = await getSocialDropdown();
|
||||
// setAllSocialCategories(mappedItems);
|
||||
// } catch (error) {
|
||||
// console.log('Contractor ORG fetch error:', error);
|
||||
// } finally {
|
||||
// setloader(false);
|
||||
// }
|
||||
// };
|
||||
|
||||
// const allState = async () => {
|
||||
// try {
|
||||
// setloader(true);
|
||||
// const mappedItems = await getStateDropdown();
|
||||
// setstates(mappedItems);
|
||||
// } catch (error) {
|
||||
// console.log('all states error:', error);
|
||||
// } finally {
|
||||
// setloader(false);
|
||||
// }
|
||||
// };
|
||||
|
||||
// useEffect(() => {
|
||||
// contactorClassHandler();
|
||||
// contactorORG();
|
||||
// contactorRegistration();
|
||||
// contactorSocial();
|
||||
// allState();
|
||||
// fetchAllMSME();
|
||||
// }, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (formData?.state) {
|
||||
fetchCity(Number(formData.state));
|
||||
}
|
||||
}, [formData?.state]);
|
||||
|
||||
useEffect(() => {
|
||||
const backHandler = BackHandler.addEventListener('hardwareBackPress', () => {
|
||||
if (stage > 1) {
|
||||
setStage(prev => prev - 1);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
return () => backHandler.remove();
|
||||
}, [stage]);
|
||||
|
||||
const validateStage = (stage: number) => {
|
||||
console.log(stage, 'validateStage');
|
||||
switch (stage) {
|
||||
case 0:
|
||||
if (!formData.organizationName?.trim()) {
|
||||
showToast('Please fill all required details.');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
case 1:
|
||||
if (selectedOrg == 8) {
|
||||
if (!formData.orgType || !formData.socialCategory) {
|
||||
showToast('Please enter all valid details.');
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (
|
||||
!formData.registrationNumber ||
|
||||
!formData.registrationDetail ||
|
||||
!formData.socialCategory ||
|
||||
!formData.orgType
|
||||
) {
|
||||
showToast('Please enter all valid details.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
case 2:
|
||||
if (
|
||||
!formData.orgPanNumber ||
|
||||
!formData.dateOfIncorp ||
|
||||
!formData.orgPanName ||
|
||||
(selectedOrg == 8 && !formData.gstnNo) ||
|
||||
!formData.aadhaarNumber ||
|
||||
!formData.aadhaarOtp
|
||||
) {
|
||||
Alert.alert('aadhar otp : ', formData?.aadhaarOtp);
|
||||
showToast('Please fill all required KYC and Aadhaar details.');
|
||||
return false;
|
||||
}
|
||||
if (formData.aadhaarNumber.length !== 12) {
|
||||
showToast('Aadhaar number must be 12 digits.');
|
||||
return false;
|
||||
}
|
||||
if (formData.aadhaarOtp.length !== 6) {
|
||||
showToast('OTP must be 6 digits.');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
case 3:
|
||||
if (!formData.address || !formData.state || !formData.city || !formData.pinCode) {
|
||||
showToast('Please fill all required address details.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (formData.pinCode.length !== 6) {
|
||||
showToast('Please enter a valid 6-digit pin code.');
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
case 4:
|
||||
if (selectedOrg == 8) {
|
||||
if (!documents.panCard || !documents.aadharCard) {
|
||||
showToast('Please upload all required documents.');
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (formData?.contractorClass !== 1) {
|
||||
if (!documents.constractorClass) {
|
||||
showToast('Please upload CONTRACTOR CLASS documents.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (formData?.registrationDetail !== 3) {
|
||||
if (!documents.msmefile) {
|
||||
showToast('Please upload MSME FILE.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (!documents.gstnCertificate || !documents.registrationCertificate) {
|
||||
showToast('Please upload all required documents.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1, backgroundColor: colors.white }}>
|
||||
<KeyboardAvoidingView
|
||||
style={{ flex: 1 }}
|
||||
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
|
||||
keyboardVerticalOffset={40}
|
||||
>
|
||||
<ScrollView contentContainerStyle={styles.scrollContainer} keyboardShouldPersistTaps="handled" bounces={false}>
|
||||
<View style={{ paddingBottom: 20, marginTop: insets.top, flex: 1 }}>
|
||||
<TouchableOpacity
|
||||
onPress={() => {
|
||||
if (stage > 0) {
|
||||
setStage(prev => prev - 1);
|
||||
}
|
||||
}}
|
||||
style={styles.backBtn}
|
||||
>
|
||||
{/* Replaced AntDesign with Lucide ArrowLeft */}
|
||||
<ArrowLeft size={25} color={colors.primary} />
|
||||
</TouchableOpacity>
|
||||
<StepProgressBar currentStep={stage} steps={steps} />
|
||||
|
||||
{stage === 0 && (
|
||||
<StageZero
|
||||
formData={formData}
|
||||
handleChange={(key: string, value: string) =>
|
||||
handleChange(key as keyof FormDataType, value)
|
||||
}
|
||||
focusedField={focusedField}
|
||||
setFocusedField={setFocusedField}
|
||||
styles={styles}
|
||||
/>
|
||||
)}
|
||||
|
||||
{stage === 1 && (
|
||||
<StageOne
|
||||
formData={formData}
|
||||
handleChange={(key: string, value: string) =>
|
||||
handleChange(key as keyof FormDataType, value)
|
||||
}
|
||||
focusedField={focusedField}
|
||||
setFocusedField={setFocusedField}
|
||||
contractorClassItems={contractorClassItems}
|
||||
allOrganizations={allOrganizations}
|
||||
allMsmeOrgs={allMsmeOrgs}
|
||||
allSocialCategories={allSocialCategories}
|
||||
allMSME={allMSME}
|
||||
dropdownStyle={dropdownStyle}
|
||||
setSelectedOrg={setSelectedOrg}
|
||||
selectedOrg={selectedOrg}
|
||||
/>
|
||||
)}
|
||||
|
||||
{stage === 2 && (
|
||||
<StageTwo
|
||||
formData={formData}
|
||||
handleChange={(key: string, value: string) =>
|
||||
handleChange(key as keyof FormDataType, value)
|
||||
}
|
||||
focusedField={focusedField}
|
||||
setFocusedField={setFocusedField}
|
||||
panVerified={panVerified}
|
||||
setPanVerified={setPanVerified}
|
||||
verifyPanHandler={verifyPanHandler}
|
||||
panVerifying={panVerifying}
|
||||
aadhaarVerified={aadhaarVerified}
|
||||
setAadhaarVerified={setAadhaarVerified}
|
||||
sendAdharOTPHandler={sendAdharOTPHandler}
|
||||
adharotpsend={adharotpsend}
|
||||
setadharotpsend={setadharotpsend}
|
||||
verifyAdharOtpHandler={verifyAdharOtpHandler}
|
||||
aadhaarVerifying={aadhaarVerifying}
|
||||
verifyGSTHandler={verifyGSTHandler}
|
||||
gstverifying={gstverifying}
|
||||
color={colors}
|
||||
styles={styles}
|
||||
formatDateInput={formatDateInput}
|
||||
selectedOrg={selectedOrg}
|
||||
/>
|
||||
)}
|
||||
|
||||
{stage === 3 && (
|
||||
<StageThree
|
||||
formData={formData}
|
||||
handleChange={(key: string, value: string) =>
|
||||
handleChange(key as keyof FormDataType, value)
|
||||
}
|
||||
setFocusedField={setFocusedField}
|
||||
focusedField={focusedField}
|
||||
states={states}
|
||||
cities={cities}
|
||||
fetchCity={() => {
|
||||
fetchCity(Number(formData.state))}}
|
||||
dropdownStyle={dropdownStyle}
|
||||
styles={styles}
|
||||
/>
|
||||
)}
|
||||
|
||||
{stage === 4 && (
|
||||
<StageFour
|
||||
formData={formData}
|
||||
handleDocumentPick={handleDocumentPick}
|
||||
documents={documents}
|
||||
styles={styles}
|
||||
selectedOrg={selectedOrg}
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
|
||||
<PrimaryButton
|
||||
title={stage === 4 ? (loading ? 'Loading...' : 'Submit') : 'Next'}
|
||||
onPress={() => {
|
||||
if (validateStage(stage)) {
|
||||
switch (stage) {
|
||||
case 0:
|
||||
case 1:
|
||||
setStage(prev => prev + 1);
|
||||
break;
|
||||
case 2:
|
||||
if (!panVerified) {
|
||||
showToast('Please verify PAN details.');
|
||||
return;
|
||||
}
|
||||
if (!aadhaarVerified) {
|
||||
showToast('Please verify Aadhar Number.');
|
||||
return;
|
||||
}
|
||||
|
||||
const { valid, message } = isPANLinkedToGSTIN(
|
||||
formData.orgPanNumber,
|
||||
formData.gstnNo,
|
||||
);
|
||||
if (!valid) {
|
||||
showToast(message);
|
||||
return;
|
||||
}
|
||||
|
||||
setStage(prev => prev + 1);
|
||||
break;
|
||||
case 3:
|
||||
setStage(prev => prev + 1);
|
||||
break;
|
||||
case 4:
|
||||
handleSubmit();
|
||||
break;
|
||||
default:
|
||||
console.log(stage, 'stage');
|
||||
setStage(prev => prev + 1);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
showToast('Please fill all required fields.');
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</ScrollView>
|
||||
</KeyboardAvoidingView>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default Registration;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
scrollContainer: {
|
||||
flexGrow: 1,
|
||||
paddingHorizontal:14
|
||||
},
|
||||
label: {
|
||||
fontSize: 15,
|
||||
fontWeight: '600',
|
||||
marginVertical: 10,
|
||||
color: colors.black,
|
||||
},
|
||||
row: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
marginBottom: 10,
|
||||
},
|
||||
backBtn: {
|
||||
padding: 5,
|
||||
width: 50,
|
||||
marginBottom: 5,
|
||||
},
|
||||
sectionTitle: {
|
||||
fontSize: 24,
|
||||
fontWeight: '700',
|
||||
color: colors.black,
|
||||
marginBottom: 20,
|
||||
marginTop: 10,
|
||||
textAlign: 'center',
|
||||
},
|
||||
uploadGrid: {
|
||||
flexDirection: 'row',
|
||||
flexWrap: 'wrap',
|
||||
justifyContent: 'space-between',
|
||||
},
|
||||
uploadCard: {
|
||||
width: '48%',
|
||||
backgroundColor: '#fdfdfd',
|
||||
borderRadius: 20,
|
||||
padding: 20,
|
||||
alignItems: 'center',
|
||||
marginBottom: 20,
|
||||
shadowColor: '#000',
|
||||
shadowOffset: { width: 0, height: 4 },
|
||||
shadowOpacity: 0.08,
|
||||
shadowRadius: 6,
|
||||
elevation: 4,
|
||||
borderWidth: 1,
|
||||
borderColor: '#ddd',
|
||||
},
|
||||
iconCircle: {
|
||||
width: 50,
|
||||
height: 50,
|
||||
borderRadius: 25,
|
||||
backgroundColor: colors.primary,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
marginBottom: 10,
|
||||
},
|
||||
cardTitle: {
|
||||
fontSize: 15,
|
||||
fontWeight: '600',
|
||||
color: colors.black,
|
||||
marginBottom: 4,
|
||||
textAlign: 'center',
|
||||
},
|
||||
cardHint: {
|
||||
fontSize: 12,
|
||||
color: '#888',
|
||||
textAlign: 'center',
|
||||
},
|
||||
dropdown: {
|
||||
height: 55,
|
||||
borderColor: '#e0e0e0',
|
||||
borderWidth: 1,
|
||||
borderRadius: 12,
|
||||
paddingHorizontal: 14,
|
||||
marginTop: 8,
|
||||
marginBottom: 14,
|
||||
backgroundColor: '#fff',
|
||||
},
|
||||
selectedTextStyle: {
|
||||
fontSize: 14,
|
||||
color: colors.black,
|
||||
},
|
||||
placeholderStyle: {
|
||||
fontSize: 14,
|
||||
color: colors.black,
|
||||
},
|
||||
itemTextStyle: {
|
||||
fontSize: 14,
|
||||
color: colors.black,
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,255 @@
|
||||
import {
|
||||
KeyboardAvoidingView,
|
||||
SafeAreaView,
|
||||
ScrollView,
|
||||
StyleSheet,
|
||||
Text,
|
||||
TouchableOpacity,
|
||||
View,
|
||||
Platform,
|
||||
} from 'react-native';
|
||||
import React, { useState } from 'react';
|
||||
import { useNavigation, useRoute, RouteProp } from '@react-navigation/native';
|
||||
|
||||
|
||||
|
||||
import colors from '../../Constant/Color';
|
||||
import PrimaryButton from '../../Component/PrimaryButton/PrimaryButton';
|
||||
import MyInput from '../../Component/MyInput';
|
||||
import { showToast } from '../../Constant/ShowDailog';
|
||||
import { STAGETHREE } from '../../Services/BBPS/ApiUrls';
|
||||
|
||||
|
||||
type Company = {
|
||||
director: string;
|
||||
DINNumber: string;
|
||||
panNumber: string;
|
||||
aadharNumber: string;
|
||||
mobileNumber: string;
|
||||
};
|
||||
|
||||
type StageThreeRouteParams = {
|
||||
orgType: string;
|
||||
otherId: string | number
|
||||
};
|
||||
|
||||
const StageThreeScreen = () => {
|
||||
const route = useRoute<RouteProp<{ params: StageThreeRouteParams }, 'params'>>();
|
||||
const navigation = useNavigation<any>();
|
||||
|
||||
const [company, setCompany] = useState<Company[]>([
|
||||
{
|
||||
director: '',
|
||||
DINNumber: '',
|
||||
panNumber: '',
|
||||
aadharNumber: '',
|
||||
mobileNumber: '',
|
||||
},
|
||||
]);
|
||||
|
||||
const [focusedField, setFocusedField] = useState<string | null>(null);
|
||||
const [loading, setLoading] = useState<boolean>(false);
|
||||
|
||||
const handleChange = (index: number, field: keyof Company, value: string) => {
|
||||
const updated = [...company];
|
||||
updated[index][field] = value;
|
||||
setCompany(updated);
|
||||
};
|
||||
|
||||
const handleAddMore = () => {
|
||||
setCompany(prev => [
|
||||
...prev,
|
||||
{
|
||||
director: '',
|
||||
DINNumber: '',
|
||||
panNumber: '',
|
||||
aadharNumber: '',
|
||||
mobileNumber: '',
|
||||
},
|
||||
]);
|
||||
};
|
||||
|
||||
console.log("first company route : ", route);
|
||||
const handleSubmit = async () => {
|
||||
setLoading(true);
|
||||
try {
|
||||
const payload = company.map(p => ({
|
||||
contOtherId: route?.params?.otherId,
|
||||
dinNo: p.DINNumber,
|
||||
shAadharNo: p.aadharNumber,
|
||||
shDirName: p.director,
|
||||
shMobNo: p.mobileNumber,
|
||||
shPANNo: p.panNumber,
|
||||
}));
|
||||
|
||||
console.log('stage 3 payload : ', payload);
|
||||
// const response = await apiCallForPostWithToken (STAGETHREE, payload);
|
||||
console.log('✅ company submitted successfully:', response);
|
||||
|
||||
if (response.statusCode === 200 || response.statusCode === 201) {
|
||||
navigation.replace('Dashboard');
|
||||
showToast('Submitted successfully!');
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.error('❌ Submission failed:', error.message);
|
||||
showToast('Submission failed. Please try again.');
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
const handleRemove = (index: number) => {
|
||||
const updated = [...company];
|
||||
updated.splice(index, 1);
|
||||
setCompany(
|
||||
updated.length > 0
|
||||
? updated
|
||||
: [
|
||||
{
|
||||
director: '',
|
||||
DINNumber: '',
|
||||
panNumber: '',
|
||||
aadharNumber: '',
|
||||
mobileNumber: '',
|
||||
},
|
||||
]
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<View style={{ flex: 1 }}>
|
||||
<Text style={styles.heading}>Stage Three For {route.params?.orgType == '4' ? 'Public' : route.params?.orgType == '5' ? 'Private' : route.params?.orgType == '6' ? 'Limited Liability Partnership (LLP)' : route.params?.orgType} Organization</Text>
|
||||
<SafeAreaView style={{ flex: 1 }}>
|
||||
<KeyboardAvoidingView
|
||||
style={{ flex: 1 }}
|
||||
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
|
||||
keyboardVerticalOffset={40}
|
||||
>
|
||||
<ScrollView contentContainerStyle={styles.scrollContainer} keyboardShouldPersistTaps="handled">
|
||||
{company.map((partner, index) => (
|
||||
<View style={{ marginBottom: 20 }} key={index}>
|
||||
<Text style={styles.partnerTitle}>Company {index + 1}</Text>
|
||||
|
||||
<MyInput
|
||||
icon="user"
|
||||
placeholder="Name of Director *"
|
||||
value={partner.director}
|
||||
onChangeText={(text:any) => handleChange(index, 'director', text)}
|
||||
onFocus={() => setFocusedField(`director-${index}`)}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === `director-${index}`}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="id-card"
|
||||
placeholder="DIN Number in Firm *"
|
||||
value={partner.DINNumber}
|
||||
onChangeText={(text:any) => handleChange(index, 'DINNumber', text)}
|
||||
onFocus={() => setFocusedField(`DINNumber-${index}`)}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === `DINNumber-${index}`}
|
||||
keyboardType="numeric"
|
||||
maxlength={8}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="id-card"
|
||||
placeholder="PAN of Director *"
|
||||
value={partner.panNumber}
|
||||
onChangeText={(text:any) => handleChange(index, 'panNumber', text)}
|
||||
onFocus={() => setFocusedField(`panNumber-${index}`)}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === `panNumber-${index}`}
|
||||
maxlength={12}
|
||||
autoCapitalize="characters"
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="credit-card"
|
||||
placeholder="Aadhar Number *"
|
||||
value={partner.aadharNumber}
|
||||
onChangeText={(text:any) => handleChange(index, 'aadharNumber', text)}
|
||||
onFocus={() => setFocusedField(`aadharNumber-${index}`)}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === `aadharNumber-${index}`}
|
||||
keyboardType="numeric"
|
||||
maxlength={12}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="phone"
|
||||
placeholder="Mobile Number *"
|
||||
value={partner.mobileNumber}
|
||||
onChangeText={(text:any) => handleChange(index, 'mobileNumber', text)}
|
||||
onFocus={() => setFocusedField(`mobileNumber-${index}`)}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === `mobileNumber-${index}`}
|
||||
keyboardType="phone-pad"
|
||||
maxlength={10}
|
||||
/>
|
||||
|
||||
{company.length > 1 && (
|
||||
<TouchableOpacity style={styles.deleteButton} onPress={() => handleRemove(index)}>
|
||||
<Text style={styles.deleteText}>Delete Company</Text>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
</View>
|
||||
))}
|
||||
|
||||
<TouchableOpacity style={styles.addButton} onPress={handleAddMore}>
|
||||
<Text style={styles.addText}>+ Add Company</Text>
|
||||
</TouchableOpacity>
|
||||
</ScrollView>
|
||||
</KeyboardAvoidingView>
|
||||
</SafeAreaView>
|
||||
<PrimaryButton title={loading ? 'Loading...' : 'Submit'} onPress={handleSubmit} />
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default StageThreeScreen;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
heading: {
|
||||
fontSize: 18,
|
||||
fontWeight: 'bold',
|
||||
marginBottom: 10,
|
||||
marginTop: 10,
|
||||
textAlign: 'center',
|
||||
},
|
||||
partnerTitle: {
|
||||
fontWeight: '600',
|
||||
fontSize: 16,
|
||||
marginBottom: 10,
|
||||
},
|
||||
scrollContainer: {
|
||||
// backgroundColor: color.background,
|
||||
flexGrow: 1,
|
||||
},
|
||||
addButton: {
|
||||
backgroundColor: colors.primary,
|
||||
padding: 10,
|
||||
marginTop: 10,
|
||||
borderRadius: 10,
|
||||
alignItems: 'center',
|
||||
width: 140,
|
||||
alignSelf: 'flex-end',
|
||||
},
|
||||
addText: {
|
||||
color: 'white',
|
||||
fontWeight: '600',
|
||||
},
|
||||
deleteButton: {
|
||||
backgroundColor: '#FF5C5C',
|
||||
padding: 10,
|
||||
marginTop: 10,
|
||||
borderRadius: 10,
|
||||
alignItems: 'center',
|
||||
width: 140,
|
||||
alignSelf: 'flex-end',
|
||||
},
|
||||
deleteText: {
|
||||
color: 'white',
|
||||
fontWeight: '600',
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,110 @@
|
||||
import React from 'react';
|
||||
import { View, Text, TouchableOpacity } from 'react-native';
|
||||
import {
|
||||
IdCard,
|
||||
FileText,
|
||||
FileBadge,
|
||||
ShieldCheck,
|
||||
Building2,
|
||||
ScrollText,
|
||||
} from 'lucide-react-native'; // lucide icons
|
||||
|
||||
interface DocumentItem {
|
||||
key: string;
|
||||
label: string;
|
||||
icon: 'pan' | 'aadhar' | 'gst' | 'contractor' | 'msme' | 'registration';
|
||||
}
|
||||
|
||||
interface UploadDocumentsSectionProps {
|
||||
handleDocumentPick: (key: string) => void;
|
||||
documents: { [key: string]: { name: string } | null };
|
||||
styles: any;
|
||||
formData: any;
|
||||
selectedOrg: number | string;
|
||||
}
|
||||
|
||||
const StageFour: React.FC<UploadDocumentsSectionProps> = ({
|
||||
handleDocumentPick,
|
||||
documents,
|
||||
styles,
|
||||
formData,
|
||||
selectedOrg,
|
||||
}) => {
|
||||
const documentItems: DocumentItem[] = [
|
||||
{ key: 'panCard', label: 'PAN Card', icon: 'pan' },
|
||||
{ key: 'aadharCard', label: 'Aadhar Card', icon: 'aadhar' },
|
||||
{ key: 'gstnCertificate', label: 'GSTN Certificate', icon: 'gst' },
|
||||
{ key: 'constractorClass', label: 'Contractor Class File', icon: 'contractor' },
|
||||
{ key: 'msmefile', label: 'MSME Organization', icon: 'msme' },
|
||||
{ key: 'registrationCertificate', label: 'Registration Certificate', icon: 'registration' },
|
||||
];
|
||||
|
||||
const shouldRenderItem = (itemKey: string): boolean => {
|
||||
if (formData.registrationDetail === 3 && itemKey === 'msmefile') return false;
|
||||
if (formData.contractorClass == 1 && itemKey === 'constractorClass') return false;
|
||||
|
||||
if (
|
||||
selectedOrg == 8 &&
|
||||
['msmefile', 'constractorClass', 'gstnCertificate', 'registrationCertificate'].includes(
|
||||
itemKey,
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true; // pan + aadhar + rest (unless filtered above)
|
||||
};
|
||||
|
||||
const renderIcon = (iconType: DocumentItem['icon']) => {
|
||||
const commonProps = { size: 26, color: '#fff', strokeWidth: 2 };
|
||||
|
||||
switch (iconType) {
|
||||
case 'pan':
|
||||
return <IdCard {...commonProps} />; // PAN → ID card feel [web:19]
|
||||
case 'aadhar':
|
||||
return <IdCard {...commonProps} />; // Same icon, different label
|
||||
case 'gst':
|
||||
return <FileBadge {...commonProps} />; // File with badge [web:20]
|
||||
case 'contractor':
|
||||
return <ShieldCheck {...commonProps} />; // Safety / verification feel
|
||||
case 'msme':
|
||||
return <Building2 {...commonProps} />; // Organization / company
|
||||
case 'registration':
|
||||
return <ScrollText {...commonProps} />; // Certificate / document scroll
|
||||
default:
|
||||
return <FileText {...commonProps} />;
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Text style={styles.sectionTitle}>Upload Required Documents</Text>
|
||||
|
||||
<View style={styles.uploadGrid}>
|
||||
{documentItems.map(item => {
|
||||
if (!shouldRenderItem(item.key)) return null;
|
||||
|
||||
return (
|
||||
<TouchableOpacity
|
||||
key={item.key}
|
||||
style={styles.uploadCard}
|
||||
onPress={() => handleDocumentPick(item.key)}
|
||||
>
|
||||
<View style={styles.iconCircle}>{renderIcon(item.icon)}</View>
|
||||
|
||||
<Text style={styles.cardTitle}>{item.label}</Text>
|
||||
|
||||
<Text style={styles.cardHint}>
|
||||
{documents[item.key]
|
||||
? `${documents[item.key]?.name} ✅`
|
||||
: 'Tap to upload PDF'}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
);
|
||||
})}
|
||||
</View>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default StageFour;
|
||||
@@ -0,0 +1,195 @@
|
||||
import React, { useState } from 'react';
|
||||
import { Text, View, StyleSheet } from 'react-native';
|
||||
|
||||
import DatePicker from 'react-native-date-picker'
|
||||
import MyInput from '../../../Component/MyInput';
|
||||
import MyDropdown from '../../../Component/Dropdown/MyDropdown';
|
||||
import colors from '../../../Constant/Color';
|
||||
import { DropdownOption } from '../types/types';
|
||||
|
||||
interface Props {
|
||||
formData: {
|
||||
registrationNumber: string;
|
||||
contractorClass: string | number;
|
||||
orgType: string;
|
||||
registrationDetail: string | number;
|
||||
socialCategory: string;
|
||||
expiryDate: string
|
||||
};
|
||||
handleChange: (key: string, value: string) => void;
|
||||
focusedField: string | null;
|
||||
setFocusedField: (field: string | null | any) => void;
|
||||
contractorClassItems: DropdownOption[];
|
||||
allOrganizations: DropdownOption[];
|
||||
allMsmeOrgs: DropdownOption[];
|
||||
allSocialCategories: DropdownOption[];
|
||||
allMSME: DropdownOption[];
|
||||
dropdownStyle: object;
|
||||
setSelectedOrg: (val: number) => void;
|
||||
selectedOrg: string | number
|
||||
}
|
||||
|
||||
const StageOne: React.FC<Props> = ({
|
||||
formData,
|
||||
handleChange,
|
||||
focusedField,
|
||||
setFocusedField,
|
||||
contractorClassItems,
|
||||
allOrganizations,
|
||||
allMsmeOrgs,
|
||||
allSocialCategories,
|
||||
dropdownStyle,
|
||||
setSelectedOrg,
|
||||
selectedOrg
|
||||
}) => {
|
||||
|
||||
const [selectedAllMSME, setSelectedAllMSME] = useState()
|
||||
const [open, setOpen] = useState(false)
|
||||
const [date, setDate] = useState(new Date())
|
||||
|
||||
const handleDateConfirm = (selectedDate: Date) => {
|
||||
setOpen(false);
|
||||
setDate(selectedDate);
|
||||
handleChange('expiryDate', selectedDate.toISOString().split('T')[0]); // Format as YYYY-MM-DD
|
||||
};
|
||||
return (
|
||||
<View>
|
||||
<Text style={styles.label}>Registration & Type Details</Text>
|
||||
|
||||
|
||||
<MyDropdown
|
||||
label="Type of Organization"
|
||||
data={allOrganizations}
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
placeholder="Select Organization Type"
|
||||
value={formData.orgType}
|
||||
onChange={item => {
|
||||
setSelectedOrg(item.value);
|
||||
handleChange('orgType', item.value);
|
||||
}}
|
||||
style={dropdownStyle}
|
||||
onFocus={() => setFocusedField('orgType')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focusedField={focusedField === 'orgType'}
|
||||
/>
|
||||
{
|
||||
selectedOrg !== 8 &&
|
||||
<MyInput
|
||||
icon="file"
|
||||
placeholder="Registration Number *"
|
||||
value={formData.registrationNumber}
|
||||
onChangeText={text => handleChange('registrationNumber', text)}
|
||||
onFocus={() => setFocusedField('registrationNumber')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'registrationNumber'}
|
||||
autoCapitalize='characters' />
|
||||
}
|
||||
{selectedOrg &&
|
||||
<MyDropdown
|
||||
label="Contractor Class"
|
||||
data={contractorClassItems}
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
placeholder="Select Class"
|
||||
value={selectedOrg == 8 ? contractorClassItems[0]?.value : formData.contractorClass}
|
||||
style={dropdownStyle}
|
||||
disable={selectedOrg == 8 ? true : false}
|
||||
onChange={item => {
|
||||
handleChange('contractorClass', item.value);
|
||||
}}
|
||||
onFocus={() => setFocusedField('contractorClass')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focusedField={focusedField === 'contractorClass'}
|
||||
/>}
|
||||
|
||||
{selectedOrg !== 8 &&
|
||||
<MyDropdown
|
||||
label="Registration Detail (MSME/NSIC etc.)"
|
||||
data={allMsmeOrgs}
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
placeholder="Select Registration Type"
|
||||
value={formData.registrationDetail}
|
||||
onChange={item => {
|
||||
setSelectedAllMSME(item.value)
|
||||
console.log('first', item)
|
||||
handleChange('registrationDetail', item.value)
|
||||
}}
|
||||
style={dropdownStyle}
|
||||
onFocus={() => setFocusedField('registrationDetail')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focusedField={focusedField === 'registrationDetail'}
|
||||
/>}
|
||||
{/* <MyDropdown
|
||||
label="MSME Details"
|
||||
data={allMSME}
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
placeholder="Select MSME Type"
|
||||
value={''}
|
||||
onChange={item => {
|
||||
setSelectedAllMSME(item.value)
|
||||
handleChange('allMsme', item.value)
|
||||
}}
|
||||
style={dropdownStyle}
|
||||
|
||||
onFocus={() => setFocusedField('allMsme')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focusedField={focusedField === 'allMsme'}
|
||||
/> */}
|
||||
<MyDropdown
|
||||
label="Social Category"
|
||||
data={allSocialCategories}
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
placeholder="Select Social Category"
|
||||
value={formData.socialCategory}
|
||||
onChange={item => handleChange('socialCategory', item.value)}
|
||||
style={dropdownStyle}
|
||||
|
||||
onFocus={() => setFocusedField('socialCategory')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focusedField={focusedField === 'socialCategory'}
|
||||
/>
|
||||
{
|
||||
selectedAllMSME !== 3 && selectedOrg !== 8 &&
|
||||
<>
|
||||
|
||||
<MyInput
|
||||
icon="calendar-alt"
|
||||
placeholder="Expiry Date *"
|
||||
value={formData.expiryDate}
|
||||
onChangeText={text => handleChange('expiryDate', text)}
|
||||
onFocus={() => setFocusedField('expiryDate')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'expiryDate'}
|
||||
rightIcon='wallet'
|
||||
editable={true}
|
||||
rightIconPress={() => setOpen(true)}
|
||||
/>
|
||||
<DatePicker
|
||||
modal
|
||||
open={open}
|
||||
date={date}
|
||||
onConfirm={handleDateConfirm}
|
||||
onCancel={() => setOpen(false)}
|
||||
mode="date" // Ensure you're using date mode
|
||||
/>
|
||||
|
||||
</>
|
||||
}
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
label: {
|
||||
fontSize: 16,
|
||||
fontWeight: '600',
|
||||
color: colors.black,
|
||||
marginBottom: 10,
|
||||
},
|
||||
});
|
||||
|
||||
export default StageOne;
|
||||
@@ -0,0 +1,120 @@
|
||||
import React from 'react';
|
||||
import { Text } from 'react-native';
|
||||
import { DropdownOption } from '../types/types';
|
||||
import MyInput from '../../../Component/MyInput';
|
||||
import MyDropdown from '../../../Component/Dropdown/MyDropdown';
|
||||
|
||||
|
||||
|
||||
interface AddressDetailsSectionProps {
|
||||
formData: {
|
||||
address: string;
|
||||
agentContact2: string;
|
||||
pinCode: string;
|
||||
state: string;
|
||||
city: string;
|
||||
};
|
||||
handleChange: (field: string, value: string) => void;
|
||||
setFocusedField: (field: string | null | any) => void;
|
||||
focusedField: string | null;
|
||||
states: DropdownOption[];
|
||||
cities: DropdownOption[];
|
||||
fetchCity: (stateValue: number) => void;
|
||||
dropdownStyle?: object;
|
||||
styles?: any; // Optional styles prop for custom styling
|
||||
}
|
||||
|
||||
const StageThree: React.FC<AddressDetailsSectionProps> = ({
|
||||
formData,
|
||||
handleChange,
|
||||
setFocusedField,
|
||||
focusedField,
|
||||
states,
|
||||
cities,
|
||||
fetchCity,
|
||||
styles
|
||||
}) => {
|
||||
|
||||
const dropdownStyle = {
|
||||
borderWidth: 1,
|
||||
borderColor: '#e0e0e0',
|
||||
borderRadius: 12,
|
||||
paddingHorizontal: 14,
|
||||
height: 50,
|
||||
backgroundColor: '#fff',
|
||||
marginBottom: 10,
|
||||
};
|
||||
return (
|
||||
<>
|
||||
<Text style={styles.label}>Address Details</Text>
|
||||
|
||||
<MyInput
|
||||
icon="home"
|
||||
placeholder="Enter Address *"
|
||||
value={formData.address}
|
||||
onChangeText={text => handleChange('address', text)}
|
||||
onFocus={() => setFocusedField('address')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'address'}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
maxlength={10}
|
||||
icon="phone"
|
||||
placeholder="Contact Number *"
|
||||
value={formData.agentContact2}
|
||||
onChangeText={text => handleChange('agentContact2', text)}
|
||||
onFocus={() => setFocusedField('agentContact2')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'agentContact2'}
|
||||
keyboardType="numeric"
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="lock"
|
||||
placeholder="Pin Code *"
|
||||
keyboardType="numeric"
|
||||
maxlength={6}
|
||||
value={formData.pinCode}
|
||||
onChangeText={text => handleChange('pinCode', text)}
|
||||
onFocus={() => setFocusedField('pinCode')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'pinCode'}
|
||||
/>
|
||||
|
||||
<MyDropdown
|
||||
label="State"
|
||||
data={states}
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
placeholder="Select State"
|
||||
value={formData.state}
|
||||
onChange={item => {
|
||||
handleChange('state', item.value);
|
||||
handleChange('city', '');
|
||||
fetchCity(item.value);
|
||||
}}
|
||||
style={dropdownStyle}
|
||||
onFocus={() => setFocusedField('state')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focusedField={focusedField === 'state'}
|
||||
/>
|
||||
|
||||
<MyDropdown
|
||||
label="City"
|
||||
data={cities}
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
placeholder="Select City"
|
||||
value={formData.city}
|
||||
onChange={item => handleChange('city', item.value)}
|
||||
style={dropdownStyle}
|
||||
onFocus={() => setFocusedField('city')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focusedField={focusedField === 'city'}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default StageThree;
|
||||
@@ -0,0 +1,264 @@
|
||||
import React from 'react';
|
||||
import {
|
||||
Text,
|
||||
TouchableOpacity,
|
||||
ActivityIndicator,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import MyInput from '../../../Component/MyInput';
|
||||
|
||||
// Adjust the path to your custom input
|
||||
|
||||
interface Props {
|
||||
formData: {
|
||||
orgPanNumber: string;
|
||||
dateOfIncorp: string;
|
||||
orgPanName: string;
|
||||
aadhaarNumber: string;
|
||||
aadhaarOtp: string;
|
||||
gstnNo: string;
|
||||
};
|
||||
handleChange: (key: string, value: string) => void;
|
||||
focusedField: string | null;
|
||||
setFocusedField: (field: string | null | any) => void;
|
||||
// PAN
|
||||
panVerified: boolean;
|
||||
setPanVerified: (value: boolean) => void;
|
||||
verifyPanHandler: () => void;
|
||||
panVerifying: boolean;
|
||||
// Aadhaar
|
||||
aadhaarVerified: boolean;
|
||||
setAadhaarVerified: (value: boolean) => void;
|
||||
sendAdharOTPHandler: (aadhaarNumber: string) => void;
|
||||
adharotpsend: boolean;
|
||||
setadharotpsend: (value: boolean) => void;
|
||||
verifyAdharOtpHandler: () => void;
|
||||
aadhaarVerifying: boolean;
|
||||
// GST
|
||||
verifyGSTHandler: () => void;
|
||||
gstverifying: boolean;
|
||||
color: any;
|
||||
styles: any;
|
||||
formatDateInput: (text: string) => string;
|
||||
selectedOrg:string|number
|
||||
}
|
||||
|
||||
const StageTwo: React.FC<Props> = ({
|
||||
formData,
|
||||
handleChange,
|
||||
focusedField,
|
||||
setFocusedField,
|
||||
panVerified,
|
||||
setPanVerified,
|
||||
verifyPanHandler,
|
||||
panVerifying,
|
||||
aadhaarVerified,
|
||||
setAadhaarVerified,
|
||||
sendAdharOTPHandler,
|
||||
adharotpsend,
|
||||
setadharotpsend,
|
||||
verifyAdharOtpHandler,
|
||||
aadhaarVerifying,
|
||||
verifyGSTHandler,
|
||||
gstverifying,
|
||||
color,
|
||||
styles,
|
||||
formatDateInput,
|
||||
selectedOrg
|
||||
}) => {
|
||||
return (
|
||||
<>
|
||||
{/* ---------- PAN Details ---------- */}
|
||||
<Text style={styles.label}>PAN Details</Text>
|
||||
|
||||
<MyInput
|
||||
icon="file"
|
||||
placeholder={selectedOrg == 8 ? "Pan Number *" : "Organization PAN Number *"}
|
||||
value={formData.orgPanNumber}
|
||||
onChangeText={(text) => {
|
||||
setPanVerified(false);
|
||||
handleChange('orgPanNumber', text);
|
||||
}}
|
||||
isVarify={panVerified}
|
||||
onFocus={() => setFocusedField('pan')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'pan'}
|
||||
editable={!panVerified}
|
||||
autoCapitalize="characters"
|
||||
maxlength={10}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="calendar"
|
||||
placeholder={selectedOrg == 8 ? "Date of Birth *" :"Date of Incorporation *"}
|
||||
value={formData.dateOfIncorp}
|
||||
onChangeText={(text) => {
|
||||
const formatted = formatDateInput(text);
|
||||
setPanVerified(false);
|
||||
handleChange('dateOfIncorp', formatted);
|
||||
}}
|
||||
isVarify={panVerified}
|
||||
onFocus={() => setFocusedField('dob')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'dob'}
|
||||
editable={!panVerified}
|
||||
keyboardType='numeric'
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="file-signature"
|
||||
placeholder="PAN Name *"
|
||||
value={formData.orgPanName}
|
||||
onChangeText={(text) => {
|
||||
setPanVerified(false);
|
||||
handleChange('orgPanName', text);
|
||||
}}
|
||||
isVarify={panVerified}
|
||||
onFocus={() => setFocusedField('panName')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'panName'}
|
||||
editable={!panVerified}
|
||||
autoCapitalize="characters"
|
||||
/>
|
||||
|
||||
{formData.orgPanNumber &&
|
||||
formData.dateOfIncorp &&
|
||||
formData.orgPanName &&
|
||||
!panVerified && (
|
||||
<TouchableOpacity
|
||||
style={{
|
||||
backgroundColor: color.primary,
|
||||
padding: 10,
|
||||
marginTop: 10,
|
||||
borderRadius: 10,
|
||||
alignItems: 'center',
|
||||
width: 120,
|
||||
alignSelf: 'flex-end',
|
||||
}}
|
||||
disabled={panVerifying}
|
||||
onPress={verifyPanHandler}
|
||||
>
|
||||
<Text style={{ color: 'white', fontWeight: '600' }}>
|
||||
{panVerifying ? 'Verifying' : 'Verify PAN'}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
|
||||
{/* ---------- Aadhaar Details ---------- */}
|
||||
<Text style={styles.label}>Aadhaar Details</Text>
|
||||
|
||||
<MyInput
|
||||
icon="address-card"
|
||||
placeholder="Aadhaar Number *"
|
||||
keyboardType="numeric"
|
||||
maxlength={12}
|
||||
value={formData.aadhaarNumber}
|
||||
onChangeText={(text) => {
|
||||
handleChange('aadhaarNumber', text);
|
||||
setAadhaarVerified(false);
|
||||
setadharotpsend(false);
|
||||
handleChange('aadhaarOtp', '');
|
||||
}}
|
||||
isVarify={aadhaarVerified}
|
||||
onFocus={() => setFocusedField('adhar')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'adhar'}
|
||||
editable={!aadhaarVerified}
|
||||
/>
|
||||
|
||||
{formData.aadhaarNumber.length === 12 && !adharotpsend && (
|
||||
<TouchableOpacity
|
||||
style={{
|
||||
backgroundColor: color.primary,
|
||||
padding: 10,
|
||||
marginTop: 10,
|
||||
borderRadius: 10,
|
||||
alignItems: 'center',
|
||||
width: 120,
|
||||
alignSelf: 'flex-end',
|
||||
}}
|
||||
onPress={() => sendAdharOTPHandler(formData.aadhaarNumber)}
|
||||
disabled={aadhaarVerifying}
|
||||
>
|
||||
{aadhaarVerifying ? (
|
||||
<ActivityIndicator color="#fff" />
|
||||
) : (
|
||||
<Text style={{ color: 'white', fontWeight: '600' }}>Send OTP</Text>
|
||||
)}
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
|
||||
{adharotpsend && !aadhaarVerified && (
|
||||
<>
|
||||
<MyInput
|
||||
icon="lock"
|
||||
placeholder="Enter OTP *"
|
||||
keyboardType="numeric"
|
||||
maxlength={6}
|
||||
value={formData.aadhaarOtp}
|
||||
onChangeText={(text) => handleChange('aadhaarOtp', text)}
|
||||
onFocus={() => setFocusedField('adharOtp')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'adharOtp'}
|
||||
/>
|
||||
<TouchableOpacity
|
||||
style={{
|
||||
backgroundColor: color.primary,
|
||||
padding: 10,
|
||||
marginTop: 10,
|
||||
borderRadius: 10,
|
||||
alignItems: 'center',
|
||||
width: 120,
|
||||
alignSelf: 'flex-end',
|
||||
}}
|
||||
onPress={verifyAdharOtpHandler}
|
||||
disabled={aadhaarVerifying}
|
||||
>
|
||||
<Text style={{ color: 'white', fontWeight: '600' }}>
|
||||
{aadhaarVerifying ? 'Verifying...' : 'Verify'}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
</>
|
||||
)}
|
||||
|
||||
{/* ---------- GST Section ---------- */}
|
||||
|
||||
{selectedOrg !== 11 &&
|
||||
<>
|
||||
<MyInput
|
||||
icon="file-invoice"
|
||||
placeholder="GSTN No"
|
||||
value={formData.gstnNo}
|
||||
onChangeText={(text) => handleChange('gstnNo', text)}
|
||||
onFocus={() => setFocusedField('gstNumber')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'gstNumber'}
|
||||
autoCapitalize="characters"
|
||||
/>
|
||||
|
||||
{/* {formData?.gstnNo?.length === 15 && (
|
||||
<TouchableOpacity
|
||||
style={{
|
||||
backgroundColor: color.primary,
|
||||
padding: 10,
|
||||
marginTop: 10,
|
||||
borderRadius: 10,
|
||||
alignItems: 'center',
|
||||
width: 120,
|
||||
alignSelf: 'flex-end',
|
||||
}}
|
||||
onPress={verifyGSTHandler}
|
||||
>
|
||||
<Text style={{ color: 'white', fontWeight: '600' }}>
|
||||
{gstverifying ? 'Verifying...' : 'Verify GST'}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
)} */}
|
||||
</>}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default StageTwo;
|
||||
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import { Text, View, StyleSheet } from 'react-native';
|
||||
import MyInput from '../../../Component/MyInput';
|
||||
|
||||
|
||||
|
||||
interface Props {
|
||||
formData: {
|
||||
|
||||
agentContact2: string;
|
||||
organizationName: string;
|
||||
officialWebsite: string;
|
||||
mobileNumber: string;
|
||||
email: string;
|
||||
firstName: string;
|
||||
middleName: string;
|
||||
lastName: string
|
||||
};
|
||||
handleChange: (key: string, value: string) => void;
|
||||
focusedField: string | null;
|
||||
setFocusedField: (field: string | null | any) => void;
|
||||
styles: any;
|
||||
}
|
||||
|
||||
const StageZero: React.FC<Props> = ({
|
||||
formData,
|
||||
handleChange,
|
||||
focusedField,
|
||||
setFocusedField,
|
||||
styles,
|
||||
}) => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<Text style={styles.label}>Personal & Contact Details</Text>
|
||||
{/* <View style={styles.row}> */}
|
||||
<MyInput
|
||||
icon="user"
|
||||
placeholder="First Name *"
|
||||
value={formData.firstName}
|
||||
onChangeText={(text: string) => handleChange('firstName', text)}
|
||||
onFocus={() => setFocusedField('firstname')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'firstname'}
|
||||
editable={false}
|
||||
/>
|
||||
<View style={{ width: 10 }} />
|
||||
{
|
||||
formData.middleName ?
|
||||
|
||||
<MyInput
|
||||
icon="user"
|
||||
placeholder="Middle Name"
|
||||
value={formData.middleName}
|
||||
onChangeText={(text: string) => handleChange('middleName', text)}
|
||||
onFocus={() => setFocusedField('middleName')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'middleName'}
|
||||
editable={false}
|
||||
/>
|
||||
: null}
|
||||
|
||||
|
||||
<MyInput
|
||||
icon="user"
|
||||
placeholder="Last Name *"
|
||||
value={formData.lastName}
|
||||
onChangeText={(text: string) => handleChange('lastName', text)}
|
||||
onFocus={() => setFocusedField('lastName')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'lastName'}
|
||||
editable={false}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="envelope"
|
||||
placeholder="Email *"
|
||||
keyboardType="email-address"
|
||||
value={formData.email}
|
||||
onChangeText={(text: string) => handleChange('email', text)}
|
||||
onFocus={() => setFocusedField('email')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'email'}
|
||||
editable={false}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="phone"
|
||||
placeholder="Mobile Number *"
|
||||
keyboardType="phone-pad"
|
||||
value={formData.mobileNumber}
|
||||
onChangeText={(text: string) => handleChange('mobileNumber', text)}
|
||||
onFocus={() => setFocusedField('mobileNumber')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'mobileNumber'}
|
||||
editable={false}
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="building"
|
||||
placeholder="Organization Name *"
|
||||
value={formData.organizationName}
|
||||
onChangeText={(text: string) => handleChange('organizationName', text)}
|
||||
onFocus={() => setFocusedField('organizationName')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'organizationName'}
|
||||
autoCapitalize="none"
|
||||
/>
|
||||
|
||||
<MyInput
|
||||
icon="globe"
|
||||
placeholder="Official Website (optional)"
|
||||
value={formData.officialWebsite}
|
||||
onChangeText={(text: string) => handleChange('officialWebsite', text)}
|
||||
onFocus={() => setFocusedField('officialWebsite')}
|
||||
onBlur={() => setFocusedField(null)}
|
||||
focused={focusedField === 'officialWebsite'}
|
||||
autoCapitalize="none"
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default StageZero;
|
||||
@@ -0,0 +1,63 @@
|
||||
export type FormDataType = {
|
||||
firstName: string;
|
||||
middleName: string;
|
||||
lastName: string;
|
||||
email: string;
|
||||
mobileNumber: string;
|
||||
organizationName: string;
|
||||
officialWebsite: string;
|
||||
registrationNumber: string;
|
||||
contractorClass: string | number;
|
||||
orgType: string;
|
||||
registrationDetail: string | number;
|
||||
socialCategory: string;
|
||||
orgPanNumber: string;
|
||||
dateOfIncorp: string;
|
||||
orgPanName: string;
|
||||
gstnNo: string;
|
||||
aadhaarNumber: string;
|
||||
aadhaarOtp: string;
|
||||
address: string;
|
||||
state: string;
|
||||
city: string;
|
||||
pinCode: string;
|
||||
agentContact2: string;
|
||||
expiryDate:string
|
||||
};
|
||||
|
||||
export type UserData = {
|
||||
firstName: string;
|
||||
lastName: string;
|
||||
middleName?: string;
|
||||
email: string;
|
||||
mobileNumber: string;
|
||||
};
|
||||
|
||||
export type DocumentFile = {
|
||||
uri: string;
|
||||
type: string;
|
||||
name: string;
|
||||
};
|
||||
|
||||
export type DocumentsType = {
|
||||
panCard: DocumentFile | null;
|
||||
gstnCertificate: DocumentFile | null;
|
||||
registrationCertificate: DocumentFile | null;
|
||||
msmefile: DocumentFile | null;
|
||||
constractorClass: DocumentFile | null;
|
||||
aadharCard: DocumentFile | null;
|
||||
};
|
||||
|
||||
export type OrgType = 4 | 5 | 6 | 7 | number;
|
||||
|
||||
export type ApiResponse = {
|
||||
status: number|string;
|
||||
message?: string;
|
||||
data?: any;
|
||||
contOtherId : number|any
|
||||
};
|
||||
|
||||
export type DropdownOption = {
|
||||
label: string;
|
||||
value: string | number;
|
||||
};
|
||||
@@ -0,0 +1,511 @@
|
||||
import { useNavigation } from '@react-navigation/native';
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
TextInput,
|
||||
TouchableOpacity,
|
||||
StyleSheet,
|
||||
Alert,
|
||||
Platform,
|
||||
KeyboardAvoidingView,
|
||||
SafeAreaView,
|
||||
ScrollView,
|
||||
ToastAndroid,
|
||||
} from 'react-native';
|
||||
import colors from '../../Constant/Color';
|
||||
import { User, Phone, Mail, Lock, Eye, EyeOff, ArrowLeft, CheckSquare, Square } from 'lucide-react-native';
|
||||
import { useGetDesignation, useRegisterContractor } from '../../Services/BBPS/Hooks';
|
||||
import MyDropdown from '../../Component/Dropdown/MyDropdown';
|
||||
import PrimaryButton from '../../Component/PrimaryButton/PrimaryButton';
|
||||
import TermsAndConditionsModal from '../../Component/TermsAndConditionsModal/TermsAndConditionsModal';
|
||||
import { Formik } from 'formik';
|
||||
import * as Yup from 'yup';
|
||||
import Animated, { FadeInUp } from 'react-native-reanimated';
|
||||
import { InsideHeader } from '../../Component/Index';
|
||||
|
||||
export type ContractorFormData = {
|
||||
firstName: string;
|
||||
middleName: string;
|
||||
lastName: string;
|
||||
dialCode: string;
|
||||
mobNo: string;
|
||||
emailAdd: string;
|
||||
contractorType: string;
|
||||
designation: number;
|
||||
password: string;
|
||||
conPassword: string;
|
||||
otherDesignation: null;
|
||||
};
|
||||
|
||||
type DesignationOption = {
|
||||
label: string;
|
||||
value: string; // string id from API
|
||||
};
|
||||
|
||||
const SignupSchema = Yup.object().shape({
|
||||
bidderType: Yup.string().required('Please select bidder type.'),
|
||||
firstName: Yup.string().required('First name is required.'),
|
||||
middleName: Yup.string().optional(),
|
||||
lastName: Yup.string().required('Last name is required.'),
|
||||
designation: Yup.string().required('Please select a designation.'), // string
|
||||
mobileNumber: Yup.string()
|
||||
.matches(/^[6-9]\d{9}$/, 'Invalid mobile number.')
|
||||
.required('Mobile number is required.'),
|
||||
email: Yup.string().email('Invalid email address.').required('Email is required.'),
|
||||
password: Yup.string()
|
||||
.matches(
|
||||
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/,
|
||||
'Password must be at least 8 characters and include uppercase, lowercase, number, and special character.',
|
||||
)
|
||||
.required('Password is required.'),
|
||||
confirmPassword: Yup.string()
|
||||
.oneOf([Yup.ref('password')], 'Passwords do not match.')
|
||||
.required('Confirm password is required.'),
|
||||
});
|
||||
|
||||
const Signup = () => {
|
||||
const navigation = useNavigation<any>();
|
||||
const [designation, setDesignation] = useState<DesignationOption[]>([]);
|
||||
const { data, isLoading: isDesignationLoading } = useGetDesignation();
|
||||
const [checkModal, setCheckModal] = useState(false);
|
||||
const [isCheck, setIsCheck] = useState(false);
|
||||
const { mutate: registerContractor, isPending: isRegistering } = useRegisterContractor();
|
||||
const [showPassword, setShowPassword] = useState(false);
|
||||
const [showConfirmPassword, setShowConfirmPassword] = useState(false);
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
const list = (data as any)?.data;
|
||||
if (!Array.isArray(list)) return;
|
||||
|
||||
const formattedDesignation: DesignationOption[] = list.map((item: any) => ({
|
||||
label: item.designationName,
|
||||
value: String(item.designationid), // e.g. "3"
|
||||
}));
|
||||
setDesignation(formattedDesignation);
|
||||
|
||||
}, [data]);
|
||||
|
||||
|
||||
const dropdownStyle = {
|
||||
borderWidth: 1,
|
||||
borderColor: colors.border,
|
||||
borderRadius: 12,
|
||||
paddingHorizontal: 14,
|
||||
height: 50,
|
||||
backgroundColor: colors.white,
|
||||
marginBottom: 10,
|
||||
};
|
||||
|
||||
const renderInputWithIcon = (
|
||||
icon: 'user' | 'phone' | 'mail',
|
||||
placeholder: string,
|
||||
value: string,
|
||||
onChangeText: (text: string) => void,
|
||||
onBlur: () => void,
|
||||
error?: string,
|
||||
touched?: boolean,
|
||||
props: object = {},
|
||||
) => {
|
||||
const IconComponent = icon === 'user' ? User : icon === 'phone' ? Phone : Mail;
|
||||
|
||||
return (
|
||||
<>
|
||||
<View style={styles.inputWrapper}>
|
||||
<IconComponent size={18} color={colors.grayText} style={styles.icon} />
|
||||
<TextInput
|
||||
placeholder={placeholder}
|
||||
style={styles.input}
|
||||
placeholderTextColor={colors.placeholder}
|
||||
value={value}
|
||||
onChangeText={onChangeText}
|
||||
onBlur={onBlur}
|
||||
{...props}
|
||||
/>
|
||||
</View>
|
||||
{touched && error && <Text style={styles.errorText}>{error}</Text>}
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const renderPasswordInput = (
|
||||
placeholder: string,
|
||||
value: string,
|
||||
onChangeText: (text: string) => void,
|
||||
onBlur: () => void,
|
||||
show: boolean,
|
||||
setShow: (show: boolean) => void,
|
||||
error?: string,
|
||||
touched?: boolean,
|
||||
) => (
|
||||
<>
|
||||
<View style={styles.inputWrapper}>
|
||||
<Lock size={18} color={colors.grayText} style={styles.icon} />
|
||||
<TextInput
|
||||
placeholder={placeholder}
|
||||
style={styles.input}
|
||||
placeholderTextColor={colors.placeholder}
|
||||
value={value}
|
||||
onChangeText={onChangeText}
|
||||
onBlur={onBlur}
|
||||
secureTextEntry={!show}
|
||||
/>
|
||||
<TouchableOpacity onPress={() => setShow(!show)}>
|
||||
{show ? <Eye size={18} color={colors.grayText} /> : <EyeOff size={18} color={colors.grayText} />}
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
{touched && error && <Text style={styles.errorText}>{error}</Text>}
|
||||
</>
|
||||
);
|
||||
|
||||
const handleSubmitForm = (values: any) => {
|
||||
console.log('values', values);
|
||||
|
||||
if (!isCheck) {
|
||||
Alert.alert('Check terms and condition');
|
||||
return;
|
||||
}
|
||||
|
||||
const formData: ContractorFormData = {
|
||||
firstName: values.firstName.trim(),
|
||||
middleName: values.middleName.trim(),
|
||||
lastName: values.lastName.trim(),
|
||||
dialCode: '+91',
|
||||
mobNo: values.mobileNumber.trim(),
|
||||
emailAdd: values.email.trim(),
|
||||
contractorType: values.bidderType,
|
||||
designation: values.designation ? Number(values.designation) : 0, // convert string -> number
|
||||
password: values.password.trim(),
|
||||
otherDesignation: null,
|
||||
conPassword: values.confirmPassword.trim(),
|
||||
};
|
||||
|
||||
registerContractor(formData, {
|
||||
onSuccess: (res: any) => {
|
||||
if (res?.status === '201') {
|
||||
ToastAndroid.show(`${res.message}`, ToastAndroid.SHORT);
|
||||
navigation.pop();
|
||||
} else {
|
||||
ToastAndroid.show(`Registration failed : ${res.message}`, ToastAndroid.SHORT);
|
||||
}
|
||||
},
|
||||
onError: (error: any) => {
|
||||
ToastAndroid.show(error.message, ToastAndroid.SHORT);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<View style={styles.container}>
|
||||
<SafeAreaView style={styles.container}>
|
||||
<InsideHeader title="Sign Up" showArrow />
|
||||
<KeyboardAvoidingView
|
||||
style={styles.container}
|
||||
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
|
||||
keyboardVerticalOffset={40}
|
||||
>
|
||||
<Formik
|
||||
initialValues={{
|
||||
bidderType: '',
|
||||
firstName: '',
|
||||
middleName: '',
|
||||
lastName: '',
|
||||
designation: '', // string, not 0
|
||||
mobileNumber: '',
|
||||
email: '',
|
||||
password: '',
|
||||
confirmPassword: '',
|
||||
}}
|
||||
validationSchema={SignupSchema}
|
||||
onSubmit={handleSubmitForm}
|
||||
>
|
||||
{({
|
||||
handleChange,
|
||||
handleBlur,
|
||||
handleSubmit,
|
||||
values,
|
||||
errors,
|
||||
touched,
|
||||
setFieldValue,
|
||||
}) => (
|
||||
<ScrollView
|
||||
contentContainerStyle={styles.scrollContainer}
|
||||
keyboardShouldPersistTaps="handled"
|
||||
bounces={false}
|
||||
>
|
||||
<Animated.View entering={FadeInUp.duration(450).delay(80)}>
|
||||
<Text style={styles.label}>Bidder Type</Text>
|
||||
<View style={styles.toggleContainer}>
|
||||
{['Indian', 'Foreign'].map(type => (
|
||||
<TouchableOpacity
|
||||
key={type}
|
||||
style={[
|
||||
styles.toggleButton,
|
||||
values.bidderType === type && styles.selectedToggle,
|
||||
]}
|
||||
onPress={() => setFieldValue('bidderType', type)}
|
||||
>
|
||||
<Text
|
||||
style={[
|
||||
styles.toggleText,
|
||||
values.bidderType === type && styles.selectedToggleText,
|
||||
]}
|
||||
>
|
||||
{type}
|
||||
</Text>
|
||||
</TouchableOpacity>
|
||||
))}
|
||||
</View>
|
||||
{touched.bidderType && errors.bidderType && (
|
||||
<Text style={styles.errorText}>{errors.bidderType}</Text>
|
||||
)}
|
||||
</Animated.View>
|
||||
|
||||
<Animated.View entering={FadeInUp.duration(450).delay(120)}>
|
||||
<View style={styles.row}>
|
||||
<View style={styles.halfInput}>
|
||||
{renderInputWithIcon(
|
||||
'user',
|
||||
'First Name *',
|
||||
values.firstName,
|
||||
handleChange('firstName'),
|
||||
() => handleBlur('firstName'),
|
||||
errors.firstName,
|
||||
touched.firstName,
|
||||
)}
|
||||
</View>
|
||||
<View style={styles.halfInput}>
|
||||
{renderInputWithIcon(
|
||||
'user',
|
||||
'Middle Name',
|
||||
values.middleName,
|
||||
handleChange('middleName'),
|
||||
() => handleBlur('middleName'),
|
||||
errors.middleName,
|
||||
touched.middleName,
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
|
||||
{renderInputWithIcon(
|
||||
'user',
|
||||
'Last Name *',
|
||||
values.lastName,
|
||||
handleChange('lastName'),
|
||||
() => handleBlur('lastName'),
|
||||
errors.lastName,
|
||||
touched.lastName,
|
||||
)}
|
||||
</Animated.View>
|
||||
|
||||
<Animated.View entering={FadeInUp.duration(450).delay(160)}>
|
||||
<Text style={styles.label}>Designation</Text>
|
||||
<MyDropdown
|
||||
label="Select Designation"
|
||||
labelField="label"
|
||||
valueField="value"
|
||||
data={designation}
|
||||
value={values.designation}
|
||||
onChange={(item: any) => {
|
||||
setFieldValue('designation', item.value);
|
||||
}}
|
||||
placeholder={isDesignationLoading ? 'Loading...' : 'Choose Designation'}
|
||||
style={dropdownStyle}
|
||||
/>
|
||||
{touched.designation && errors.designation && (
|
||||
<Text style={styles.errorText}>{errors.designation}</Text>
|
||||
)}
|
||||
</Animated.View>
|
||||
|
||||
<Animated.View entering={FadeInUp.duration(450).delay(200)}>
|
||||
{renderInputWithIcon(
|
||||
'phone',
|
||||
'Mobile Number *',
|
||||
values.mobileNumber,
|
||||
handleChange('mobileNumber'),
|
||||
() => handleBlur('mobileNumber'),
|
||||
errors.mobileNumber,
|
||||
touched.mobileNumber,
|
||||
{
|
||||
keyboardType: 'phone-pad',
|
||||
maxLength: 10,
|
||||
},
|
||||
)}
|
||||
|
||||
{renderInputWithIcon(
|
||||
'mail',
|
||||
'Email *',
|
||||
values.email,
|
||||
handleChange('email'),
|
||||
() => handleBlur('email'),
|
||||
errors.email,
|
||||
touched.email,
|
||||
{
|
||||
keyboardType: 'email-address',
|
||||
autoCapitalize: 'none',
|
||||
},
|
||||
)}
|
||||
</Animated.View>
|
||||
|
||||
<Animated.View entering={FadeInUp.duration(450).delay(240)}>
|
||||
{renderPasswordInput(
|
||||
'Password *',
|
||||
values.password,
|
||||
handleChange('password'),
|
||||
() => handleBlur('password'),
|
||||
showPassword,
|
||||
setShowPassword,
|
||||
errors.password,
|
||||
touched.password,
|
||||
)}
|
||||
|
||||
{renderPasswordInput(
|
||||
'Confirm Password *',
|
||||
values.confirmPassword,
|
||||
handleChange('confirmPassword'),
|
||||
() => handleBlur('confirmPassword'),
|
||||
showConfirmPassword,
|
||||
setShowConfirmPassword,
|
||||
errors.confirmPassword,
|
||||
touched.confirmPassword,
|
||||
)}
|
||||
</Animated.View>
|
||||
|
||||
<Animated.View entering={FadeInUp.duration(450).delay(280)}>
|
||||
<View style={styles.termsRow}>
|
||||
<TouchableOpacity onPress={() => setCheckModal(true)}>
|
||||
{isCheck ? (
|
||||
<CheckSquare size={20} color={colors.primary} />
|
||||
) : (
|
||||
<Square size={20} color={colors.black} />
|
||||
)}
|
||||
</TouchableOpacity>
|
||||
<Text style={styles.termsText}>
|
||||
By continuing, I agree to the Terms and Conditions
|
||||
</Text>
|
||||
</View>
|
||||
</Animated.View>
|
||||
|
||||
<Animated.View entering={FadeInUp.duration(450).delay(320)} style={styles.buttonWrapper}>
|
||||
<PrimaryButton
|
||||
title={isRegistering ? 'Submitting...' : 'Submit'}
|
||||
disabled={isRegistering}
|
||||
onPress={() => handleSubmit()}
|
||||
/>
|
||||
</Animated.View>
|
||||
|
||||
{checkModal && (
|
||||
<TermsAndConditionsModal
|
||||
visible={checkModal}
|
||||
onClose={() => setCheckModal(false)}
|
||||
onChecked={() => setIsCheck(true)}
|
||||
/>
|
||||
)}
|
||||
</ScrollView>
|
||||
)}
|
||||
</Formik>
|
||||
</KeyboardAvoidingView>
|
||||
</SafeAreaView>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default Signup;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
flex: 1,
|
||||
backgroundColor: colors.white,
|
||||
},
|
||||
scrollContainer: {
|
||||
flexGrow: 1,
|
||||
paddingHorizontal: 16,
|
||||
paddingTop: 12,
|
||||
paddingBottom: 24,
|
||||
justifyContent: 'flex-start',
|
||||
},
|
||||
label: {
|
||||
fontSize: 15,
|
||||
fontWeight: '600',
|
||||
marginTop: 6,
|
||||
marginBottom: 4,
|
||||
color: colors.darkText,
|
||||
},
|
||||
toggleContainer: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
marginBottom: 4,
|
||||
},
|
||||
toggleButton: {
|
||||
flex: 1,
|
||||
paddingVertical: 10,
|
||||
borderRadius: 10,
|
||||
borderWidth: 1,
|
||||
borderColor: colors.primary,
|
||||
alignItems: 'center',
|
||||
marginHorizontal: 4,
|
||||
backgroundColor: colors.white,
|
||||
},
|
||||
selectedToggle: {
|
||||
backgroundColor: colors.primary,
|
||||
borderColor: colors.primary,
|
||||
},
|
||||
toggleText: {
|
||||
fontSize: 14,
|
||||
color: colors.grayText,
|
||||
},
|
||||
selectedToggleText: {
|
||||
color: colors.white,
|
||||
fontWeight: '600',
|
||||
},
|
||||
row: {
|
||||
flexDirection: 'row',
|
||||
justifyContent: 'space-between',
|
||||
marginTop: 6,
|
||||
},
|
||||
halfInput: {
|
||||
width: '48%',
|
||||
},
|
||||
inputWrapper: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
backgroundColor: colors.white,
|
||||
borderRadius: 12,
|
||||
borderWidth: 1,
|
||||
borderColor: colors.border,
|
||||
paddingHorizontal: 10,
|
||||
marginTop: 8,
|
||||
height: 52,
|
||||
},
|
||||
icon: {
|
||||
marginRight: 10,
|
||||
},
|
||||
input: {
|
||||
flex: 1,
|
||||
fontSize: 15,
|
||||
color: colors.darkText,
|
||||
paddingVertical: 0,
|
||||
},
|
||||
errorText: {
|
||||
color: colors.error,
|
||||
fontSize: 12,
|
||||
marginTop: 3,
|
||||
marginLeft: 4,
|
||||
},
|
||||
termsRow: {
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
marginTop: 14,
|
||||
marginHorizontal: 2,
|
||||
},
|
||||
termsText: {
|
||||
flex: 1,
|
||||
fontSize: 13,
|
||||
color: colors.darkText,
|
||||
marginLeft: 8,
|
||||
},
|
||||
buttonWrapper: {
|
||||
marginTop: 18,
|
||||
},
|
||||
});
|
||||
+210
-26
@@ -1,40 +1,224 @@
|
||||
import { View, Text } from 'react-native';
|
||||
import React, { useEffect } from 'react';
|
||||
import FontsFamily from '../../Constant/FontsFamily';
|
||||
import { useNavigation } from '@react-navigation/native';
|
||||
import NavigationString from '../../Constant/NavigationString';
|
||||
import React, { useEffect, useRef, useState, useCallback } from 'react';
|
||||
import { Animated, StyleSheet, View } from 'react-native';
|
||||
import { useNavigation, useIsFocused } from '@react-navigation/native';
|
||||
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useStore } from 'react-redux'; // For hydration check
|
||||
|
||||
const Splash = () => {
|
||||
const navigation: any = useNavigation();
|
||||
const Token = useSelector((state: any) => state.token.token)
|
||||
import { showToast } from '../../Constant/ShowDailog';
|
||||
import { useRagistrationState } from '../../Services/BBPS/Hooks';
|
||||
import NavigationString from '../../Constant/NavigationString';
|
||||
|
||||
const handleSplashNavigation = async () => {
|
||||
try {
|
||||
const isOnboardingDone = await AsyncStorage.getItem('onBoarding');
|
||||
if (isOnboardingDone != 'true') {
|
||||
navigation.replace(NavigationString.Onboarding);
|
||||
} else if (Token.token) {
|
||||
navigation.replace(NavigationString.Home);
|
||||
} else {
|
||||
navigation.replace(NavigationString.Login);
|
||||
}
|
||||
} catch (error) {
|
||||
navigation.replace(NavigationString.Onboarding);
|
||||
// Navigation type
|
||||
export type Navigation = {
|
||||
reset(arg0: {
|
||||
index: number;
|
||||
routes: { name: string; }[];
|
||||
}): unknown;
|
||||
navigate: (route: string, params?: { [key: string]: any }) => void;
|
||||
replace: (route: string, params?: { [key: string]: any }) => void;
|
||||
};
|
||||
|
||||
const Splash: React.FC = () => {
|
||||
const navigation = useNavigation() as Navigation;
|
||||
const isFocused = useIsFocused();
|
||||
const fadeAnim = useRef(new Animated.Value(0)).current;
|
||||
const reduxToken = useSelector((state: any) => state.token?.token);
|
||||
const store = useStore();
|
||||
const { mutateAsync: registrationStateMutate } = useRagistrationState();
|
||||
const [isHydrated, setIsHydrated] = useState(false);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
|
||||
// Wait for Redux hydration (works with/without redux-persist)
|
||||
useEffect(() => {
|
||||
let unsubscribe: any;
|
||||
const checkHydration = () => {
|
||||
const token = (store.getState() as any).token?.token;
|
||||
if (token !== undefined) { // Defined = hydrated (null/empty/string ok)
|
||||
setIsHydrated(true);
|
||||
unsubscribe?.();
|
||||
}
|
||||
};
|
||||
useEffect(() => {
|
||||
handleSplashNavigation()
|
||||
|
||||
unsubscribe = store.subscribe(checkHydration);
|
||||
checkHydration(); // Check immediately
|
||||
|
||||
return () => unsubscribe?.();
|
||||
}, []);
|
||||
|
||||
const getToken = useCallback(async (): Promise<string | null> => {
|
||||
try {
|
||||
// Redux first (post-hydration), then AsyncStorage fallback
|
||||
let token = reduxToken;
|
||||
if (token === undefined) {
|
||||
token = await AsyncStorage.getItem('token');
|
||||
}
|
||||
return token || null;
|
||||
} catch (error) {
|
||||
console.error('Token fetch error:', error);
|
||||
return null;
|
||||
}
|
||||
}, [reduxToken]);
|
||||
|
||||
const routeByOrgType = (params: { otherId: any; orgType: any }) => {
|
||||
const orgType = String(params.orgType);
|
||||
|
||||
if (orgType === '4' || orgType === '5' || orgType === '6') {
|
||||
navigation.replace('StageThree', params);
|
||||
return;
|
||||
}
|
||||
|
||||
if (orgType === '7') {
|
||||
navigation.replace('PartnerShip', params);
|
||||
return;
|
||||
}
|
||||
|
||||
navigation.replace('Dashboard');
|
||||
};
|
||||
|
||||
const handleGetData = async () => {
|
||||
try {
|
||||
const res = await registrationStateMutate();
|
||||
console.log('Registration status response:', res?.statusCode);
|
||||
|
||||
if (res?.statusCode === 404 || res?.statusCode === 401) {
|
||||
navigation.replace('Registration');
|
||||
return;
|
||||
}
|
||||
|
||||
if (res?.statusCode === 200 && res?.data) {
|
||||
const { registrationStatus, contOtherId, contOrganization } = res.data;
|
||||
const params = { otherId: contOtherId, orgType: contOrganization };
|
||||
console.log('Registration status:', registrationStatus);
|
||||
|
||||
switch (registrationStatus) {
|
||||
case null:
|
||||
case undefined:
|
||||
navigation.replace(NavigationString.Registration);
|
||||
break;
|
||||
case 'Pending':
|
||||
routeByOrgType(params);
|
||||
break;
|
||||
case 'Complete':
|
||||
case 'Completed':
|
||||
navigation.replace(NavigationString.Home);
|
||||
break;
|
||||
default:
|
||||
navigation.replace(NavigationString.Registration);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
console.error('API error:', res);
|
||||
showToast(res?.message || 'Something went wrong');
|
||||
navigation.replace('Registration');
|
||||
} catch (error: any) {
|
||||
console.error('Registration status error:', error);
|
||||
showToast(error?.message || 'Something went wrong');
|
||||
|
||||
if (error?.response?.status === 404) {
|
||||
navigation.replace('Registration');
|
||||
} else {
|
||||
await AsyncStorage.removeItem('token');
|
||||
navigation.replace('Signin');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (!isFocused || !isHydrated) return;
|
||||
|
||||
const runSplash = async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
Animated.timing(fadeAnim, {
|
||||
toValue: 1,
|
||||
duration: 500,
|
||||
useNativeDriver: true,
|
||||
}).start();
|
||||
|
||||
const token = await getToken();
|
||||
console.log("Token after hydration -", token, typeof token, !!token);
|
||||
|
||||
if (!token) {
|
||||
console.log('No valid token, navigating to Login');
|
||||
navigation.reset({
|
||||
index: 0,
|
||||
routes: [{ name: NavigationString.Login || 'Signin' }], // Fallback
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('Valid token, fetching registration data');
|
||||
await handleGetData();
|
||||
} catch (error) {
|
||||
console.error('Splash Error:', error);
|
||||
navigation.reset({
|
||||
index: 0,
|
||||
routes: [{ name: NavigationString.Login || 'Signin' }],
|
||||
});
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
};
|
||||
|
||||
// Small delay ensures hydration + native animation complete
|
||||
const timeoutId = setTimeout(runSplash, 200);
|
||||
return () => clearTimeout(timeoutId);
|
||||
}, [isFocused, isHydrated, getToken]);
|
||||
|
||||
if (!isHydrated) {
|
||||
return (
|
||||
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
||||
<Text style={{ fontFamily: FontsFamily.poppinsBlack }}>
|
||||
Splash
|
||||
</Text>
|
||||
<View style={styles.loadingContainer}>
|
||||
<Animated.Image
|
||||
source={require('../../Images/logo.png')}
|
||||
style={[styles.logo, { opacity: fadeAnim }]}
|
||||
resizeMode="contain"
|
||||
/>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={styles.appView}>
|
||||
<View style={styles.container}>
|
||||
<Animated.Image
|
||||
source={require('../../Images/logo.png')}
|
||||
style={[styles.logo, { opacity: fadeAnim }]}
|
||||
resizeMode="contain"
|
||||
/>
|
||||
{isLoading && (
|
||||
<View style={{ marginTop: 20 }}>
|
||||
{/* Optional spinner */}
|
||||
</View>
|
||||
)}
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
};
|
||||
|
||||
export default Splash;
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
appView: {
|
||||
flex: 1,
|
||||
backgroundColor: '#fff',
|
||||
},
|
||||
container: {
|
||||
flex: 1,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
},
|
||||
logo: {
|
||||
width: 160,
|
||||
height: 160,
|
||||
marginBottom: 20,
|
||||
},
|
||||
loadingContainer: {
|
||||
flex: 1,
|
||||
backgroundColor: '#fff',
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
},
|
||||
});
|
||||
|
||||
@@ -7,6 +7,8 @@ import StartReverseBidding from "./Bidding/StartReverseBidding";
|
||||
import Home from "./Home/Home";
|
||||
import Login from "./Login/Login";
|
||||
import Onboarding from "./Onboarding/Onboarding";
|
||||
import Registration from "./Ragistration/Ragistration";
|
||||
import Signup from "./SignUp/SignUp";
|
||||
import Splash from "./Splash/Splash";
|
||||
import ProceedToBidDetail from "./Tender/ProceedToBidDetail";
|
||||
import ProceedToPurTender from "./Tender/ProceedToPurTender";
|
||||
@@ -30,6 +32,10 @@ const Screens = {
|
||||
ProceedToPurTender,
|
||||
TenderBidding,
|
||||
ProceedToBidDetail,
|
||||
StartReverseBidding
|
||||
StartReverseBidding,
|
||||
Signup,
|
||||
Registration
|
||||
|
||||
|
||||
}
|
||||
export default Screens
|
||||
@@ -64,6 +64,7 @@ const ITEM_DOCUMENT_DOWNLOAD = `${BASE_URL_Auction}api/auction/home/downloadDocu
|
||||
const DASHBOARD_COUNT = `${BASE_URL_Auction}api/auction/home/dashboard/counts`
|
||||
const AUCTION_ONE_TIME_BID =`${BASE_URL_Auction}api/bidding/getBidForAuction`
|
||||
|
||||
|
||||
//tender
|
||||
|
||||
const TENDER_LOGIN = `${BASE_URL}eproc/loginWithoutDecryption`
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
import { useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query';
|
||||
import { fetchAuctionItem, fetchDashboard, fetchEmdCheck, fetchLiveAuction, fetchLiveTender, fetchPurchaseAuction, fetchPurchaseTender, offlineAuctionPurchase, userLogin } from './apis';
|
||||
import { fetchDashboard, fetchLiveAuction, fetchLiveTender, fetchPurchaseAuction, fetchPurchaseTender, offlineAuctionPurchase, userLogin, offlineTenderPurchase, fetchTenderById, proceedToBid } from './apis';
|
||||
import { contractorStageThreeSubmit, contractorStageTwoSubmit, fetchAuctionItem, fetchCityDropdown, fetchDashboard, fetchEmdCheck, fetchLiveAuction, fetchLiveTender, fetchMasterData, fetchPurchaseAuction, fetchPurchaseTender, fetchTenderById, getDesignation, getRagistrationState, offlineAuctionPurchase, offlineTenderPurchase, proceedToBid, registerContractor, sendAadhaarOtp, userAuctionLogin, userLogin, verifyAadhaarOtp, verifyGstNumber, verifyPanHandler } from './apis';
|
||||
import { apiCall } from '../../Axios/Axios';
|
||||
|
||||
// User
|
||||
|
||||
export const useLogin = () => {
|
||||
console.log("hitting here")
|
||||
return useMutation({
|
||||
mutationFn: (payload: { emailAdd: string, password: string }) => userLogin(payload),
|
||||
});
|
||||
};
|
||||
export const useAuctionLogin = () => {
|
||||
console.log("hitting here")
|
||||
return useMutation({
|
||||
mutationFn: (payload: { emailAdd: string, password: string }) => userAuctionLogin(payload),
|
||||
});
|
||||
};
|
||||
|
||||
// Dashboard
|
||||
export const useDashboard = () => {
|
||||
@@ -120,4 +127,84 @@ export const useProceedToBid = (tenderId?: string) => {
|
||||
});
|
||||
};
|
||||
|
||||
export const useAuctionItem = () => {
|
||||
return useMutation({
|
||||
mutationFn: (payload: any) => fetchAuctionItem(payload),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// EMD
|
||||
export const useEmdCheck = () => {
|
||||
return useMutation({
|
||||
mutationFn: (payload: any) => fetchEmdCheck(payload),
|
||||
});
|
||||
};
|
||||
|
||||
export const useGetDesignation = () => {
|
||||
return useQuery({
|
||||
queryKey: ['Designation'],
|
||||
queryFn: () => getDesignation()
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
export const useRegisterContractor = () => {
|
||||
return useMutation({
|
||||
mutationFn: (payload: any) => registerContractor(payload),
|
||||
});
|
||||
};
|
||||
|
||||
export const useRagistrationState = () => {
|
||||
return useMutation({
|
||||
mutationFn: () => getRagistrationState(),
|
||||
});
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
export const usefetchMasterData = () => {
|
||||
return useQuery({
|
||||
queryKey: ['MasterData'],
|
||||
queryFn: () => fetchMasterData()
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
export const useCityDropdown = () => {
|
||||
return useMutation({
|
||||
mutationFn: (stateId: number) => fetchCityDropdown(stateId),
|
||||
});
|
||||
};
|
||||
|
||||
export const useVerifyPan = () =>
|
||||
useMutation({
|
||||
mutationFn: verifyPanHandler,
|
||||
});
|
||||
|
||||
|
||||
export const useSendAadhaarOtp = () =>
|
||||
useMutation({
|
||||
mutationFn: sendAadhaarOtp,
|
||||
});
|
||||
|
||||
export const useVerifyAadhaarOtp = () =>
|
||||
useMutation({
|
||||
mutationFn: verifyAadhaarOtp,
|
||||
});
|
||||
|
||||
export const useVerifyGstNumber = () =>
|
||||
useMutation({
|
||||
mutationFn: verifyGstNumber,
|
||||
});
|
||||
|
||||
|
||||
export const useContractorStageTwoSubmit = () =>
|
||||
useMutation({
|
||||
mutationFn: contractorStageTwoSubmit,
|
||||
});
|
||||
|
||||
export const useContractorStageThreeSubmit = () =>
|
||||
useMutation({
|
||||
mutationFn: contractorStageThreeSubmit,
|
||||
});
|
||||
+152
-1
@@ -1,9 +1,19 @@
|
||||
import axios from "axios";
|
||||
import { DASHBOARD_COUNT, EMD_CHECK, FORARD_AUCTION_ITEM, GET_MY_AUCTION, GET_MY_TENDER, GET_TENDER_DETAILS, LIVE_AUCTION, LIVE_TENDER, LOG_IN_URL, PROCEED_PURCHASE_AUCTION, PROCEED_TO_BID, PURCHASE_OFFLINE_AUCTION, PURCHASE_TENDER_OFFLINE, REVERSE_AUCTION_ITEM, TENDER_LOGIN } from "./ApiUrls";
|
||||
import { ALL_DESIGNATION, DASHBOARD_COUNT, EMD_CHECK, FORARD_AUCTION_ITEM, GET_MASTER_DATA, GET_MY_AUCTION, GET_MY_TENDER, GET_REGISTRATION_STATE, GET_TENDER_DETAILS, GETCONTRACTORBYSTATE, LIVE_AUCTION, LIVE_TENDER, LOG_IN_URL, PROCEED_PURCHASE_AUCTION, PROCEED_TO_BID, PURCHASE_OFFLINE_AUCTION, PURCHASE_TENDER_OFFLINE, REJ_STAGE_TWO, REVERSE_AUCTION_ITEM, SAVE_CONTRACTOR_STAGE1, SEND_ADHAROTP, STAGETHREE, TENDER_LOGIN, VERIFY_ADHAR, VERIFY_GST,VERIFY_ORGPAN } from "./ApiUrls";
|
||||
import { apiCall } from "../../Axios/Axios";
|
||||
|
||||
// User
|
||||
|
||||
type DropdownOption = { label: string; value: number | string };
|
||||
|
||||
type State = { stateId: number; stateName: string };
|
||||
type ContractorClass = { contClassId: number; contClassName?: string };
|
||||
type Org = { orgId: number; organizationType: string };
|
||||
type MSME = { msmeId: number; comName: string };
|
||||
type Social = { socialCategoryId: number; categoryName: string };
|
||||
type Designation = { designationid: number; designationName: string };
|
||||
type City = { id: number; name: string };
|
||||
|
||||
export const userLogin = async (payload: { emailAdd: string, password: string }): Promise<any> => {
|
||||
try {
|
||||
// const response = await axios.post(LOG_IN_URL, { ...payload, divice: "mobileApp" });
|
||||
@@ -13,7 +23,24 @@ export const userLogin = async (payload: { emailAdd: string, password: string })
|
||||
throw error.response?.data || error.message;
|
||||
}
|
||||
};
|
||||
export const userAuctionLogin = async (payload: { emailAdd: string, password: string }): Promise<any> => {
|
||||
try {
|
||||
const response = await axios.post(LOG_IN_URL, { ...payload, device: "mobileApp" });
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
throw error.response?.data || error.message;
|
||||
}
|
||||
};
|
||||
|
||||
export const registerContractor = async (payload: any): Promise<any> => {
|
||||
console.log("registerContractor payload : ", payload)
|
||||
try {
|
||||
const response = await axios.post(SAVE_CONTRACTOR_STAGE1, { ...payload, device: "mobileApp" });
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
throw error.response?.data || error.message;
|
||||
}
|
||||
};
|
||||
export const fetchDashboard = async (): Promise<any> => {
|
||||
const data = await apiCall<any>('get', `${DASHBOARD_COUNT}`);
|
||||
return data
|
||||
@@ -110,3 +137,127 @@ export const proceedToBid = async (tenderId: string): Promise<any> => {
|
||||
);
|
||||
return data;
|
||||
}
|
||||
|
||||
export const getDesignation = async (): Promise<any> => {
|
||||
const data = await axios.get(ALL_DESIGNATION).then((response) => response.data);
|
||||
return data;
|
||||
}
|
||||
|
||||
export const getRagistrationState = async (): Promise<any> => {
|
||||
const data = await apiCall<any>(
|
||||
'get',
|
||||
`${GET_REGISTRATION_STATE}`
|
||||
);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
export const fetchMasterData = async (): Promise<any> => {
|
||||
const data = await apiCall<any>(
|
||||
'get',
|
||||
`${GET_MASTER_DATA}`
|
||||
);
|
||||
return data;
|
||||
};
|
||||
|
||||
|
||||
export const fetchCityDropdown = async (stateId: number): Promise<any> => {
|
||||
const res = await apiCall<{ statusCode: number; data: City[] }>(
|
||||
'get',
|
||||
`${GETCONTRACTORBYSTATE}?stateId=${stateId}`,
|
||||
);
|
||||
console.log("--",res)
|
||||
if (res.statusCode !== 200 || !res.data) {
|
||||
throw new Error('Failed load cities');
|
||||
}
|
||||
|
||||
return res.data.map(item => ({
|
||||
label: item.name,
|
||||
value: item.id,
|
||||
}));
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
export const verifyPanHandler = (
|
||||
payload: {
|
||||
dob: string;
|
||||
name: string;
|
||||
panNumber: string;
|
||||
}
|
||||
): Promise<any> => {
|
||||
return apiCall<any>(
|
||||
'post',
|
||||
VERIFY_ORGPAN,
|
||||
payload,
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
export const sendAadhaarOtp = (
|
||||
payload: any
|
||||
): Promise<any> => {
|
||||
return apiCall<any>('post', SEND_ADHAROTP, payload);
|
||||
};
|
||||
|
||||
|
||||
export type VerifyAadhaarOtpPayload = {
|
||||
otp: string;
|
||||
refNumber: string;
|
||||
};
|
||||
|
||||
export const verifyAadhaarOtp = (
|
||||
payload: {
|
||||
otp: string;
|
||||
refNumber: string;
|
||||
}
|
||||
): Promise<any> => {
|
||||
return apiCall<any>(
|
||||
'post',
|
||||
VERIFY_ADHAR,
|
||||
payload,
|
||||
);
|
||||
};
|
||||
|
||||
export type VerifyGstPayload = {
|
||||
gstNumber: string;
|
||||
};
|
||||
|
||||
export const verifyGstNumber = (
|
||||
payload: {
|
||||
gstNumber: string;
|
||||
}
|
||||
): Promise<any> => {
|
||||
return apiCall<any>(
|
||||
'post',
|
||||
VERIFY_GST,
|
||||
payload,
|
||||
);
|
||||
};
|
||||
export const contractorStageTwoSubmit = (
|
||||
fileData: any
|
||||
): Promise<any> => {
|
||||
return apiCall<any>(
|
||||
'post',
|
||||
REJ_STAGE_TWO,
|
||||
fileData,
|
||||
undefined,
|
||||
'multipart/form-data'
|
||||
);
|
||||
};
|
||||
|
||||
export const contractorStageThreeSubmit = (
|
||||
payload: any
|
||||
): Promise<any> => {
|
||||
return apiCall<any>(
|
||||
'post',
|
||||
STAGETHREE,
|
||||
payload,
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user