Skip to content

Commit c58658b

Browse files
Add validation around the debug flag to allow creating not standard p… (block-core#673)
* add validation around the debug flag to allow creating not standard projects for testing * plug in the claim coins by founder * Fix the release funds buttons for the on the founder side * Add behavior to auto-load stages on ClaimView initialization - Added `InvokeCommandAction` to trigger the `Load` command in `ClaimView.axaml` for auto-loading stages when the view is initialized. - Removed obsolete auto-loading logic from `ClaimViewModel.cs`. --------- Co-authored-by: SuperJMN <superjmn@outlook.com>
1 parent f39472b commit c58658b

28 files changed

+283
-103
lines changed

src/Angor/Avalonia/Angor.Sdk/Funding/Founder/Operations/GetReleasableTransactions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public async Task<Result<GetReleasableTransactionsResponse>> Handle(GetReleasabl
4040
{
4141
Approved = x.ApprovaleTime,
4242
Arrived = x.InvestmentRequestTime,
43-
Released = x.ReleaseSignaturesTime,
43+
Released = x.ReleaseSignaturesTime == default ? null : x.ReleaseSignaturesTime,
4444
InvestmentEventId = x.SignRecoveryRequestEventId
4545
});
4646

src/Angor/Avalonia/Angor.Sdk/Funding/Founder/Operations/SpendStageFunds.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ public async Task<Result<SpendStageFundsResponse>> Handle(SpendStageFundsRequest
6969

7070
var addressScript = BitcoinAddress.Create(addressResult.Value, network).ScriptPubKey;
7171

72+
int stageNumber = selectedStageId + 1;
73+
7274
var signedTransaction = founderTransactionActions.SpendFounderStage(founderContext.ProjectInfo,
73-
founderContext.InvestmentTrasnactionsHex, selectedStageId, addressScript,
75+
founderContext.InvestmentTrasnactionsHex, stageNumber, addressScript,
7476
founderKey, request.SelectedFee);
7577

7678
return Result.Success(new SpendStageFundsResponse(new TransactionDraft

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/CreateProjectFlow.cs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,19 @@ ProjectSeedDto seed
7676

7777
private SlimWizard<string> CreateInvestmentProjectWizard(WalletId walletId, ProjectSeedDto seed)
7878
{
79-
InvestmentProjectConfigBase newProject =
80-
uiServices.EnableProductionValidations() ? new InvestmentProjectConfig() : new InvestmentProjectConfigDebug();
79+
var isDebug = !uiServices.EnableProductionValidations();
80+
var environment = isDebug ? ValidationEnvironment.Debug : ValidationEnvironment.Production;
81+
InvestmentProjectConfigBase newProject = isDebug ? new InvestmentProjectConfigDebug() : new InvestmentProjectConfig();
82+
83+
if (isDebug)
84+
{
85+
PopulateDebugDefaults(newProject);
86+
}
8187

8288
SlimWizard<string> wizard = WizardBuilder
8389
.StartWith(() => new ProjectProfileViewModel(newProject)).NextUnit().WhenValid()
8490
.Then(_ => new ProjectImagesViewModel(newProject, imagePicker)).NextUnit().Always()
85-
.Then(_ => new FundingConfigurationViewModel(newProject)).NextUnit().WhenValid()
91+
.Then(_ => new FundingConfigurationViewModel(newProject, environment)).NextUnit().WhenValid()
8692
.Then(_ => new StagesViewModel(newProject)).NextUnit().WhenValid()
8793
.Then(_ => new ReviewAndDeployViewModel(
8894
newProject,
@@ -125,6 +131,24 @@ private SlimWizard<string> CreateFundProjectWizard(WalletId walletId, ProjectSee
125131
return wizard;
126132
}
127133

134+
private static void PopulateDebugDefaults(InvestmentProjectConfigBase project)
135+
{
136+
var id = Guid.NewGuid().ToString()[..8];
137+
project.Name = $"Debug Project {id}";
138+
project.Description = $"Auto-populated debug project {id} for testing on testnet. Created at {DateTime.Now:HH:mm:ss}.";
139+
project.Website = "https://angor.io";
140+
project.TargetAmount = AmountUI.FromBtc(0.01);
141+
project.PenaltyDays = 0;
142+
project.StartDate = DateTime.Now;
143+
project.FundingEndDate = DateTime.Now;
144+
project.ExpiryDate = DateTime.Now.AddDays(1);
145+
146+
// Add stages with dates matching the funding end date for immediate release
147+
project.CreateAndAddStage(0.10m, DateTime.Now);
148+
project.CreateAndAddStage(0.30m, DateTime.Now);
149+
project.CreateAndAddStage(0.60m, DateTime.Now);
150+
}
151+
128152
private async Task<Result<ProjectSeedDto>> GetProjectSeed(WalletId walletId)
129153
{
130154
var result = await founderAppService.CreateProjectKeys(new CreateProjectKeys.CreateProjectKeysRequest(walletId));

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/FundProject/Model/DebugData.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ public class DebugData
55
public static string GetDefaultImageUriString(int width, int height)
66
{
77
#if DEBUG
8-
return $"https://picsum.photos/{width}/{height}";
8+
var seed = Guid.NewGuid().ToString("N")[..8];
9+
return $"https://picsum.photos/seed/{seed}/{width}/{height}";
910
#else
1011
return "";
1112
#endif

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationView.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@
304304
<TextBlock Classes="Muted" Text="High Value" HorizontalAlignment="Right" />
305305
</Panel>
306306

307-
<Slider x:Name="PenaltyDays" Minimum="30" Maximum="180" Value="{Binding NewProject.PenaltyDays}" Foreground="{DynamicResource Accent}" Background="{DynamicResource Stroke}">
307+
<Slider x:Name="PenaltyDays" Minimum="{Binding MinPenaltyDays}" Maximum="{Binding MaxPenaltyDays}" Value="{Binding NewProject.PenaltyDays}" Foreground="{DynamicResource Accent}" Background="{DynamicResource Stroke}">
308308
<Slider.Resources>
309309
</Slider.Resources>
310310
</Slider>

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationViewModel.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,14 @@ public class FundingConfigurationViewModel : ReactiveObject, IHaveTitle, IFundin
1111
public IInvestmentProjectConfig NewProject { get; }
1212
private readonly CompositeDisposable disposable = new();
1313

14-
public FundingConfigurationViewModel(IInvestmentProjectConfig newProject)
14+
public int MinPenaltyDays { get; }
15+
public int MaxPenaltyDays { get; }
16+
17+
public FundingConfigurationViewModel(IInvestmentProjectConfig newProject, ValidationEnvironment environment = ValidationEnvironment.Production)
1518
{
1619
NewProject = newProject;
20+
MinPenaltyDays = environment == ValidationEnvironment.Debug ? 0 : 30;
21+
MaxPenaltyDays = environment == ValidationEnvironment.Debug ? 365 : 180;
1722

1823
if (NewProject.StartDate == null)
1924
{

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/FundingConfigurationViewModelSample.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,7 @@ public class FundingConfigurationViewModelSample : IFundingConfigurationViewMode
1414

1515
public IInvestmentProjectConfig NewProject { get; } = new InvestmentProjectConfigSample();
1616
public long? SelectedPresetSats { get; set; }
17+
public int MinPenaltyDays => 30;
18+
public int MaxPenaltyDays => 180;
1719
}
1820
}

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/IFundingConfigurationViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@ public interface IFundingConfigurationViewModel
77
IEnumerable<IAmountUI> AmountPresets { get; }
88
IInvestmentProjectConfig NewProject { get; }
99
long? SelectedPresetSats { get; set; }
10+
int MinPenaltyDays { get; }
11+
int MaxPenaltyDays { get; }
1012
}
1113
}

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/Model/FundingStageConfig.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ public partial class FundingStageConfig : ReactiveValidationObject, IFundingStag
1212
private readonly BehaviorSubject<IObservable<DateTime>> previousDateSource;
1313
[ObservableAsProperty] private TimeSpan? timeFromPrevious;
1414

15-
public FundingStageConfig()
15+
public FundingStageConfig(ValidationEnvironment environment = ValidationEnvironment.Production)
1616
{
17+
var minDaysAfterPrevious = environment == ValidationEnvironment.Debug ? 0 : 1;
18+
1719
previousDateSource = new BehaviorSubject<IObservable<DateTime>>(Observable.Return(DateTime.MinValue));
1820
var previousDate = previousDateSource.Switch();
19-
var minAllowed = previousDate.Select(d => d.AddDays(1));
21+
var minAllowed = previousDate.Select(d => d.AddDays(minDaysAfterPrevious));
2022

2123
timeFromPreviousHelper = this.WhenAnyValue(x => x.ReleaseDate)
2224
.CombineLatest(minAllowed, (relDate, minDate) => new { relDate, minDate })

src/Angor/Avalonia/AngorApp/UI/Flows/CreateProject/Wizard/InvestmentProject/Model/InvestmentProjectConfigBase.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ namespace AngorApp.UI.Flows.CreateProject.Wizard.InvestmentProject.Model
1212
{
1313
public abstract partial class InvestmentProjectConfigBase : ReactiveValidationObject, IInvestmentProjectConfig, IDisposable
1414
{
15-
protected enum ValidationEnvironment
16-
{
17-
Production,
18-
Debug
19-
}
15+
protected ValidationEnvironment Environment { get; }
2016

2117
private readonly ReadOnlyObservableCollection<IFundingStageConfig> stages;
2218
protected readonly CompositeDisposable Disposables = new();
@@ -46,6 +42,7 @@ protected enum ValidationEnvironment
4642

4743
protected InvestmentProjectConfigBase(ValidationEnvironment environment)
4844
{
45+
Environment = environment;
4946
StagesSource.Connect()
5047
.Bind(out stages)
5148
.Subscribe()
@@ -157,7 +154,7 @@ private void AddDebugValidations()
157154

158155
public void AddStage()
159156
{
160-
StagesSource.Add(new FundingStageConfig());
157+
StagesSource.Add(new FundingStageConfig(Environment));
161158
}
162159

163160
public IFundingStageConfig CreateAndAddStage(decimal percent = 0, DateTime? releaseDate = null)

0 commit comments

Comments
 (0)